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

时间:2015-01-10 10:06:41

标签: glsl webgl

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

attribute vec3 POSITION;
attribute int INDEX[8];
attribute float WEIGHT[8];

如果可以,我如何使用gl.bufferData将混合顶点数据从js传递到着色器?

如果这不可能,那么获得相同结果的最佳方法是什么(将索引从CPU传递到着色器并在着色器中将它们用作整数)?

1 个答案:

答案 0 :(得分:12)

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之间的整数。