Help us understand the problem. What is going on with this article?

AGAL入門 #1 : レジスタの種別

More than 3 years have passed since last update.

AGAL勉強中です。メモがてらまとめをAGAL入門というタイトルで投稿していってみます。入門と言いつついいつつ、すでに自分が知っている基礎知識はすっ飛ばすため(Stage3Dの仕組みとかシェーダーの仕組みとか)悪しからず。

おおまかな分類

一覧表は最後に紹介する外部リンク先をみてもらうとして、ここでは、いくつかの視点でグループ化してまとめます。

使う場所別

頂点シェーダーで使う: vt va vc op
フラグメントシェーダーで使う: ft fc fs oc
共用: v (両シェーダーの値受け渡し用途です。)

入出力別

書きこみ用: op oc (各シェーダーの演算結果を収めるものです)
読み出し用: vc fc va fs
読み書き可能: vt ft v

各レジスタ数

AGALバージョンで異なります。

  • AGAL1
     va0~va7 vc0~vc127 fc0~fc27 vt0~vt7 ft0~ft7 v0~v7 fs0~fs7

  • AGAL2
     va0~va7 vc0~vc249 fc0~fc63 vt0~vt25 ft0~ft25 v0~v9 fs0~fs15

  • AGAL3
     va0~va15 vc0~vc249 fc0~fc199 vt0~vt25 ft0~ft25 v0~v9 fs0~fs15

AGAL1の厳しさが光ります。太字は1つ前のバージョンから向上した箇所。opocはどこでも1つだけです。(お尻に数字も付けないで使う。) vcおよびfcに余裕があるので積極的に使いたいところですが、MeshStyle側ではあまり有効活用できないか。

ActionScriptからの設定

読み出し用AGALレジスタはActionscriptから値を設定します。大きな意味では変数と取れそうです。

  • Context3D.setVertexBufferAt()

 vaの設定に使います。 頂点ごとの設定値です。
 リファレンスページ:setVertexBufferAt

  • Context3D.setProgramConstantsFromVector()
  • Context3D.setProgramConstantsFromMatrix()
  • Context3D.setProgramConstantsFromByteArray()

 vc fcの設定に使います。 シェーダ全体の定数です。
 リファレンスページ:setProgramConstantsFromVector setProgramConstantsFromMatrix setProgramConstantsFromByteArray

  • Context3D.setTextureAt()

 fsの設定に使います。テクスチャーの参照です。
 リファレンスページ:setTextureAt

注意点

  • 定数(vcfc)は演算の引数に2つ同時にとれない。定数同士の演算をしたい場合は一度vtftに値をコピーしてからそちらを引数にして演算する。

参考ページ

AGAL bytecode format(公式) http://help.adobe.com/en_US/as3/dev/WSd6a006f2eb1dc31e-310b95831324724ec56-8000.html
AGAL入門:レジスタの種類(英語) http://jacksondunstan.com/articles/1661
こちらにレジスタの一覧表があります。後者の記事の関連記事4つを読むだけでAGALに詳しくなれます。

まとめ

以上です。AGALは日本語の情報が少ないので、こんなメモ程度でも誰かの参考になれば幸い。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away