Opengl es GLSL ES 2:将制服用作颜色/矢量是否安全;数组下标?

Opengl es GLSL ES 2:将制服用作颜色/矢量是否安全;数组下标?,opengl-es,Opengl Es,目的是: 对纹理进行采样并获得颜色 与其通过.x/y/z/r/g/b获取颜色分量,不如使用以下形式:颜色[TheInUniform],即数组下标符号 在OpengGL ES 2.0编程指南中: “你需要做一件事 但是,要注意的是,如果你访问一个具有非常数积分的向量 表达式(例如,使用整数变量索引),则这可能不是 在OpenGL ES 2中受支持。.0。“ “OpenGL ES 2.0规范不强制支持此行为,除了 关于特定变量类型(即统一变量)。” 第二句话是说“一致可以用作数组下标”还是“可以

目的是:

  • 对纹理进行采样并获得颜色
  • 与其通过.x/y/z/r/g/b获取颜色分量,不如使用以下形式:颜色[TheInUniform],即数组下标符号
在OpengGL ES 2.0编程指南中:

  • “你需要做一件事 但是,要注意的是,如果你访问一个具有非常数积分的向量 表达式(例如,使用整数变量索引),则这可能不是 在OpenGL ES 2中受支持。.0。“

  • “OpenGL ES 2.0规范不强制支持此行为,除了 关于特定变量类型(即统一变量)。”

  • 第二句话是说“一致可以用作数组下标”还是“可以用非常量索引一致向量”? ( P110,见汇总表,它实际上是指后者。)

    根据我的理解,对于着色器,制服实际上是恒定的,因此像使用颜色[制服]这样使用它安全吗?

    谢谢

    像这样使用它安全吗:颜色[制服]

    它不能保证工作。第5.5节OpenGL ES着色语言v1.0规范规定:

    任何整数表达式都可以用作下标

    。。。这听起来应该是可行的,但第10.25节指出:

    一些实现不直接支持数组、向量和矩阵的动态索引。。。向量和矩阵的动态索引是否应从规范中删除? 解决方案:保留主规格。支持不是强制性的


    然而,即使得到支持,这样做也不是一个好主意。根据我的经验,在大多数移动架构上,基于动态或统一的索引可能比使用常量索引或swizzle语法(即编译时,因此可以由编译器“内联”并直接编码到指令中)要慢。

    谢谢!稍微慢一点是可以接受的,毕竟,使用另一种动态方法(用均匀向量点选组件)可能会更慢。我只是想确定这是否有效。不,它不能保证有效,正如《编程指南》所述,它不适用于变量。@macrod知道OpenGL ES着色语言v1.0规范文档中哪一位禁止它吗?我引用的部分似乎明确允许变量索引,它特别指出“任意”整数表达式可以是向量索引的数组下标。没有提到编译时常量表达式或统一表达式的必要性。在第10.25节中发现它作为脚注潜伏着-完全正确,它不保证得到支持。嗯,通过说“任何整数”,规范可能意味着(这不是很清楚),任何整数作为统一向量的索引,在中有两次出现“任意整数”。