私の頂点シェーダーは、
uniform Block1{ vec4 offset_x1; vec4 offset_x2;}block1;
out float value;
in vec4 position;
void main()
{
value = block1.offset_x1.x + block1.offset_x2.x;
gl_Position = position;
}
値を渡すために使用しているコードは次のとおりです。
GLfloat color_values[8];// contains valid values
glGenBuffers(1,&buffer_object);
glBindBuffer(GL_UNIFORM_BUFFER,buffer_object);
glBufferData(GL_UNIFORM_BUFFER,sizeof(color_values),color_values,GL_STATIC_DRAW);
glUniformBlockBinding(psId,blockIndex,0);
glBindBufferRange(GL_UNIFORM_BUFFER,0,buffer_object,0,16);
glBindBufferRange(GL_UNIFORM_BUFFER,0,buffer_object,16,16);
ここで私が期待しているのは、vec4 ユニフォームごとに 16 バイトを渡すことです。offset=16 、size = 16 で GL_INVALID_VALUE エラーが発生しました。オフセット値と混同しています。仕様によると、「buffer_object」に対応しています。