是否可以在WebGL顶点着色器中使用整数属性?我的顶点数据包含整数,我想像这样定义顶点属性:
attribute vec3 POSITION;
attribute int INDEX[8];
attribute float WEIGHT[8];
如果可以,我如何使用gl.bufferData将混合顶点数据从js传递到着色器?
如果这不可能,那么获得相同结果的最佳方法是什么(将索引从CPU传递到着色器并在着色器中将它们用作整数)?
答案 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之间的整数。