【问题标题】:glReadPixels of color AttachmentglReadPixels 的颜色附件
【发布时间】:2016-10-07 00:24:37
【问题描述】:

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

我想做什么:

读取非默认帧缓冲区的第 3 色附件(代码如下)

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);

什么有效:

  • 帧缓冲和所有颜色附件都可以工作
  • 我测试了第 3 种颜色附件,将其渲染到后台缓冲区并将其显示到屏幕上。
  • 如果我在将 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 读取颜色附件。

【问题讨论】:

  • 您是否遇到任何 OpenGL 错误? “如果我在将 colorattachment 渲染到前端缓冲区后使用 glReadPixels,它会按预期工作”您是从附件还是前端缓冲区读取?
  • 我想从附件中读取,但它不会。我可以将附件渲染到前端缓冲区,然后读取前端缓冲区,但这是有问题的。我已经检查过了,没有 openGL 错误。

标签: c++ opengl framebuffer


【解决方案1】:

一个可能适用于这里的随机想法: 并非所有平台都支持 GL_RGB 与 glReadPixels 一起使用。如果支持,请检查 GL_IMPLEMENTATION_COLOR_READ_FORMAT。

【讨论】:

  • 我同意,这是一个真正的可能性。请提供一些参考资料,以帮助您更好地回答。参考有关此选项的文档或特定平台示例可以清楚地说明这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多