3

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

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”。如何获取所有缓冲区变量的偏移量?

4

1 回答 1

4

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

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

于 2013-03-19T00:35:45.140 回答