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つ前のバージョンから向上した箇所。op
とoc
はどこでも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
注意点
- 定数(
vc
とfc
)は演算の引数に2つ同時にとれない。定数同士の演算をしたい場合は一度vt
やft
に値をコピーしてからそちらを引数にして演算する。
参考ページ
AGAL bytecode format(公式) http://help.adobe.com/en_US/as3/dev/WSd6a006f2eb1dc31e-310b95831324724ec56-8000.html
AGAL入門:レジスタの種類(英語) http://jacksondunstan.com/articles/1661
こちらにレジスタの一覧表があります。後者の記事の関連記事4つを読むだけでAGALに詳しくなれます。
まとめ
以上です。AGALは日本語の情報が少ないので、こんなメモ程度でも誰かの参考になれば幸い。