2013-10-29 35 views
0

EGL提供了两种方式来创建具有原生支持存储的EGL曲面,eglCreateWindowSurfaceegCreatePixmapSurface。两者都创建与本机图形层交互的EGL表面。 (与pbuffer表面相反,pbuffer表面不与本机图形层相互作用)。什么是EGL pixmaps的好处?

什么是pixmaps对那些窗口有好处? (也就是说为什么EGL区分这两种类型的表面?)我无法理解这种差异。

回答

1

也许这部分从egl specifications帮助:

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

+0

这是朝着正确的方向发展,但我仍然没有看到真正的区别。在我看来,并不是每个窗口表面总是可见的,所以屏幕窗口表面仍然等同于像素表面,因为没有理由。我开始认为这是对传统gl硬件的保留,它可能具有固定地址的屏幕缓冲区(窗口表面),并且还有其他可用的离屏存储器(pixmaps)。 – nmr

+0

也许(不熟悉EGL),您可以使用离线pixmap来渲染并用作纹理。 OpenGL中的许多特殊效果依赖于渲染中间目标,然后使用该图像。 –

2

EGL像素图旨在反映底层窗口系统支持的任何像素图概念。术语来自X11。所述EGL spec说:

EGL定义了多种图面的统称为 EGLSurfaces。这些包括窗口,用于屏幕渲染; pbuffers, 用于离屏渲染;和像素图,用于屏外渲染到可通过本地API访问的缓冲区 中。 EGL窗口和像素映射与 原生窗口系统窗口和像素映射关联。

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

  • 的EGL实现并不需要支持像素图(本机窗口系统可能没有等效的概念)
  • 像素映射一般是单缓冲,而窗口可能是双重或三重缓冲。
  • 像素映射是离屏表面的(虽然离屏幕窗口可能是可能的)

如果底层的窗口系统不支持像素图,有一个为EGL像素图没有实际使用(他们可能不会被曝光由EGL实现)。他们只提供,所以你可以渲染到X11像素图(或类似的东西),如果你需要这样做,出于某种原因。

一个示例可能是:要使用GPU呈现3D对象,然后将其用作X11光标。在这种情况下,您可以创建一个像素图,创建一个EGL像素图可绘制,绘制一些东西,然后使用XCreateCursorFromPixmap将您的像素图转换为光标(这是EGL规范所指的“本地API”类型的一个示例)。比这更有用的例子可能存在。