WebGL:如何在GLSL中使用整数属性

14

在WebGL顶点着色器中是否可以使用整数属性?我的顶点数据包含整数,我想这样定义顶点属性:

attribute vec3 POSITION;
attribute int INDEX[8];
attribute float WEIGHT[8];
如果这是可能的,那么我该如何使用gl.bufferData从JS将混合顶点数据传递给着色器?
如果这不可能,那么实现相同结果的最佳方法是什么(从CPU传递索引到着色器并在着色器中将它们用作整数)?

我正在寻找类似的功能,但只有在使用 attribute float 并将其转换为整数时才能使其工作,例如 int(index[0])。正如 AA 中所述,GL ES SL 2.0 不支持整数属性。 - user1300214
1个回答

18

WebGL不支持整数属性。除了规范中列出的一些例外情况(https://www.khronos.org/registry/webgl/specs/1.0/),WebGL使用与OpenGL ES 2.0大部分相同的GLSL特性集。

OpenGL ES着色语言1.00规范文档(这是用于ES 2.0的GLSL版本)在第30页第4.3.3节中写道:

属性限定符只能与数据类型float、vec2、vec3、vec4、mat2、mat3和mat4一起使用。属性变量不能声明为数组或结构体。

你最好的做法可能是简单地使用没有小数部分的浮点数。可以精确表示的值的范围将比使用相同存储空间的整数更有限。例如,16位浮点数(半精度浮点数)具有11个有效位,可以精确表示0到2048之间的整数。


WebGL似乎也不支持半浮点属性,所以这可能不是最好的例子。 - riv

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