在GLSL ES中,整数可以用来做什么?

3

在GLSL ES 2.0中,整数的操作非常有限。

例如:

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

因此,似乎你可以做的唯一事情是:

  • 将整数赋值给整数。
  • 通过索引访问数组元素。
  • 进行基本算术运算(-+*/),但仅限于其他整数之间。没有运算符允许您将floatint相加。
  • 将它们彼此比较。
  • 将它们转换为其他类型。
  • vec构造函数允许您传递整数。

真的只有这些吗?除了vec构造函数外,是否有任何内置函数接受int参数?是否有任何可以在floatint之间进行的操作?


1
如果你能在两者之间进行转换,还需要什么呢? - Bartek Banachewicz
1个回答

5
您是正确的,整数的使用情况有限。根据OpenGL ES Shading Language规范4.1.3:

主要支持整数作为编程辅助工具。在硬件层面上,实际的整数将有助于有效实现循环数组索引,以及引用纹理单元。然而,没有要求语言中的整数映射到硬件中的整数类型。不希望底层硬件具有广泛的整数操作支持。OpenGL ES Shading Language实现可以将整数转换为浮点数以对其进行操作。因此,不存在可移植的包装行为。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接