我正在为 iPhone 开发一个 OpenGL 应用程序。在我的顶点着色器中,我需要一种方法来一次更改大量(但不是全部)顶点的颜色,因此我选择了颜色索引。这将允许我让 VBO 保持静态,并修改单个统一变量,而不是遍历每个顶点并修改每个帧之间的颜色信息。
我的计划是创建一个带有颜色数组的制服,在属性中添加一个包含索引的整数。这是我的顶点着色器:
uniform mat4 u_mvp_matrix;
uniform vec4 u_color_array[];
attribute vec4 a_position;
attribute int a_colorIndex;
varying lowp vec4 v_color;
void main()
{
v_color = u_color_array[a_colorIndex];
gl_Position = u_mvp_matrix * a_position;
}
这会引发错误:
int 不能是顶点着色器中的 in
我做了一些研究。iPhone 最迟支持 OpenGL ES 2.0,这意味着它最迟支持 GLSL 1.2,显然整数仅在 GLSL 1.3 及更高版本中支持。我尝试将 a_colorIndex 更改为浮点数。我没想到它会起作用,它没有。
如何为每个顶点指定颜色索引?