2011-04-15 99 views
4

我正在開發一個項目,以在任何DirectX11遊戲上顯示覆蓋。現在可以在一些DX11遊戲中顯示,但在其他一些遊戲中無法顯示。DirectX11遊戲覆蓋

我使用MS Detour吸引了DX11 API IDXGISwapChain :: Present()。在函數Present()中,我設置了每個管道,調用DrawIndex和ResourceCopy將我的覆蓋貼圖更新到GPU的內存,然後調用原始Present將後臺緩衝區置於前臺緩衝區。它在Unigene和DIRT2等遊戲中運行良好,但對於LostPlanet2和DragonAge2等其他遊戲無效。

做了一些日誌記錄,結合所有DX11功能,我發現了一件有趣的事情 - 那些在調用Present之前不工作的遊戲會調用ResourceCopy和ResourceCopyRegion。

就像我以前說過的,我也在我的Present()中調用了ResourceCopy。這是它不起作用的原因嗎?我該如何解決它?

感謝, 馬歇爾

+0

這些遊戲可能會使用延遲着色或渲染到目標,然後在調用Present時組裝最終場景。我想不出任何簡單的方法來解決這個問題。 – axon 2011-10-21 03:45:16

+0

你有沒有在這個地方?我被困在同樣的問題,任何幫助將不勝感激。 – 2013-08-31 10:00:13

回答

1

我也開發了類似的D3D11代理掛鉤。但是,我從入口點D3D11CreateDevice和D3D11CreateDeviceAndSwapChain開始。然後使用替換類作爲我自己的鉤子。我發現有些情況下Detours實際上無法正確執行繞行: 繞開EntryPoint()的錯誤:6 我通過實際修改Detours 3.0源代碼來正確地蹦跳函數來解決這個問題。

我正在使用64位Windows 7,但爲x86 Detours 3.0編譯。我可以嘗試使用這些二進制文件。很難解釋ResourceCopy除了程序員使用的渲染樣式之外可以影響其他的調用路徑。如果你願意,你可以給我你的項目代碼,我可以幫忙。