【问题标题】:Difference from eglCreatePbufferSurface and eglCreatePixmapSurface with OpenGL ES(EGL)OpenGL ES(EGL) 与 eglCreatePbufferSurface 和 eglCreatePixmapSurface 的区别
【发布时间】:2012-10-30 15:11:06
【问题描述】:

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

【问题讨论】:

  • 如果可以的话,请给我一个c++ demo。
  • 那么它们有什么区别呢?

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


【解决方案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。)

【讨论】:

  • 谢谢你,我试过你的方法,但是我读回的场景由于某种原因总是黑的?
猜你喜欢
  • 2011-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
相关资源
最近更新 更多