2011-05-24 37 views
14

我將開羅(http://cairographics.org)與基於OpenGL的3D圖形庫結合使用。
我目前在Windows上使用3D庫,但我希望能得到一個獨立於平臺的答案。 這全部在C++中完成。將開羅表面直接渲染爲OpenGL紋理

我已經得到了直接法的工作就是用cairo_image_surface_create結合glTexImage2D獲得一個OpenGL紋理。

但是,從我已經能夠從文檔中收集的cairo_image_surface_create使用基於CPU的渲染器並將輸出寫入主內存。

我已經理解cairo有一個新的基於OpenGL的渲染器,它直接在GPU上渲染它的輸出,但是我無法找到關於如何使用它的具體細節。
(我發現了一些關於glitz-renderer的細節,但它似乎被棄用和刪除)。

我已經檢查了表面清單:http://www.cairographics.org/manual/cairo-surfaces.html,但我覺得我很想念這個明顯的問題。

我的問題是:如何創建一個直接渲染到OpenGL紋理的cairo表面?
注意:我需要能夠直接使用紋理(無需複製)在屏幕上顯示cairo輸出。

回答

1

浮華渲染器已被實驗cairo-gl後端代替。

你會發現它在一提: http://cairographics.org/OpenGL/

如果它足夠穩定,可用於雖然不能說。

一旦你有一個gl後端工作,你可以渲染成一個幀緩衝對象直接渲染給定的紋理。

+1

我知道浮華渲染已被替換,我在原來的問題中提到過。 但是該頁面似乎沒有列出關於如何實際使用cairo-gl後端的任何說明,我非常具體地詢問如何在不使用** glTexImage2D **的情況下直接渲染到OpenGL紋理。 你有更精確的說明嗎? – Remco 2011-05-26 13:03:41

+0

@Vhab - 抱歉,我不知道如何使用cairo-gl。但沒有它,我相信你會使用glTexImage(或相當於)。使用cairo-gl,您可以綁定幀緩衝區對象以啓用將cairo繪圖調用重定向到紋理。我幾乎沒有更具體,對不起 – rotoglup 2011-05-27 17:36:23

+2

我無法找到關於如何使用cairo-gl的具體信息,這是什麼導致我在stackoverflow上問這個問題。我會很樂意接受任何答案,告訴我如何真正使用cairo-gl,並通過cairo輸出獲得有效的OpenGL紋理。 – Remco 2011-05-27 20:01:04

1

我是用GL_BGRA做的。

int tex_w = cairo_image_surface_get_width(surface); 
int tex_h = cairo_image_surface_get_height(surface); 
unsigned char* data = cairo_image_surface_get_data(surface); 

然後做

glTexImage2D(GL_TEXTURE_2D, 0, 4, tex_w,tex_h, 0,GL_BGRA, GL_UNSIGNED_BYTE, data); 

當您創建紋理。 使用glTexSubImage2D(...)更新圖像內容更改時的紋理。對於速度 設置的過濾器的紋理GL_NEAREST

+5

不幸的是,如果你會閱讀我的問題,那正是我沒有問的。 – Remco 2012-03-09 16:24:37

1

截至2015年,開羅GL SDL2可能是使用開羅GL

https://github.com/cubicool/cairo-gl-sdl2

如果你是像Ubuntu其中開羅的一個OS的最佳方式不是用GL編譯的,你需要編譯你自己的副本並讓cairo-gl-sdl2知道它在哪裏。