2013-10-29 48 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」類型的一個示例)。比這更有用的例子可能存在。