2009-10-21 154 views
3

我知道混合OpenGL和DirectX不推薦,但我試圖在兩個不同的應用程序之間建立一個橋樑,使用單獨的圖形API:我希望有一種技術用於共享數據,特別是紋理。在direct3d和opengl之間共享紋理?

我有一個在Direct3D創建這樣的質地:

d3_device-> CreateTexture(width, height, 
    1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, 
    &texture, NULL); 

有什麼辦法,我可以使用的OpenGL從這個紋理沒有考慮往返通過系統內存?

+1

我看到發生這種情況的唯一方法是如果有人創建了一個OpenGL實現ON directX – Toad 2009-10-21 14:26:48

回答

-2

它這樣想分享在Photoshop圖像和其它圖像瀏覽器。您需要一個內存管理庫來共享這兩個應用程序。

+0

這是不正確的。共享資源是DXGI的一部分,而不是D3D。 – Krumelur 2017-05-03 19:21:50

0

我認爲這是不可能的。因爲兩者都具有不同的紋理模型。

如果沒有directX或openGL,您無法直接訪問紋理內存。如果可能,您應該能夠檢索紋理地址,其間距,寬度和其他(依賴於硬件的)內存佈局信息,並在其他系統中創建一個虛擬紋理,並將檢索到的數據推送到您的剛創建的紋理對象。這是不可能的

顯然,這不會在任何下降的硬件上工作,如果是這樣,它不會很便攜。

0

我不認爲沒有將數據下載到主機內存並將其重新上傳到設備內存中是不可能的。

8

是的。正如之前發佈的(見下文),至少應該存在一個解決方案。 我發現了兩種可能的解決方案:

1)在nvidia卡上,一個新的擴展集成在256個dirvers中。看到http://developer.download.nvidia.com/opengl/specs/WGL_NV_DX_interop.txt

2)DXGI是動力複合在Vista和Windows 7的所有窗口看到msdn.microsoft.com/en-us/library/ee913554.aspx

我還沒有作出與經驗無論是解決方案,但我希望我會找到一些時間來測試其中之一。但對我來說,第一個似乎更容易。


[我認爲應該有可能。在最近的Windows版本(Vista和7)中,可以看到任務欄中任何窗口內容的預覽(無論是GDI,Direct3D還是OpenGL)。 據我所知在以前的Windows版本中不支持OpenGL預覽。因此,至少在新版本中,應該有可能在不同進程之間耦合或共享渲染上下文... 對於其他現代平臺而言,這對於共享渲染上下文系統範圍以產生不同渲染效果也是如此。]

+0

您是否能夠實施這些解決方案(特別是第二個解決方案)? – 2011-05-03 10:38:54

+0

不,我沒有執行第二個由於時間不足... – Goeffrey 2011-12-07 15:36:46