c++ - 使用 OpenGL ES(EGL) 与 eglCreatePbufferSurface 和 eglCreatePixmapSurface 的区别

标签 c++ opengl-es opengl-es-2.0 egl

我遇到一个问题,我需要通过软件渲染(只有 CPU,没有 GPU)使用 opengl es2 进行一些屏幕外工作。问题是我可以在没有 GPU 的情况下使用 pbuffer 吗?另外,如何在绘制后直接保存为 png 文件。请帮助并给我一个演示。

最佳答案

首先,使用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。)

关于c++ - 使用 OpenGL ES(EGL) 与 eglCreatePbufferSurface 和 eglCreatePixmapSurface 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12906971/

相关文章:

c++ - 等效于 C++ 中的 Objective-C 的 "valueForKey"方法?

c++ - 是否有实现条件累加的boost或STL函数?

opengl-es-2.0 - 如何在 OpenGL ES 2.0 中使用 2d 纹理渲染 3d 纹理数据?

android - 使用 OpenGL ES 2.0 在 Android 上呈现问题

c++ - GLSL 4.3 纹理问题

opengl-es - YUV图像使用单个纹理还是多个纹理更好

ios - 是否可以将 Metal API 与 OpenGL ES 3.0 同时用于图形计算?

ios - 使用 3D 管道查找附近的三角形?

android - 具有相同纹理的多个对象

c++ - 十六进制加减法