了解eglCreateWindowSurface()

时间:2017-06-20 13:12:28

标签: android opengl-es

在Android中有一组用于创建 surface eglCreate*Surface API,我知道像eglCreatePbufferSurface这样的API会创建一个可以通过GL调用呈现的后备缓冲区,但是我无法绕过这个,eglCreateWindowSurface(EGLDisplay display, EGLConfig cfg, Object window, ...),如果我传递一个Surface作为窗口,那么系统如何使我在窗口表面上使用OpenGL绘制的内容出现在屏幕上?我知道它不可能,因为它在我的Activity中的布局中甚至没有位置。

我的困惑是,如果我在窗口表面绘制的内容在屏幕上没有自动,为什么它存在?是否与使用eglCreatePbufferSurface创建的像素缓冲区表面相同?

doc的第3段中,其中指出:

  

从那时起,渲染到EGLSurface会导致缓冲区出列,呈现并排队等待消费者使用。 (术语“窗口”表示预期用途,但请记住输出可能不会出现在显示屏上。)

让我更加困惑。

2 个答案:

答案 0 :(得分:1)

  

如果我将Surface作为窗口传递,那么系统如何使用我在窗口表面上使用OpenGL绘制的内容显示在屏幕上?

如果您未将有效的操作系统级别本机窗口句柄作为native_window的{​​{1}}参数传递,则会引发错误。简而言之,如果您将垃圾邮件传递给API,请不要期望它做任何明智的事情。

答案 1 :(得分:1)

我的困惑是,如果我在窗口表面绘制的内容没有自动出现在屏幕上,为什么会存在呢?是不是与eglCreatePbufferSurface创建的像素缓冲区表面相同?

eglCreateWindowSurfaceeglCreatePbufferSurface都创建渲染表面,我认为区别在于eglCreateWindowSurface需要一个屏幕上的本机平台窗口作为参数,这是EGL的主要目的,将带有OpenGL ES的本机平台窗口系统。