LoginSignup
1
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-06-04

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は日本語の情報が少ないので、こんなメモ程度でも誰かの参考になれば幸い。

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1