2015-11-12 86 views
0

我需要編寫應用程序,其中主要內容將被渲染爲OpenGL(類似於遊戲引擎),但是沒有好的基於OpenGL的GUI庫,類似於Qt小部件的功能(但它們是軟件呈現的)。混合OpenGL和軟件渲染GUI

正如我瀏覽的Qt源代碼,所有的繪畫都通過了QPainter完成,甚至還有在OpenGL QPainter的實施,但對於多顯卡後端的suppport Qt中5被放棄了,所以你不能使Qt控件中OpenGL了(我不知道爲什麼)。

問題是,您無法使用軟件和硬件渲染來繪製窗口表面。您可以將窗口與OpenGL上下文關聯或使用軟件渲染。這意味着如果我想用基於OpenGL的內容來處理複雜的GUI應用程序,我需要使用OpenGL繪製所有內容(這很難,因爲我說過,沒有好的GUI庫),或者我可以使用GUI來渲染圖像軟件渲染(例如Qt),並將該圖像加載爲OpenGL紋理(可能性能損失很大)。

有誰知道任何使用軟件渲染GUI作爲紋理加載OpenGL的好應用程序?我需要確保它能夠在沒有大的性能損失的情況下工作,但是無法找到一個很好的例子,即使是像遊戲引擎這樣的應用程序,它也能很好地工作。

+1

你能以其他方式做到嗎?將OpenGL場景渲染爲紋理貼圖,然後將該紋理作爲2D元素放置在GUI中。我認爲這種方法更像Web瀏覽器所做的,將畫布合成到HTML頁面上。 – emackey

+1

emackey:是的,它應該是可能的,但這可能意味着將內存從GPU內存加載到內存,並將其顯示爲圖像,最後將其從內存移回GPU。 – Krab

+0

添加'OpenGL'標籤以獲取更多回復:) – emackey

回答

-1

如果您將「渲染UI渲染到紋理,然後在我的遊戲中繪製紋理四方」路線,並且擔心表演,請儘量避免在每幀中傳輸整個紋理。

如果你仔細想想:

60fps的是沒有必要的UI:30fps的就足夠了,所以更新一次出來兩個人。

大多數情況下,用戶不會在不同的框架之間進行切換,如果切換,只有一小部分會改變。

用戶界面框架經常跟蹤哪些部分的用戶界面是「髒」,需要重新繪製。如果你能掌握這一點,你可以將紋理僅流到需要更新的部分(glTexSubImage2D)。