【问题标题】:What can you do with integers in GLSL ES?你可以用 GLSL ES 中的整数做什么?
【发布时间】:2015-12-04 12:07:13
【问题描述】:

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

例如:

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

所以,你真正可以用整数做的似乎是:

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

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

【问题讨论】:

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

标签: opengl-es glsl shader


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2021-03-18
    • 1970-01-01
    • 2012-11-17
    • 2020-07-09
    • 2010-09-11
    • 2010-11-07
    • 1970-01-01
    • 2011-06-26
    • 2018-01-25
    相关资源
    最近更新 更多