gpt4 book ai didi

c++ - OpenGL 如何知道将哪个图像单元附加到制服上?

转载 作者:行者123 更新时间:2023-11-27 23:46:12 25 4
gpt4 key购买 nike

当将纹理加载到纹理单元时,我通常必须找到纹理单元的位置并将单元加载到 unform,其中看起来有点像这样:

glActiveTexture(GL_TEXTURE0 + texture_unit);
glBindTexture(target, textureID);
//Get the uniform location in the program and attach the texture unit
GLuint location = program->get_uniform_location(uniform);
glUniform1i(location,texture_unit);

但是我有一个使用 image3D 的程序,我调用的将纹理绑定(bind)到图像的唯一行是:

glBindImageTexture(image_unit, textureID, 0, GL_TRUE, 0, GL_READ_WRITE, GL_RGBA8);

然后在着色器中我将其采样为:

uniform layout(rgba8) image3D image;

vec3 c = vec3(imageLoad(image, ivec3(v_uv,0)));

无论我做了什么更改,这都会输出预期值,因此它似乎工作正常。这引出了我的问题,OpenGL 如何能够确定统一的 uniform layout(rgba8) image3D image; 将通过以下方式附加到图像单元:

glBindImageTexture(image_unit, textureID, 0, GL_TRUE, 0, GL_READ_WRITE, GL_RGBA8);

如果我有多张图片会怎样?

最佳答案

在您的着色器中分配给 image 的图像单位是 0,因为这是您未提供其值的任何 uniform 的默认值。而你没有。在您的情况下, 0 可能是您的 image_unit 变量的值。所以一切顺利。

最好通过 assigning a binding to the image variable 正确地执行此操作.如果您使用的是现代 OpenGL,您可以 put this in the shader with the binding layout qualifier .否则,您必须完全按照您对纹理所做的操作(顺便说一句,您可以使用 binding 限定符在着色器中分配):更改制服的值glUniform1i.

关于c++ - OpenGL 如何知道将哪个图像单元附加到制服上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50420896/

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