我正在尝试在我的GLES着色器中获取图像变量的绑定(bind)点。我可以使用该代码对制服或着色器存储块执行此操作:
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,它说:
并在第113页的同一部分中:
因此,要在程序prog
中获取变量“MyImage”的图像单元:
GLint loc = glGetUniformLocation(prog, "MyImage");
GLint imgUnit = -1;
glGetUniformiv(prog, loc, &imgUnit);
这将为您提供绑定(bind)到着色器中的image变量的图像单元。如果需要图像名称,可以继续查询:
GLint imgName = -1;
glGetIntegeri_v(GL_IMAGE_BINDING_NAME, imgUnit, &imgName);
关于c++ - 如何在OpenGLES中获取图像变量的绑定(bind)点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27409680/