使用OpenGL ES(EGL)时,eglCreatePbufferSurface和eglCreatePixmapSurface有什么区别?

4

我遇到了一个问题,需要用软件渲染(只有CPU,没有GPU)来进行OpenGL ES2的一些屏幕外工作。问题是我能否在没有GPU的情况下使用pbuffer?此外,如何在绘制完某些内容后直接保存为png文件。请帮助我并给我一个示例。


如果可能的话,请给我一个C++演示。 - leon_ALiang
那么它们之间有什么区别? - peerless2012
1个回答

1
首先,使用EGL创建一个离屏缓冲区:
eglCreatePbufferSurface(display, config, PBufAttribs); 

然后读取缓冲区:

   GLint size;
   size = esContext->width * esContext->height * 4;
   GLubyte *data = (GLubyte*)malloc(size);
   glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
   glReadPixels(0,0,esContext->width,esContext->height,GL_RGB,GL_UNSIGNED_BYTE,data);

将最后保存到像素缓冲区的内容保存为bmp文件。 (提醒:在24位bmp图像中,顺序是BGR而不是RGB;因此需要将图像数据从BGR切换到RGB。)


谢谢,我尝试了你的方法,但是不知道为什么读回来的场景总是黑色的? - Bill Yan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接