Opengl es GLSL ES中的整数可以做什么?

Opengl es GLSL ES中的整数可以做什么?,opengl-es,glsl,shader,Opengl Es,Glsl,Shader,在GLSL ES 2.0中,使用整数可以做的事情似乎非常有限 例如: 不支持按位操作 似乎没有内在函数接受int类型 所以,似乎你能真正用整数做的唯一一件事是: 将整数赋值给整数 按索引访问数组元素 基本算术(-,+,*,/),但仅在其他整数之间。不存在允许您同时添加浮点和int的运算符 相互比较 将它们转换为其他类型 vec构造函数允许您传递整数 真的是这样吗?除了vec构造函数之外,是否有任何采用int参数的内在函数?在float和int之间是否可以执行任何操作?您是正确的,整数的使

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

例如:

  • 不支持按位操作
  • 似乎没有内在函数接受
    int
    类型
所以,似乎你能真正用整数做的唯一一件事是:

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

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

您是正确的,整数的使用情况是有限的。根据第4.1.3节:

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


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

如果可以在两者之间进行转换,还需要什么?