• AGAL 命令


     名称 opcode  操作  说明 
     mov  0×00 移动   将数据从 source1 移动到 destination
     add 0×01  相加   destination = source1 + source2
     sub 0×02  相减   destination = source1 – source2
     mul  0×03 相乘  destination = source1 * source2
     div  0×04  除以  destination = source1 / source2
     rcp  0×05  倒数  destination = 1/source1
     min  0×06  最小值  destination = minimum(source1,source2)
     max  0×07  最大值  destination = maximum(source1,source2)

    destination = maximum(source1,source2)

     frc  0×08  分数  destination = source1 – (float)floor(source1)

    destination = source1 – (float)floor(source1)

     sqt  0×09  平方根  destination = sqrt(source1)
     rsq  0x0a  平方根倒数  destination = 1/sqrt(source1)
     pow  0x0b  幂  destination = pow(source1,source2)
     log  0x0c  对数  destination = log_2(source1)
     exp  0x0d  指数  destination = 2^source1
     nrm  0x0e  标准化  destination = normalize(source1)
     sin  0x0f  正弦  destination = sin(source1)
     cos  0×10  余弦  destination = cos(source1)
     crs  0×11  向量积  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  0×12  点积  destination = source1.x*source2.x + source1.y*source2.y + source1.z*source2.z
     dp4  0×13  点积  destination = source1.x*source2.x + source1.y*source2.y + source1.z*source2.z + source1.w*source2.w

     abs

     0×14  取绝对值  destination = abs(source1),按组件
     neg  0×15   求反  destination = -source1,按组件
     sat  0×16  饱和  destination = maximum(minimum(source1,1),0),按组件
     m33  0×17  矩阵连乘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)

     m44  0×18  矩阵连乘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)

     destination.w = (source1.x * source2[3].x) + (source1.y * source2[3].y) + (source1.z * source2[3].z) + (source1.w *source2[3].w)

     m34  0×19  矩阵连乘3×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)

     kil  0×27  丢弃  如果单个标量源组件小于零,则将丢弃片段并不会将其绘制到帧缓冲区。 (目标寄存器必须全部设置为 0
     tex  0×28  纹理取样  destination 等于从坐标 source1 上的纹理 source2 进行加载。在这种情况下, source2 必须采用取样器格式
     sge  0×29  大于等于时设置  destination = source1 >= source2 ? 1 : 0
     slt  0x2a  小于时设置  destination = source1 < source2 ? 1 : 0
     seq  0x2c  相等时设置  destination = source1 == source2 ? 1 : 0
     sne  0x2d  不相等时设置

    destination = source1 != source2 ? 1 : 0

     va 属性寄存器

    很多人看到这个名字的时候都会认为va中应该存的是某一个对象的属性,或者一些其他什么东西。但实事并非如此。当你上载一些顶点数据之后,我们通过AS3来制定这些顶点所存在的位置,那么你就可以通过va来直接使用。举个简单的例子,在上一篇文章中,我们使用了va0,而va0的数据又是从etVertexBufferAt来直接指定的,所以在你编写代码的时候,你的AGAL和AS3有着直接的联系。

     vc 常量寄存器

    顾名思义,与程序中的常量概念类似,这部分数据是从外部直接传递进来的,至于你如何使用完全取决于你自己。关于用法我们在后面会涉及到。

     vt 临时寄存器

    应该说vt的概念最接近于我们程序中的变量,因为他可以被你临时读取,并且允许你在AGAL运行时来动态改变其中的数值。

     op 输出寄存器

    好吧,当你吧所有的操作都完成后,那么你的结果应该有一个归宿,这个op就是你顶点数据最后的归宿。每次运行顶点数据后,你都应该看到op,否则你的程序运行后没有任何效果。

    ----------------------------------------------------------HOHO--------------------------------------------------------------

     fs 纹理采样寄存器

     教程到目前位置,我们还没有看到任何和贴图有关系的内容。不错,笔者打算将这部分内容放在后面讲解。因为还有不少好东西放在后面等着大家呢。这里简单解释一下,所谓纹理采样,则是调用你显存中的纹理数据。纹理我们可以理解为贴图,或者理解为你上载到GPU的那张图片。

     fc 常量寄存器

    又遇到常量了。这里和刚才的vc其实是一样的,因为顶点和纹理这两部分的程序不可交叉访问,所以贴图也有自己的常量寄存器。

     ft 临时寄存器

    和vt概念相同,但只用于纹理操作。

     oc 输出寄存器

    和op相同,但只能用于纹理操作。

    ----------------------------------------------------------HOHO--------------------------------------------------------------

     v 插值寄存器

    这是比较特殊的一个寄存器,因为刚才我们所说的8个寄存器类型只能在自己负责的领域操作,顶点的寄存器不可访问纹理的内容,同样,纹理操作中也无法访问顶点数据,那么如果他们的数据有交集如何呢?这里就体现了v的作用(当然,在微博中,v也是一种身份的象征)。v可以在在顶点操作中使用,也可以在纹理操作中使用。

    转:http://ashan.org/post-309.html#comment-17360

  • 相关阅读:
    Linux shell read命令
    mysql 详解 01
    centos 6/7 mysql 5.7 修改root密码 mysql root密码找回
    iptables基本原理讲解与规则的增删改查
    nginx反向代理https访问502, nginx反向代理, 支持SNI的https回源,SNI源点,nginx反向代理报错
    nginx 配置 强制访问https
    有名管道FIFO进程间数据传输实例
    命名管道FIFO及其读写规则
    224、Basic Calculator
    (匿名)管道的读写规则
  • 原文地址:https://www.cnblogs.com/mattins/p/2869549.html
Copyright © 2020-2023  润新知