1

EGL 提供了两种方法来创建具有本机后备存储的 EGL 表面, eglCreateWindowSurface以及egCreatePixmapSurface. 两者都创建与本机图形层交互的 EGL 表面。(与不与本机图形层交互的 pbuffer 表面相反。)

什么是像素图对窗口没有好处?(即为什么 EGL 区分这两种类型的表面?)我无法理解差异。

4

2 回答 2

4

EGL 像素图旨在反映底层窗口系统支持的任何类似像素图的概念。该术语来自 X11。EGL 规范说:

EGL 定义了几种类型的绘图表面,统称为 EGLSurfaces。其中包括windows,用于屏幕渲染;pbuffers,用于离屏渲染;和pixmaps,用于将屏幕外渲染到可以通过本机 API 访问的缓冲区中。EGL 窗口和像素图与本地窗口系统窗口和像素图相关联。

像素图和窗口之间的主要区别是:

  • EGL 实现不需要支持像素图(本机窗口系统可能没有等效的概念)
  • 像素图通常是单缓冲的,而窗口可能是双缓冲或三缓冲的。
  • 像素图是屏幕外表面(尽管屏幕外窗口也可能是可能的)

如果底层的窗口系统不支持像素图,那么 EGL 像素图就没有真正的用途(并且它们可能不会被 EGL 实现公开)。仅提供它们以便您可以渲染到 X11 像素图(或类似的东西),以防您出于某种原因需要这样做。

一个示例可能是:您想使用 GPU 渲染 3D 对象,然后将其用作 X11 光标。在这种情况下,您可能会创建一个像素图,创建一个 EGL 像素图可绘制对象,绘制一些东西,然后使用XCreateCursorFromPixmap将您的像素图变成一个光标(这是 EGL 规范所指的那种“原生 API”的示例)。可能存在比这更有用的例子。

于 2014-01-22T12:53:16.530 回答
1

也许egl 规范中的这一部分有帮助:

EGL 还支持其颜色缓冲区存储在本机像素图中的渲染表面。像素图与窗口的不同之处在于它们通常分配在屏幕外(不可见)图形或 CPU 内存中。像素图与 pbuffers 的不同之处在于它们确实具有关联的本机像素图和本机像素图类型,并且可以使用客户端 API 以外的 API 渲染到像素图。

于 2013-12-09T15:42:56.693 回答