如何在 OpenGLES 中获取图像变量的绑定点
How to get a binding point of an image variable in OpenGLES
我正在尝试在我的 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页,它说:
图像制服的值是一个整数,用于指定访问的图像单位。
在第 113 页的同一部分中:
图像变量的位置是使用 GetUniformLocation 查询的,就像任何统一变量一样。
因此,要在程序 prog
中获取变量"MyImage"的图像单元:
GLint loc = glGetUniformLocation(prog, "MyImage");
GLint imgUnit = -1;
glGetUniformiv(prog, loc, &imgUnit);
这为您提供了着色器中的图像变量绑定到的图像单元。如果需要映像名称,可以继续查询:
GLint imgName = -1;
glGetIntegeri_v(GL_IMAGE_BINDING_NAME, imgUnit, &imgName);
相关文章:
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 在使用GPU支持编译Tensorflow时,会遇到CUDA_TOOLKIT_PATH未绑定变量
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- C++通过绑定到引用成员而缩短临时变量寿命?
- 获取具有静态局部变量的绑定/推断捕获 lambda 的函数指针
- 成员变量的结构化绑定
- 与类而非对象绑定的可变变量
- 完美转发使用结构化绑定声明的变量
- 为什么静态常量字符 * const 变量在为左值时可绑定到右值引用参数
- Qt Sql 无法将变量绑定到 QSqlQuery prepare 语句
- 如何将所选行的第一列值绑定到变量并在 QT 的 SQL 命令中使用它?
- boost ::绑定发送变量的回调args到回调函数
- 如何在精灵上绑定变量
- 在 NS-2 中绑定变量时出错
- 模板变量的绑定时间
- 使函数内联是否会影响绑定到其参数的临时变量的生存期
- std::绑定到本地变量作为一个值
- 将c++方法和变量绑定到表中
- 将临时变量绑定到非const引用编译
- 使用Lua C API将现有的C变量绑定到Lua