opengl - 绑定(bind)Framebuffer还是设置ReadBuffer?

标签 opengl framebuffer

我创建了一个帧缓冲区:

glBindFramebuffer(GL.GL_FRAMEBUFFER, &fbo);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rbo);

正在通过

从帧缓冲区读取像素
glBindFramebuffer(GL_FRAMEBUFFER, &fbo);
glReadPixels(0, 0, w, h, GL_RGBA, GL_FLOAT, &data);

相当于

glReadBuffer(GL_COLOR_ATTACHMENT0);
glReadPixels(0, 0, w, h, GL_RGBA, GL_FLOAT, &data);

?

最佳答案

这不是等效的,读取 GL_COLOR_ATTACHMENT0 将从当前绑定(bind)的帧缓冲区中获取数据,这可能与您创建的完全不同。

所以基本上你需要通过调用来保证你有你的帧缓冲区

glBindFramebuffer(GL_FRAMEBUFFER, &fbo);

在使用它的任何操作之前。

GL_COLOR_ATTACHMENT0 只是Frame buffer 对象的一个​​属性,与任何具体的frame buffer 无关。通过使用另一个帧缓冲区绑定(bind)调用它,您将读取它的数据,这不是您想要的。

关于opengl - 绑定(bind)Framebuffer还是设置ReadBuffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34009406/

相关文章:

android - 没有 GL_OES_packed_depth_stencil 的 OpenGL 帧缓冲区 android(在 Nexus 7 2012 上)

c++ - 四元数旋转到纬度/经度

c++ - SDL、OpenGL : Segmentation fault

c++ - OpenGL 程序着色器链接错误

c++ - 在着色器中同时在同一纹理单元中使用不同的纹理类型

opengl-es-2.0 - 如何将图像数据的子矩形上传到 OpenGLES 2 帧缓冲区纹理?

objective-c - Paint 应用程序,使用帧缓冲区在 OpenGL ES 中渲染纹理

iphone - 在 iPhone 上向屏幕外的 FBO 写入然后读取;在模拟器上有效但在设备上无效?

opengl - OpenCV 2.2窗口在OpenGL上引起问题