Adobe最近推出了新的语言AGAL(Adobe图形汇编语言)。它是Molehill的一部分,其目的是为了创建所谓的 “着色器(shaders)”:很小的程序,它会作用于3D模型在场景中的渲染。jtN平坦软件园

这些着色器很酷。能达到惊人的渲染效果,编写代码也比ActionScript更难。jtN平坦软件园

这是AGAL的样子:jtN平坦软件园

//vertex shaderm44 op, va0, vc0 // pos to clipspacemov v0, va1 // copy uv//pixel shadertex ft1, v0, fs0 <2d,linear,nomip>mov oc, ft1是不是特别像看天书?什么是访问它的关键?jtN平坦软件园

问题是现阶段AGAL相关文档还很少,那么我尝试着来阐明这神秘的着色语言吧。jtN平坦软件园

操作码
着色器的每一行是由 3 个字符的字符串指定的命令行,称为“操作码”。jtN平坦软件园

一个AGAL行代码的语法如下:jtN平坦软件园

<opcode> <destination> <source 1> <source 2 or sampler>这是关键。记住此语法,AGAL会突然停止看起来像一个不可读的斑点。jtN平坦软件园

操作码(opcode)之后,可以是取决于该命令的目标,和一个或两个源(source)。jtN平坦软件园

目标和源是“寄存器”:GPU中的小小内存区域,供着色器使用(下面有更多的寄存器)。jtN平坦软件园

AGAL约30种不同功能的操作码。在Molehill的文档中可发现可用操作码(opcodes)的完整列表,下面是一些最常见的操作码。jtN平坦软件园

mov 移动数据从source1到目的地,按分量(点积)
add destination = source1 + source2,按分量(点积)
sub destination = source1 – source2,按分量(点积)
mul destination = source1 * source2,按分量(点积)
div destination = source1 / source2,按分量(点积)
dp3 dot product (3 components) between source1 and source2
dp4 dot product (4 components) between source1 and source2
m44 multiplication between 4 components vector in source1 and 4×4 matrix in source2
tex texture sample. Load from texture at source2 at coordinates source1.
AGAL寄存器
寄存器是在GPU的AGAL程序(着色器)执行期间使用的小内存区域。jtN平坦软件园

寄存器同时用于AGAL命令的源与目标。jtN平坦软件园

你也可以传递参数给你的着色器通过这些寄存器。jtN平坦软件园

每个寄存器为128位,这意味着它包含4个浮点值。这些值被称为寄存器的“组件”。jtN平坦软件园

寄存器组件可以通过坐标(xyzw)访问jtN平坦软件园

<register name>.xjtN平坦软件园

也可以通过颜色(rgba)访问jtN平坦软件园

<register name>.rjtN平坦软件园

上述的一些操作码,如“新增”,按点积执行自己的操作。这意味着,加法运算是由组件的组件执行。jtN平坦软件园

这里有六个可用的寄存器类型。jtN平坦软件园

1。属性寄存器
这些寄存器参考顶点着色器的VertexBuffer输入。因此,他们只能在顶点着色器中可用。jtN平坦软件园

要通过正确的索引分配一个VertexBuffer到一个特定的属性寄存器,使用方法jtN平坦软件园

Context3D:setVertexBufferAt()jtN平坦软件园

在着色器中,访问属性寄存器的语法:va<n>,其中<n>是属性寄存器的索引号。jtN平坦软件园

有一共有8个属性寄存器用于顶点着色器。jtN平坦软件园

2。常量寄存器
这些寄存器是用来从ActionScript传递参数[]
/r/n/n本文来自CSDN博客,转载请标明出处:http://www.flatws.cn/article/program/assembly/2011-03-20/17545.html