什么是EGL pixmaps有用?

时间:2013-10-29 20:46:52

标签: egl

EGL提供了两种使用本机后备存储创建EGL表面的方法eglCreateWindowSurfaceegCreatePixmapSurface。两者都创建与本机图形层交互的EGL表面。 (与pbuffer表面不同,pbuffer表面不与本机图形层交互。)

什么是pixmaps有利于窗户不是? (即EGL为什么要区分两种类型的表面?)我无法理解差异。

2 个答案:

答案 0 :(得分:3)

EGL pixmaps旨在反映底层窗口系统支持的任何类似pixmap的概念。术语来自X11。 EGL spec说:

  

EGL定义了几种类型的绘图表面,统称为   EGLSurfaces。这些包括 windows ,用于屏幕渲染; pBuffers,在,   用于屏幕外渲染;和 pixmaps ,用于屏幕外渲染到缓冲区   可以通过本机API访问。 EGL窗口和pixmaps绑定   本机窗口系统窗口和pixmaps。

pixmaps和windows之间的主要区别是:

  • EGL实现不需要支持pixmaps(原生窗口系统可能没有相同的概念)
  • Pixmaps通常是单缓冲的,而窗口可能是双缓冲或三缓冲。
  • Pixmaps是屏幕外的表面(虽然也可能是屏幕外窗口)

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

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

答案 1 :(得分:1)

也许这部分来自egl specifications帮助:

  

EGL还支持渲染存储颜色缓冲区的曲面   原生pixmaps。 Pixmaps与Windows不同,因为它们通常是   在屏幕外(不可见)图形或CPU内存中分配。 Pixmaps   与pbuffers的不同之处在于它们具有关联的本机像素图   和原生pixmap类型,它可能会渲染到pixmaps   使用客户端API以外的API。