2011-01-24 52 views
3

我使用的代碼從How to make an OpenGL rendering context with transparent background?創建具有透明背景上的窗口。我的問題是幀率非常低 - 即使繪製一個四邊形(由兩個三角形構成),我也有大約20幀/秒。我試圖找出爲什麼和glFlush()大約需要0.047秒。你有什麼想法,爲什麼?同樣的東西在沒有6000 fps透明背景的窗口中渲染(當我刪除60 fps限制時)。它也需要一個核心到100%。我使用Win7在ATI Radeon 4800上以[email protected]測試它。glFlush()發生在窗口很長的時間與透明背景

+0

你有沒有考慮使用``而不是glFlush()`雙緩衝和`SwapBuffers()? – arul 2011-01-24 10:51:53

+0

該技術不適合渲染OpenGL動畫,但它是我知道在Vista之前的Windows上繪製透明OpenGL窗口的唯一方法。這個頁面有一個有趣的例子,你可以嘗試扭轉它找到了如何做:http://coreytabaka.com/programming/cube-demo/ – karlphillip 2011-02-01 17:47:47

回答

3

我想你不能得到良好的性能這樣,在這個例子中鏈接這個有下面的代碼

void draw(HDC pdcDest) 
{ 
    assert(pdcDIB); 
    verify(BitBlt(pdcDest, 0, 0, w, h, pdcDIB, 0, 0, SRCCOPY)); 
} 

BitBlt的是在處理器上執行的功能,而OpenGL函數是由GPU執行。因此,從GPU渲染的數據,爬回主存儲器,並且有效地從GPU到CPU帶寬是比較有限(甚至更多,因爲數據回到那裏去一次BitBlt'ed)。

如果你真的想呈現的內容透明窗口,你可能想看看Direct2D和/或Direct3D的,也許有一些辦法做到這一點沒有數據的性能損失動人。