我注意到现在有GL_DRAW/READ_FRAMEBUFFER扩展。目前我只是简单地使用GL_FRAMEBUFFER和glTextureBarrierNV。然而,我没有发现太多关于读/写扩展的内容,因此我有一些问题。
他们引入了什么OpenGL版本?与简单地使用GL_FRAMEBUFFER进行读写相比,它们有什么优势?我在哪里可以找到关于这方面的更多信息?
发布于 2011-12-18 02:20:27
OpenGL注释:GL_DRAW/READ_FRAMEBUFFER不是在扩展中引入的;它们是核心的OpenGL 3.0功能。是的,从技术上讲,这个功能在ARB_framebuffer_objects中也是公开的,但这是一个core extension,它仍然是核心GL3.0。
在任何情况下,如果你想了解DRAW/READ区别的词源,你需要看看EXT_framebuffer_blit。这就是这些枚举器起源的地方,也是这些枚举器存在的原因。他们为帧缓冲区创建了两个上下文绑定点,而不是仅仅指定两个FBO来blit from/to。从当前绑定的READ_FRAMEBUFFER到当前绑定的DRAW_FRAMEBUFFER的glBlitFramebuffer命令blits。
如果你没有使用blit,那么你就不需要DRAW/READ的区别了。然而,这并不意味着你不应该使用它。glReadPixels从READ_FRAMEBUFFER读取数据。绑定到GL_FRAMEBUFFER会同时绑定到这两个点,因此您的代码仍然可以工作。但有时有一个FBO绑定是有用的,它可以从中读取,而不会干扰绘图操作。
发布于 2011-12-18 02:19:43
如果您指的是GL_READ_FRAMEBUFFER和GL_DRAW_FRAMEBUFFER常量,那么这些常量来自EXT_framebuffer_blit扩展,该扩展后来在OpenGL 3.0中成为核心,并成为小于3版本的特殊ARB_framebuffer_object扩展(当然还有EXT_framebuffer_multisample和原始的EXT_framebuffer_object )。
它们允许您为读取和绘制操作绑定单独的FBO。这对于EXT_framebuffer_blit引入的FBO到FBO复制操作特别有用(它允许您直接将数据从一个FBO复制到另一个FBO),并且对于由EXT_framebuffer_multisample引入(和需要)的多采样FBO的解析,它实际上构建在前面提到的blit扩展之上。将FBO绑定到GL_FRAMEBUFFER时,实际上同时将其绑定到GL_READ_FRAMEBUFFER和GL_DRAW_FRAMEBUFFER。
就像说的那样,所有这些FBO扩展在OpenGL 3.0中都是核心的,但也可能在更早的版本中可用。有关更多信息,请查看here。
https://stackoverflow.com/questions/8546766
复制相似问题