AGAL勉強中です。メモがてらまとめをAGAL入門というタイトルで投稿していってみます。入門と言いつついいつつ、すでに自分が知っている基礎知識はすっ飛ばすため(Stage3Dの仕組みとかシェーダーの仕組みとか)悪しからず。
おおまかな分類
一覧表は最後に紹介する外部リンク先をみてもらうとして、ここでは、いくつかの視点でグループ化してまとめます。
使う場所別
頂点シェーダーで使う: vt va vc op
フラグメントシェーダーで使う: ft fc fs oc
共用: v (両シェーダーの値受け渡し用途です。)
入出力別
書きこみ用: op oc (各シェーダーの演算結果を収めるものです)
読み出し用: vc fc va fs
読み書き可能: vt ft v
各レジスタ数
AGALバージョンで異なります。
-
AGAL1
va0~va7vc0~vc127fc0~fc27vt0~vt7ft0~ft7v0~v7fs0~fs7 -
AGAL2
va0~va7vc0~vc249fc0~fc63vt0~vt25ft0~ft25v0~v9fs0~fs15 -
AGAL3
va0~va15vc0~vc249fc0~fc199vt0~vt25ft0~ft25v0~v9fs0~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は日本語の情報が少ないので、こんなメモ程度でも誰かの参考になれば幸い。