AGAL 操作码

AGAL(Actionscript GPU Assembler)是一种图形处理器指令集,用于Stage3D的着色器编程。本文详细介绍了AGAL的操作码,包括数据复制、代数、数学、三角学、条件、向量矩阵等操作,以及它们在3D图形渲染中的应用。
摘要由CSDN通过智能技术生成

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值