我想检索着色器存储缓冲区的一些属性:
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”。如何获取所有缓冲区变量的偏移量?
答案 0 :(得分:4)
这是一个无效的索引,因为没有变量b
。有b.u
,但没有b
。就the introspection API而言,唯一存在的变量是非用户定义类型的变量。
结构只是聚合;成员是这些聚合中的实际值。