2011-10-07 111 views
5

我希望能夠使用DirectX渲染到OpenGL渲染窗口。這是因爲我以後的功能只支持DirectX。混合DirectX和OpenGL

我聽說幾年前可以做到這一點,我希望它仍然有可能。

我想可能會涉及將DirectX指向VRAM的正確部分和正確的深度緩衝區。

另外一個教程或簡單的解釋將是非常有用的。

+0

爲什麼你需要輸出到OpenGL?如果DirectX可用,爲什麼不只是堅持使用DX渲染器? – glenatron

+0

主要是因爲我需要Windows OpenGL命令才能在Windows子窗口中正確渲染OpenGL渲染曲面。 – ceorron

+8

「這是因爲我以後的功能只支持Direct X.」那些功能是什麼?我知道很少的D3D功能在OpenGL下不可用。 –

回答

2

混合OpenGL和Direct3D將無法正常工作,並且它從未習慣使用AFAIK。請問,OpenGL不提供哪些Direct3D的功能?

3

至少NVIDIA有NV_DX_interop extension,讓我們直接使用Direct3D 9緩衝區/紋理/表面作爲OpenGL緩衝區/紋理/渲染緩衝區(因此反過來)。但我對此沒有任何經驗,我不知道它是否得到廣泛支持或實際上有什麼好處。

這將是更多interresting你認爲哪些功能只在Direct3D中可用。也許我們可以向你展示如何用OpenGL實現它,因爲Direct3D中沒有許多功能(如果有),而不是OpenGL中。雖然如果你有ATI卡,可用並且實際上正常工作有時可能是兩個獨立的事情。

+0

請注意,即使該互操作也不允許您將這兩個API渲染到_same_窗口。如果你有不同的窗口或離屏渲染上下文,那麼你可以使用它。但不是相同的表面。 –

+0

您可以通過OpenGL在一個屏幕外表面進行渲染,並將DirectX渲染到另一個屏幕表面,然後複製併合並它們的紋理。 –

0

你可以。至少對於nVIDIA來說!檢查NV_DX_interop。但是,OpenGL支持每個DirectX功能,因爲OpenGL比DirectX更具RAW/Low級別!它的實施方式可能會有所不同。再說一遍,告訴我們你想要的DirectX的特性,我可以告訴你如何重新實現它。

0

OpenGL和Direct3D之間的區別,我正在研究自己的一個具體示例是,在DirectShow(Direct3D的子集)中,有用於我的Panasonic DVCPRO-HD相機的視頻捕獲過濾器。因此,通過該API收集的實時流,我想用作OpenGL庫的輸入。一個這樣的庫是基於OpenGL的OpenFrameWorks。我期待看到我可以如何有效地進行傳輸。現有的OpenFrameWorks Video API使用稍舊的和不贊成使用的DirectShow API,並使用暴力策略將DirectShow中的像素轉移到OpenFrameWorks。