GL_DRAW/READ_FRAMEBUFFER vs GL_FRAMEBUFFER?
GL_DRAW/READ_FRAMEBUFFER vs GL_FRAMEBUFFER?
>我注意到现在有GL_DRAW/READ_FRAMEBUFFER扩展。目前我只是使用GL_FRAMEBUFFER和glTextureBarrierNV。但是,我没有找到太多关于读/写扩展的信息,因此有一些问题。
他们引入了什么OpenGL版本?与使用简单的GL_FRAMEBUFFER进行读写相比,它们有什么优势?在哪里可以找到有关此内容的更多信息?
迂腐的注释:GL_DRAW/READ_FRAMEBUFFER
不是在扩展中引入的;它们是OpenGL 3.0的核心功能。是的,从技术上讲,此功能也在ARB_framebuffer_objects中公开,但这是一个核心扩展,它仍然是核心 GL 3.0。
无论如何,如果你想要DRAW/READ
区别的词源,你需要寻找EXT_framebuffer_blit。这就是这些普查员的起源,也是这些普查员存在的原因。他们不仅指定了两个要从/到块传输的 FBO,还为帧缓冲区创建了两个上下文绑定点。glBlitFramebuffer
命令从当前绑定的READ_FRAMEBUFFER
到当前绑定的DRAW_FRAMEBUFFER
。
如果您不使用 blit,那么您实际上不需要DRAW/READ
区别。但是,这并不意味着您不应该使用它。 glReadPixels
从READ_FRAMEBUFFER
中读到.绑定到GL_FRAMEBUFFER
绑定到这两个点,因此代码仍然可以工作。但有时使用可以从中读取的 FBO 绑定不会干扰绘图操作很有用。
如果您指的是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的核心,但也可能适用于早期版本。查看此处以获取更多信息。
- Visual Studio 19-17 库兼容性根据 GL 标志
- glDrawElements GL 错误类型 = 0x824c,严重性 = 0x9146,消息 = GL_INVALID
- 将"Compass"与相机旋转隔离开GL
- 是否有一个版本的glCopyImageSubData在Openg GL中使用混合?
- 计算着色器Open GL ES的多个输入
- Open GL ES 3.1 的计算着色器的最小工作示例
- OpenGL Framebuffer ColorAttachment to Compute Shader
- 致命错误 C1083:无法打开包含文件:"GL/glew.h":没有此类文件或目录
- C++ 致命错误:glad/gl.h:没有这样的文件或目录
- 打开 gl 精灵类不起作用
- Qt 找不到 GL 库
- GCC 相当于 MSVC 中的 /GS、/GL、/Gy、/Oi、/MD
- 失败的 glewInit:缺少 GL 版本
- 如何在Windows中捕获HDR Framebuffer
- 何时在OS X上使用OpenGL vs GL
- 识别安卓中意外的 GL 上下文丢失
- Android Native:CMake 链接错误:未定义对 GL 函数的引用 - 即使包含并链接了 EGL 和 GLESv3
- Glew - 与 GLFW 配对时 gl- 函数符号上出现链接错误
- 如何在单独的视口和默认的framebuffer中使用framebuffer
- 设置 GL 上下文时'framebuffer'的目的是什么?