gpt4 book ai didi

c++ - 如何在 OpenGLES 中获取图像变量的绑定(bind)点

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:20:13 24 4
gpt4 key购买 nike

我正在尝试在我的 GLES 着色器中获取图像变量的绑定(bind)点。我可以使用该代码为制服或着色器存储 block 执行此操作:

GLenum Prop = GL_BUFFER_BINDING;
GLint Binding = -1;
GLint ValuesWritten = 0;
glGetProgramResourceiv( GLProgram, GL_UNIFORM_BLOCK, i, 1, &Prop, 1, &ValuesWritten, &Binding );

不幸的是,没有 GL_IMAGE_BINDING 这样的东西。在桌面 GL 中,我只是使用 GetUniformLocation 获取图像制服的位置,然后使用 glProgramUniform1i 将其绑定(bind)到图像插槽。不幸的是,在 OpenGLES 中,glProgramUniform1i 只能用于采样器制服,不适用于图像制服。我需要这个绑定(bind)点的原因是因为我在做自动资源绑定(bind)。我的资源可以关联一个统一的变量名。我希望它们自动分配到正确的图像槽。到目前为止,除了 GLES 上的图像外,所有资源都可以正常工作。

最佳答案

图像单位是图像统一变量的值。虽然 ES 3.1 规范不允许使用 glProgramUniform1i() 为这些变量设置值,但我看不出有什么可以阻止您获取使用 binding=... 布局限定符在 GLSL 代码中设置的值。

这基于规范的第 7.10 节“图像”。在第 112 页上,它说:

The value of an image uniform is an integer specifying the image unit accessed.

在第 113 页的同一部分:

The location of an image variable is queried with GetUniformLocation, just like any uniform variable.

因此,要在程序 prog 中获取变量“MyImage”的图像单元:

GLint loc = glGetUniformLocation(prog, "MyImage");
GLint imgUnit = -1;
glGetUniformiv(prog, loc, &imgUnit);

这为您提供了着色器中图像变量绑定(bind)到的图像单元。如果需要图片名称,可以继续查询:

GLint imgName = -1;
glGetIntegeri_v(GL_IMAGE_BINDING_NAME, imgUnit, &imgName);

关于c++ - 如何在 OpenGLES 中获取图像变量的绑定(bind)点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27409680/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com