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

WebGL: How to Use Integer Attributes in GLSL

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

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

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

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

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 属性”部分中说:

The attribute qualifier can be used only with the data types float, vec2, vec3, vec4, mat2, mat3, and mat4. Attribute variables cannot be declared as arrays or structures.

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