我正在尝试在我的GLES着色器中获取图像变量的绑定点.我可以使用该代码对制服或着色器存储块执行此操作:
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将其绑定到图像插槽.不幸的是,在OpenGLES中,glProgramUniform1i仅可用于采样器制服,不适用于图像制服.我需要此绑定点的原因是因为我正在执行自动资源绑定.我的资源可以与统一变量名关联.我希望将它们自动分配到正确的图像插槽.到目前为止,对于所有资源,除了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);
这为您提供了绑定到着色器中的image变量的图像单元.如果需要图像名称,则可以继续查询:
GLint imgName = -1;
glGetIntegeri_v(GL_IMAGE_BINDING_NAME, imgUnit, &imgName);
标签:c,opengl-es,opengl-es-3-0 来源: https://codeday.me/bug/20191011/1896357.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。