0

私はレジスターについて少し混乱しています。

この記事では、 http://www.adobe.com/devnet/flashplayer/articles/what-is-agal.html

2行のAGALコードがあります

m44 op, va0, vc0
mov v0, va1

最初の行は計算結果をopレジスタに入れましたが、2番目の行はopレジスタを操作しませんでした。

では、最初の行を実行する意味は何ですか?

また、私はデモを見つけました:

//compile vertex shader
var vertexShader:Array =
    [
    "dp4 op.x, va0, vc0", //4x4 matrix transform from 0 to output clipspace
    "dp4 op.y, va0, vc1",
    "dp4 op.z, va0, vc2",
    "dp4 op.w, va0, vc3",
    "mov v0, va1.xyzw"    //copy texcoord from 1 to fragment program
    ];
var vertexAssembler:AGALMiniAssembler = new AGALMiniAssembler();
vertexAssembler.assemble(flash.display3D.Context3DProgramType.VERTEX, vertexShader.join("\n"));

//compile fragment shader
var fragmentShader:Array =
    [
    "mov ft0, v0\n",
    "tex ft1, ft0, fs1 <2d,clamp,linear>\n", //sample texture 1     
    "mov oc, ft1\n"
    ];

頂点シェーダーでは、上の3行も結果をopに入れますが、4行目はそれを使用していません。

それで、それはどういう意味ですか?

ありがとう

4

1 に答える 1

1

最初の行は、現在の頂点位置とModel-View-Projection行列を単純に乗算し、その結果を出力レジスタに書き込みます。

2行目は、さまざまなレジスタを使用して、一部のデータをピクセルシェーダーに渡します。これらの2行はすべて私が見ることができるコードであるため、私が言えるのは、va1にはおそらくテクスチャUV座標が含まれているということだけです。

于 2012-12-13T12:56:27.290 に答える