2009-01-05 256 views
2

我正在嘗試在Windows中混合使用OpenGL呈現和GDI。以前我一直在渲染我的OpenGL內容到一個framebuffer對象中,提取它,然後將它傳輸到Windows GDI圖形上下文中,然後在頂部繪製我的GDI東西。這實在是削弱了幀率。在Windows上混合使用OpenGL和GDI

我想做與我現在所做的相反的事情,所以我的OpenGL渲染直接完成到窗口,然後我將GDI東西渲染到上傳到紋理的位圖,然後使用四邊形覆蓋。 GDI的東西並沒有改變太多,所以我不需要重新繪製每一幀,我可以緩存紋理。

我幾乎可以得到它的工作,問題是,我似乎無法從GDI的位圖得到正確的阿爾法值,因此文本和線條得到可怕的鋸齒。

有沒有人有任何有用的資源如何做到這一點?是否有可能讓GDI或GDI +以我需要的方式寫入Alpha通道?

+0

我忘了,GDI(+)是否支持32位顏色? – Brian 2009-01-05 18:44:51

+0

我相信是的。我正在爲GDI提供一個BGRA位圖來渲染。問題是,alpha只能被寫爲0或者255。 – Matt 2009-01-05 19:03:59

回答

2

我認爲如果您只是使用原始OpenGL渲染而不是GDI,會更容易。只需創建一些包裝函數,然後調用它們而不是GDI。

2

是真的有必要嗎?你應該能夠使用GDI函數來繪製與OpenGL相同的設備上下文。

0

如何使用模板印刷。在模板緩衝區中複製紋理。使用GL_NOTEQUAL作爲測試函數,其參考值等於紋理的背景值。先渲染OpenGL的東西,然後啓用模板,然後渲染你的紋理矩形。

您不指定這是2D還是3D問題。在3D世界裏,一切都幾乎在同一個平面上,Jaggies可能是一個深度問題。如果您在3D中工作,請確保紋理矩形位於其他所有位置之前或修改z緩衝區。