我在QT应用程序中使用OpenGL。在某个时候,我正在渲染到QGLPixelBuffer。我需要获取图像的深度缓冲区,这是我通常使用glReadPixels(...,GL_DEPTH_COMPONENT,...)完成的操作;我尝试将QGLPixelBuffer设置为当前值,然后使用glReadPixels(),但得到的只是一张白色图像。

这是我的代码

bufferCanvas->makeCurrent();
[ ...render... ]
QImage snapshot(QSize(_lastWidth, _lastHeight), QImage::Format_Indexed8);
glReadPixels(0, 0, _lastWidth, _lastHeight, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, snapshot.bits());
snapshot.save("depth.bmp");


显然有什么问题吗?

最佳答案

好吧,不能保证存储在QImage中的基础像素数据(并通过其QImage :: bits()函数获得)与OpenGL的glReadPixels()函数所写的兼容。

由于您正在使用QGLPixelBuffer,所以QGLPixelBuffer::toImage()怎么了?

10-07 15:22