OpenGL glDrawBuffer 和 glBindTexture
OpenGL glDrawBuffer and glBindTexture
我还是 opengl3 的新手,我正在尝试创建多通道渲染。
为此,我创建了 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
我的问题是:
glDrawBuffer
和 glBindTexture
有什么区别?有必要同时调用吗?纹理不是附加到缓冲区吗? (实际上我无法测试它,因为我正在努力让它发挥作用...)
谢谢!
glBindTexture
正在将纹理与纹理采样器单元连接起来进行读取。 glDrawBuffer
selects 绘图写入的目的地。如果您想 select 纹理作为渲染目标,请在纹理所附加的颜色附件上使用 glDrawBuffer
; 并确保它当前绑定的 none 个纹理采样器单元用作着色器输入! 创建反馈循环的结果未定义。
glDrawBuffer
选择要写入的颜色缓冲区(在本例中为帧缓冲区对象):
When colors are written to the frame buffer, they are written into the color buffers specified by glDrawBuffer
如果你想绘制到多个颜色缓冲区,你会写
GLuint attachments[2] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 };
glDrawBuffers(2, attachments);
而 glBindTexture
将纹理绑定到纹理单元。
它们有不同的用途 - 请记住,OpenGL 及其当前渲染上下文的行为就像一个状态机。
我还是 opengl3 的新手,我正在尝试创建多通道渲染。
为此,我创建了 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
我的问题是:
glDrawBuffer
和 glBindTexture
有什么区别?有必要同时调用吗?纹理不是附加到缓冲区吗? (实际上我无法测试它,因为我正在努力让它发挥作用...)
谢谢!
glBindTexture
正在将纹理与纹理采样器单元连接起来进行读取。 glDrawBuffer
selects 绘图写入的目的地。如果您想 select 纹理作为渲染目标,请在纹理所附加的颜色附件上使用 glDrawBuffer
; 并确保它当前绑定的 none 个纹理采样器单元用作着色器输入! 创建反馈循环的结果未定义。
glDrawBuffer
选择要写入的颜色缓冲区(在本例中为帧缓冲区对象):
When colors are written to the frame buffer, they are written into the color buffers specified by glDrawBuffer
如果你想绘制到多个颜色缓冲区,你会写
GLuint attachments[2] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 };
glDrawBuffers(2, attachments);
而 glBindTexture
将纹理绑定到纹理单元。
它们有不同的用途 - 请记住,OpenGL 及其当前渲染上下文的行为就像一个状态机。