c++ - glReadPixels of color附件

标签 c++ opengl framebuffer

我遇到了 glReadPixels 无法读取颜色附件的问题。

我正在尝试做的事情:

读取非默认帧缓冲区的第三种颜色附件(下面的代码)

glFlush();
glFinish();
//binds my fbo with state GL_FRAMEBUFFER
RENDER_MANAGER.DeferredBuffer->bind();
unsigned char data[4];
glPixelStorei(GL_PACK_ALIGNMENT, 1);
unsigned int check = glGetError();
glReadBuffer(GL_COLOR_ATTACHMENT3);
glReadPixels(e->p->x, e->p->y, 1, 1,GL_RGB, GL_UNSIGNED_BYTE, data);

什么有效:

  • 帧缓冲区和所有颜色附件工作
  • 我测试了第三种颜色附件,方法是将它渲染到后台缓冲区并将其显示到屏幕上。
  • 如果我在将 colorattachment 渲染到前端缓冲区后使用 glReadPixels,它会按预期工作

glBindFramebuffer(GL_FRAMEBUFFER, _FBO);

/////create depth texture
glGenTextures(1, &_colorAttacherment[index]);
glBindTexture(GL_TEXTURE_2D, _colorAttacherment[index]);
glTexStorage2D(GL_TEXTURE_2D, 1, internalFormat, width, height);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap);
////bind texture to the fbo

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + index, GL_TEXTURE_2D, _colorAttacherment[index], 0);

glBindFramebuffer(GL_FRAMEBUFFER, GL_NONE);

我的具体问题是让 glReadPixels 读取颜色附件。

最佳答案

可能适用于此的随机想法: 并非所有平台都支持 GL_RGB 与 glReadPixels 一起使用。检查 GL_IMPLEMENTATION_COLOR_READ_FORMAT 是否受支持。

关于c++ - glReadPixels of color附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39907580/

相关文章:

c++ - Qt 编辑自定义数据结构

c++ - 在 GCC 中列出库函数

贝塞尔曲线的 OpenGL 坐标

python - 程序导致 OSX (Snow Leopard 10.6.4) 窗口服务器自发崩溃

opengl - 注入(inject)帧缓冲区

opengl - 有没有更好/更有效的方法来在 Linux 中捕获复合 X 窗口?

c++ - 调用函数时出现段错误

c++ - 将 char 数组分配给另一个 char 数组

c++ - 将函数作为参数传递给方法

linux - 无法在嵌入式 Linux 中使用 libjpeg 使用 RGB888 在 LCD(黑色)上显示 JPEG