OpenGL如何获取共享布局统一块中数组元素的偏移量?

问题描述 投票:0回答:1

我在着色器中有一个

shared
布局统一块:

layout(shared) uniform TestBlock
{
    int test[5];
};

如何获取

test[3]
的偏移量?
当我尝试使用
glGetUniformIndices
获取
test[3]
的索引时,它将返回相同数量的
test[0]
的索引。
所以我不能使用
glGetActiveUniformsiv
来获取
test[3]
索引的偏移量。
那么,如何获取
test[3]
的偏移量呢?
(请注意,我不想使用布局
std140
。)

opengl glsl
1个回答
3
投票

int
等基本类型的数组被视为单个值。您无法获取数组中单个元素的偏移量。但是,您可以查询数组步长,即从数组中的一个元素到下一个元素的字节数。然后你就可以做乘法了。

使用新的程序自省 API:

auto ix = glGetProgramResourceIndex(prog, GL_UNIFORM, "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]);
© www.soinside.com 2019 - 2024. All rights reserved.