A1
<opcode> <destination> <source 1> <source 2>
第一个参数 opcode 代表指令或函数
destination 可以是一个内存变量或者寄存器
source 可以是一个寄存器、内存变量或常量
如: mov v0 va1
在as3语法中等同于v0=va1
(这里和HLA语法有些不同,有待研究)
A2
8个顶点属性寄存器(va~va7),通过Context3D.setVertexBufferAt送入Stage3D的网格顶点
128个顶点常量寄存器(vc0~vc127) 以及 28个片段常量寄存器(fc0~fc27) ,通过Context3D.setProgramConstants方法传入Stage3D
每种着色器各有8个临时寄存器:vt0~vt7(供顶点着色器使用)和ft0~ft7(供片段着色器使用)
v0~v8 这8个变量寄存器被用于从顶点着色器向片段着色器传递信息
在一个片段着色器中,8个纹理采样寄存器(用于访问被setTextureAt方法所定义的纹理),通过fs0~fs7进行访问
顶点着色器的输出坐标(最终结果)被存在op中
片段着色器的输出颜色(最终结果)被存在oc中
A3
复制数据
mov:destination=source :将数据从源寄存器复制到目标寄存器
A4
代数操作码
min:destination=min(source1 , source2) : 两个寄存器之间的较小值,分量形式
max:destination=max(source1 ,source2): 两个寄存器之间的较大值,分量形式
sqt:destination=sqrt(source):一个寄存器的平方根,分量形式
rsq:destination=1/sqrt(source) 一个寄存器的平方根倒数,分量形式
pow:destination=pow(source1 ,source2):source1的source2次冥,分量形式
log:destination=log(source1)一个寄存器以2为底的对数,分量形式
exp:destination=2^source1:2的source1次方,分量形式
nrm:destination=normalize(source1):将一个寄存器标准化为长度1的单位向量
abs:destination=abs(source1):一个寄存器的绝对值,分量形式
sat:destination=max(min(source1,1),0):将一个寄存器锁0-1的范围里
A5
数学操作码
add:destination=source1+source2:两个寄存器相加,分量形式
sub:destination=source1-source2:两个寄存器相减,分量形式
mul:destination=source1*source2:两个寄存器相乘,分量形式
div:destination=source1/source2:两个寄存器相除,分量形式
rcp:destination=1/source1:一个寄存器的倒数,分量形式
frc:destination=source1-(float)floor(source1)一个寄存器的分数部分,分量形式
neg:destination=-source1:一个寄存器取反,分量形式
A6
三角学操作码
sin:destination=sin(source1):一个寄存器的正弦值,分量形式
cos:destination=cos(source1):一个寄存器的余弦值,分量形式
A7
条件操作码
kill:如果寄存器有任意一个分量小于0,则丢弃该像素不进行绘制(只适用于片段着色器)
sge:destination = source1>=source2 ? 1 : 0 类似三元操作符 分量形式
slt:destination = source1<source2 ? 1 : 0 同上
seq:destination= source1==source2 ? 1 : 0 同上
sne:destination=source1!=source2 ? 1:0 同上
A8
向量和矩阵操作码
crs:两个寄存器间的叉积
destination.x=source1.y*source2.z-source1.z*source2.y
destination.y=source1.z*source2.x-source1.x*source2.z
destination.z=source1.x*source2.y-source1.y*source2.x
dp3:两个寄存器间的点积,3分量
destination=source1.x*source2.x+source1.y*source2.y+source1.z*source2.z
dp4:两个寄存器间的点积,4分量
destination=source1.x*source2.x+source1.y*source2.y+source1.z*source2.z+source1.w+source2.w
m33:由一个3*3的矩阵对一个3分量的向量进行矩阵乘法
destination.x=(source1.x*source2[0].x)+(source1.y*source2[0].y)+(source1.z*source2[0].z)
destination.y=(source1.x*source2[1].x)+(source1.y*source2[1].y)+(source1.z*source2[1].z)
destination.z=(source1.x*source2[2].x)+(source1.y*source2[2].y)+(source1.z*source2[2].z)
m34:由一个3*4的矩阵对一个4分量的向量进行矩阵乘法
destination.x=(source1.x*source2[0].x)+(source1.y*source2[0].y)+(source1.z*source2[0].z)+(source1.w*source2[0].w)
destination.y=(source1.x*source2[1].x)+(source1.y*source2[1].y)+(source1.z*source2[1].z)+(source1.w*source2[1].w)
destination.z=(source1.x*source2[2].x)+(source1.y*source2[2].y)+(source1.z*source2[2].z)+(source1.w*source2[2].w)
m44:由一个4*4的矩阵对一个4分量的向量进行矩阵乘法
destination.x=(source1.x*source2[0].x)+(source1.y*source2[0].y)+(source1.z*source2[0].z)+(source1.w*source2[0].w)
destination.x=(source1.x*source2[1].x)+(source1.y*source2[1].y)+(source1.z*source2[1].z)+(source1.w*source2[1].w)
destination.y=(source1.x*source2[2].x)+(source1.y*source2[2].y)+(source1.z*source2[2].z)+(source1.w*source2[2].w)
destination.z=(source1.x*source2[3].x)+(source1.y*source2[3].y)+(source1.z*source2[3].z)+(source1.w*source2[3].w)