Adobe AGAL对寄存器感到困惑

时间:2012-12-13 07:10:43

标签: actionscript-3 flash stage3d agal

我对寄存器有点困惑。

在这篇文章中,http://www.adobe.com/devnet/flashplayer/articles/what-is-agal.html

有两行AGAL代码

m44 op, va0, vc0
mov v0, va1

第一行将计算结果放入op寄存器,但第二行没有运行 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"
    ];

在vertexShader中,前三行也将reslut放在op中,但第四行也没有使用它。

那是什么意思呢?

感谢

1 个答案:

答案 0 :(得分:1)

第一行简单地将当前顶点位置和模型 - 视图 - 投影矩阵相乘,并将结果写入输出寄存器。

第二行使用不同的寄存器将一些数据传递给像素着色器。既然这两行都是我能看到的代码,我只能说va1可能包含纹理UV坐标。