OpenGL如何在共享布局统一块中获取数组元素的偏移量?
OpenGL how to get offset of array element in shared layout uniform block?
我在着色器中有一个 shared
布局统一块:
layout(shared) uniform TestBlock
{
int test[5];
};
如何获取 test[3]
的偏移量?
当我尝试使用 glGetUniformIndices
获取 test[3]
的索引时,它将 return 与 test[0]
的索引相同的数量。
所以我不能使用 glGetActiveUniformsiv
来获取 test[3]
.
的索引偏移量
那么,如何获取test[3]
的偏移量?
(请注意,我不想使用布局 std140
。)
int
s 等基本类型的数组被视为单个值。您无法获取数组中单个元素的偏移量。但是,您可以查询数组跨度,即从数组中的一个元素到下一个元素的字节数。然后你就可以做乘法了。
使用新程序自省API:
auto ix = glGetProgramResourceIndex(prog, GL_UNIFORM, "TestBlock.test");
GLenum props[] = {GL_ARRAY_STRIDE, GL_OFFSET};
GLint values[2] = {};
glGetProgramResourceiv(prog, GL_UNIFORM, ix, 2, &props, 2, NULL, &values);
auto byteOffset = values[1] + (3 * values[0]);
我在着色器中有一个 shared
布局统一块:
layout(shared) uniform TestBlock
{
int test[5];
};
如何获取 test[3]
的偏移量?
当我尝试使用 glGetUniformIndices
获取 test[3]
的索引时,它将 return 与 test[0]
的索引相同的数量。
所以我不能使用 glGetActiveUniformsiv
来获取 test[3]
.
的索引偏移量
那么,如何获取test[3]
的偏移量?
(请注意,我不想使用布局 std140
。)
int
s 等基本类型的数组被视为单个值。您无法获取数组中单个元素的偏移量。但是,您可以查询数组跨度,即从数组中的一个元素到下一个元素的字节数。然后你就可以做乘法了。
使用新程序自省API:
auto ix = glGetProgramResourceIndex(prog, GL_UNIFORM, "TestBlock.test");
GLenum props[] = {GL_ARRAY_STRIDE, GL_OFFSET};
GLint values[2] = {};
glGetProgramResourceiv(prog, GL_UNIFORM, ix, 2, &props, 2, NULL, &values);
auto byteOffset = values[1] + (3 * values[0]);