2015-09-27 33 views
1

這可能是一個愚蠢的問題,但我無法找到如何處理這個問題的好例子,或者如果它甚至可能的話。我剛剛完成了一個項目,我用gdi將一些東西放在DIB緩衝區中,然後將它們交換到屏幕上,基本上用我自己的交換鏈和用opengl進行繪圖。是否可以在directx dc/buffer上使用opengl進行繪製?

於是我想,我能做到使用DirectX11的同樣的事情?但我似乎無法找到我需要改變的DIB /緩衝區。

我是否正確地考慮過這個問題?有關如何處理這個問題的任何想法?

回答

1

是的,你可以。 Nvidia公開特定於供應商的擴展名爲NV_DX_interopNV_DX_Interop2。藉助這些擴展,您可以直接訪問DirectX表面(駐留在GPU上)並從OpenGL上下文對其進行渲染。這個操作應該有最小的(僅驅動程序)開銷,並且CPU幾乎不會涉及。

注意,雖然這是一個供應商特定的擴展,Intel GPU都支持它。

但是,不要只是爲了好玩做,或者如果你控制所有應用程序的源代碼。這種互操作場景適用於您有兩個遺留/複雜代碼庫的情況,互操作性比將所有邏輯移植到其他API更便宜/更好。

+0

所以它不是很可行,謝謝 – Charlie

-1

是的,你可以做到這一點,OpenGL和D3D同時支持可寫紋理,並鎖定他們得到的像素數據。

簡單地呈現在OpenGL場景到紋理,將其鎖定,讀像素數據,並將其直接傳遞到D3D鎖定紋理象素數據,解開它,然後做你想做的具有質感。當你在一次「操作」中多次拖延GPU並迫使它與CPU(通過數據的人)和總線(用於存儲器訪問)同步時,性能將會非常糟糕。另外,根本沒有任何好處。但是,如果你真的想嘗試,你可以做到。

+0

所以它是一個壞主意呢?我希望直接繪製直接交換鏈接緩衝區,有點使用DX只是blt的東西到屏幕上 – Charlie

+0

非常糟糕的主意,是的。 – Blindy

+0

所以當我嘗試做圖形時,我應該關注於opengl,還是directx更強大?你有什麼想法?我傾向於opengl,但即時通訊擔心生病失去了對窗口本身的控制 – Charlie

相關問題