OpenGL DSA and FBO



我升级了我的FBO代码,以使用OpenGL 4.5中的DSA(直接访问状态)功能。

一切都很好,但我仍然需要在绘制之前使用 glBindFramebuffer()。我错过了什么吗?

在吸引我的FBO之前,我正在考虑这个电话。

glNamedFramebufferDrawBuffer(m_FBO, GL_COLOR_ATTACHMENT0);

然后使用这个恢复到默认帧缓冲区。

glDrawBuffer(GL_BACK);

但它不起作用。我是否仍然应该使用 glBindFramebuffer() ?最后,如果是这样,glNamedFramebufferDrawBuffer()有什么用?

我几乎没有找到关于这个的明确话题。

glNamedFramebufferDrawBuffer不会将 frambuffer 绑定到目标。它仅指定命名帧缓冲对象的颜色缓冲区。

请参阅 OpenGL 4.6 核心配置文件规范 - 17.4.1 选择用于写入的缓冲区,第 513 页:

17.4.1 选择要写入的缓冲区

第一个此类操作是控制写入每个片段颜色值的颜色缓冲区。这是通过下面描述的 DrawBufferDrawBuffers命令完成的。 写入片段颜色零的帧缓冲区对象的缓冲区集由命令控制

void DrawBuffer( enum buf );
void NamedFramebufferDrawBuffer( uint framebuffer, enum buf );

对于DrawBuffer,帧缓冲区对象是绑定到DRAW_FRAMEBUFFER绑定的对象。对于NamedFramebufferDrawBuffer,framebuffer为零或帧缓冲区对象的名称。如果帧缓冲为零,则默认绘制帧缓冲会受到影响。

请参阅 OpenGL 4.6 核心配置文件规范 - 9.2 绑定和管理帧缓冲对象,第 297 页:

帧缓冲区对象是通过将GenFramebuffers返回的名称(见下文)绑定到DRAW_FRAMEBUFFER或READ_FRAMEBUFFER来创建的。绑定通过调用

void BindFramebuffer( enum target, uint framebuffer );

,目标设置为所需的帧缓冲目标,帧缓冲设置为帧缓冲对象名称。生成的帧缓冲对象是一个新的状态向量...

相关内容

  • 没有找到相关文章

最新更新