EGL提供了两种使用本机后备存储创建EGL表面的方法eglCreateWindowSurface
和egCreatePixmapSurface
。两者都创建与本机图形层交互的EGL表面。 (与pbuffer表面不同,pbuffer表面不与本机图形层交互。)
什么是pixmaps有利于窗户不是? (即EGL为什么要区分两种类型的表面?)我无法理解差异。
答案 0 :(得分:3)
EGL pixmaps旨在反映底层窗口系统支持的任何类似pixmap的概念。术语来自X11。 EGL spec说:
EGL定义了几种类型的绘图表面,统称为 EGLSurfaces。这些包括 windows ,用于屏幕渲染; pBuffers,在, 用于屏幕外渲染;和 pixmaps ,用于屏幕外渲染到缓冲区 可以通过本机API访问。 EGL窗口和pixmaps绑定 本机窗口系统窗口和pixmaps。
pixmaps和windows之间的主要区别是:
如果底层窗口系统不支持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。