你可以用 GLSL ES 中的整数做什么?

ten*_*our 3 shader opengl-es glsl

在 GLSL ES 2.0 中,您可以使用整数做的事情似乎非常有限。

例如:

  • 不支持按位运算。
  • 似乎没有内部函数接受int类型

所以,似乎你真正能用整数做的唯一一件事是:

  • 将整数分配给整数
  • 按索引访问数组元素
  • 基本算术 ( -, +, *, /),但仅限于其他整数之间。不存在允许您将floatandint相加的运算符。
  • 将它们相互比较。
  • 将它们转换为其他类型
  • vec 构造函数允许你传递整数

真的是这样吗?除了构造函数之外,是否有任何带int参数的内在函数vec?是否有任何可以做的之间的操作float和int?

D-s*_*ide 5

你是对的,整数的用例是有限的。根据OpenGL ES 着色语言规范4.1.3:

整数主要被支持作为编程辅助。在硬件级别,实整数将有助于有效实现循环和数组索引,以及引用纹理单元。但是,不要求语言中的整数映射到硬件中的整数类型。预计底层硬件不会完全支持范围广泛的整数运算。OpenGL ES 着色语言实现可以将整数转换为浮点数以对其进行操作。因此,没有可移植的包装行为。

由于无法保证 GLSL ES 整数类型映射到硬件整数类型,因此它仅对编译时类型检查有用,在运行时几乎没有影响。规范中列出了所有需要整数的地方。