gpt4 book ai didi

c++ - OpenGL glDrawBuffer 和 glBindTexture

转载 作者:行者123 更新时间:2023-11-30 02:26:20 26 4
gpt4 key购买 nike

我还是 opengl3 的新手,我正在尝试创建多 channel 渲染。
为此,我创建了 FBO,生成了多个纹理并使用

将它们附加到它上面
    unsigned index_col = 0;
for (index_col = 0; index_col < nbr_textures; ++index_col)
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + index_col, texture_colors[index_col], 0);

效果很好(我努力相信我在这里做得很好!)。

我的理解问题发生在之后,当我尝试在屏幕外渲染第一个纹理,然后在第二个纹理中渲染,然后在屏幕上渲染时。
要渲染到特定纹理,我正在使用:

FBO.bind();
glDrawBuffer(GL_COLOR_ATTACHMENT0);
glBindTexture(GL_TEXTURE_2D, FBO.getColorTextures(0)); //getColorTextures(0) is texture_colors[0]

然后我使用我的着色器绘制,之后我想做的是:

glDrawBuffer(GL_COLOR_ATTACHMENT1);
glBindTexture(GL_TEXTURE_2D, FBO.getColorTextures(1));

毕竟

glBindFramebuffer(GL_FRAMEBUFFER, 0);
RenderToScreen(); // assuming this function render to screen with a quad

我的问题是:glDrawBufferglBindTexture 有什么区别?有必要同时调用吗?纹理不是附加到缓冲区吗? (实际上我无法对其进行测试,因为我正在努力让它发挥作用...)

谢谢!

最佳答案

glBindTexture 将纹理与纹理采样器单元连接起来以供读取。 glDrawBuffer 选择绘图写入的目的地。如果要选择纹理作为渲染目标,请在纹理所附加的颜色附件上使用 glDrawBuffer并确保当前绑定(bind)的纹理采样器单元均未用作着色器输入!创建反馈循环的结果是未定义的。

关于c++ - OpenGL glDrawBuffer 和 glBindTexture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42924362/

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