将值写入具有偏移量的GLSL统一数组元素

时间:2014-03-11 20:42:55

标签: opengl-es-2.0 glsl

我试图找到一种方法来设置vec3数组中单个元素的值。我所能找到的只是从一开始就编写整个数组或几个元素的方法。问题是我无法找到一种方法来抵消它写入的“地址”(我习惯于C ++)。

我想这样做的原因是我的片段着色器中有一些带有某些变量的灯光。但是我想标记我的灯光是脏的,只有在更改后才将新数据发送到着色器。所以当我改变灯号4的位置时,我想改变u_LightPos [3]值。

Fragment Shader:

const int MAX_LIGHTS = 6;
uniform vec3 u_LightPos[MAX_LIGHTS];

OpenGL ES 2.0(Java,android平台):

int LightPos = GLES20.glGetUniformLocation(ShaderProgram, "u_LightPos");
GLES20.glUniform3fv(LightPos, 3, m_aLightPos, 0 );

glUniform3fv函数确实有一个count和offset参数,但是偏移量用于你正在读取的数组的偏移量,而不是你要写入的着色器数组。

1 个答案:

答案 0 :(得分:2)

你可以这样做:

int loc = GLES20.glGetUniformLocation(ShaderProgra, "u_LightPos[3]");
GLES20.glUniform3fv(LightPos, 3, m_aLightPos, 0 );

数组的每个元素都有一个单独的位置,这也适用于结构。您可以阅读有关此here

的更多信息