在Android中有一组用于创建 surface 的eglCreate*Surface
API,我知道像eglCreatePbufferSurface
这样的API会创建一个可以通过GL调用呈现的后备缓冲区,但是我无法绕过这个,eglCreateWindowSurface(EGLDisplay display, EGLConfig cfg, Object window, ...)
,如果我传递一个Surface
作为窗口,那么系统如何使我在窗口表面上使用OpenGL绘制的内容出现在屏幕上?我知道它不可能,因为它在我的Activity中的布局中甚至没有位置。
我的困惑是,如果我在窗口表面绘制的内容在屏幕上没有自动,为什么它存在?是否与使用eglCreatePbufferSurface
创建的像素缓冲区表面相同?
在doc的第3段中,其中指出:
从那时起,渲染到EGLSurface会导致缓冲区出列,呈现并排队等待消费者使用。 (术语“窗口”表示预期用途,但请记住输出可能不会出现在显示屏上。)
让我更加困惑。
答案 0 :(得分:1)
如果我将
Surface
作为窗口传递,那么系统如何使用我在窗口表面上使用OpenGL绘制的内容显示在屏幕上?
如果您未将有效的操作系统级别本机窗口句柄作为native_window
的{{1}}参数传递,则会引发错误。简而言之,如果您将垃圾邮件传递给API,请不要期望它做任何明智的事情。
答案 1 :(得分:1)
我的困惑是,如果我在窗口表面绘制的内容没有自动出现在屏幕上,为什么会存在呢?是不是与eglCreatePbufferSurface创建的像素缓冲区表面相同?
eglCreateWindowSurface
和eglCreatePbufferSurface
都创建渲染表面,我认为区别在于eglCreateWindowSurface
需要一个屏幕上的本机平台窗口作为参数,这是EGL的主要目的,将带有OpenGL ES的本机平台窗口系统。