微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我在着色器中有一个 shared 布局统一块:

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

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

解决方法

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

使用新的程序自省 API:

auto ix = glGetProgramResourceIndex(prog,GL_UNIFORM,"TestBlock.test");
GLenum props[] = {GL_ARRAY_STRIDE,GL_OFFSET};
GLint values[2] = {};
glGetProgramResourceiv(prog,ix,2,&props,NULL,&values);

auto byteOffset = values[1] + (3 * values[0]);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。