仅使用EGLSurface在多个表面上绘图?

时间:2015-05-05 19:36:12

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

是否可以通过仅使用eglCreateWindowSurface返回的处理程序逐个从多个表面上的相同应用程序进行绘制?

我想要实现的是创建两个或更多个表面并将它们传递给将在它们上绘制的客户端,然后,完成后,基本上,我只需要执行swapBuffers。 一个简单的表面处理程序(EGLSurface)就足以让客户端绘制形状等?

我找不到任何例子;每个例子都只是在当前的背景下绘制。

2 个答案:

答案 0 :(得分:3)

我会通过创建一个由纹理支持的openGL帧缓冲来解决这个问题。我曾经做过复杂的绘画。然后我使用纹理id在每个EGLSurface上画一个四边形。

类似的东西:

eglMakeCurrent();

glBindFramebuffer(GL_FRAMEBUFFER, fb);

// do draw here

// unbind
glBindFramebuffer(GL_FRAMEBUFFER, 0);

然后将精美的东西画到帧缓冲区:

for (everyEGLContext)
{
   eglMakeCurrent(display, surface, surface, context);
   drawQuad(texture);
   eqlSwapBuffers(display, surface);
}

然后画到屏幕:

Email

答案 1 :(得分:1)

我从来没有尝试过,但它应该是可能的。在EGL级别,当您使用eglMakeCurrent()调用创建上下文时,上下文与曲面之间的关联已建立:

EGLBoolean eglMakeCurrent( EGLDisplay display,
                           EGLSurface draw,
                           EGLSurface read,
                           EGLContext context);

您传递给此次调用的EGLSurfacereaddraw通常相同)可以来自eglCreateWindowSurface()的返回值。

因此,如果您目前正在绘制surface1,并且想要开始渲染到surface2,则可以使用:

eglMakeCurrent(eglGetCurrentDisplay(), surface2, surface2,
               eglGetCurrentContext());

请注意,每个表面一次只能是一个上下文的当前表面。来自EGL 1.4规范:

  

最多一个上下文可能在给定时间绑定到特定表面