检索着色器存储缓冲区的属性

时间:2013-03-18 14:59:59

标签: opengl glsl

我想检索着色器存储缓冲区的一些属性:

struct A{
   float x;
   float y;
   vec4  v;
};

struct B{
    vec3 u;
};

layout(std430) buffer foo{
   B b;
   A a[];
};

假设缓冲区处于活动状态。通过glGetProgramResourceiv()检索缓冲区的大小可以工作并产生48个机器单元。但是检索缓冲区变量的偏移量和“a”的数组步长是行不通的。

const GLenum props[] = {GL_OFFSET};
GLint* offset = new GLint;
GLuint varIndex = glGetProgramResourceIndex(_progID, GL_BUFFER_VARIABLE, "b");
glGetProgramResourceiv(_progID, GL_BUFFER_VARIABLE, varIndex, 1, props, 1, NULL, offset);

varIndex始终为“GL_INVALID_INDEX”。如何获取所有缓冲区变量的偏移量?

1 个答案:

答案 0 :(得分:4)

这是一个无效的索引,因为没有变量b。有b.u,但没有b。就the introspection API而言,唯一存在的变量是非用户定义类型的变量。

结构只是聚合;成员是这些聚合中的实际值。