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

时间:2015-12-04 12:07:13

标签: opengl-es glsl shader

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

例如:

  • 不支持按位操作。
  • 没有内在函数似乎接受int类型

所以,你似乎唯一可以用整数做的事情是:

  • 将整数分配给整数
  • 按索引访问数组元素
  • 基本算术(-+*/),但仅限于其他整数之间。不存在允许您一起添加floatint的运算符。
  • 相互比较。
  • 将它们转换为其他类型
  • vec构造函数允许您传递整数
是的,真的吗?是否任何内部函数采用除int构造函数之外的vec参数?您可以在floatint之间执行任何操作吗?

1 个答案:

答案 0 :(得分:4)

你是对的,整数用例是有限的。每OpenGL ES Shading Language spec,4.1.3:

  

主要支持整数作为编程辅助工具。在硬件级别,实数整数将有助于高效实现循环数组索引,以及引用纹理单元。但是,没有要求语言中的整数映射到硬件中的整数类型。预计底层硬件不会完全支持各种整数操作。 OpenGL ES着色语言实现可以将整数转换为浮点数以对它们进行操作。因此,没有便携式包装行为。

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