EGL 提供了两种方法来创建具有本机后备存储的 EGL 表面, eglCreateWindowSurface
以及egCreatePixmapSurface
. 两者都创建与本机图形层交互的 EGL 表面。(与不与本机图形层交互的 pbuffer 表面相反。)
什么是像素图对窗口没有好处?(即为什么 EGL 区分这两种类型的表面?)我无法理解差异。
EGL 提供了两种方法来创建具有本机后备存储的 EGL 表面, eglCreateWindowSurface
以及egCreatePixmapSurface
. 两者都创建与本机图形层交互的 EGL 表面。(与不与本机图形层交互的 pbuffer 表面相反。)
什么是像素图对窗口没有好处?(即为什么 EGL 区分这两种类型的表面?)我无法理解差异。
EGL 像素图旨在反映底层窗口系统支持的任何类似像素图的概念。该术语来自 X11。EGL 规范说:
EGL 定义了几种类型的绘图表面,统称为 EGLSurfaces。其中包括windows,用于屏幕渲染;pbuffers,用于离屏渲染;和pixmaps,用于将屏幕外渲染到可以通过本机 API 访问的缓冲区中。EGL 窗口和像素图与本地窗口系统窗口和像素图相关联。
像素图和窗口之间的主要区别是:
如果底层的窗口系统不支持像素图,那么 EGL 像素图就没有真正的用途(并且它们可能不会被 EGL 实现公开)。仅提供它们以便您可以渲染到 X11 像素图(或类似的东西),以防您出于某种原因需要这样做。
一个示例可能是:您想使用 GPU 渲染 3D 对象,然后将其用作 X11 光标。在这种情况下,您可能会创建一个像素图,创建一个 EGL 像素图可绘制对象,绘制一些东西,然后使用XCreateCursorFromPixmap
将您的像素图变成一个光标(这是 EGL 规范所指的那种“原生 API”的示例)。可能存在比这更有用的例子。
也许egl 规范中的这一部分有帮助:
EGL 还支持其颜色缓冲区存储在本机像素图中的渲染表面。像素图与窗口的不同之处在于它们通常分配在屏幕外(不可见)图形或 CPU 内存中。像素图与 pbuffers 的不同之处在于它们确实具有关联的本机像素图和本机像素图类型,并且可以使用客户端 API 以外的 API 渲染到像素图。