2016-08-11 64 views
0

我試圖在DirectX 12上渲染多個模型,只使用一個圖形上下文,但結果非常奇怪,我不知道是什麼原因。 enter image description here從外部渲染sponza模型的結果,右邊的是正確的結果,左邊的有問題。在DirectX 12上渲染多個模型錯誤

enter image description here從內側呈現左側sponza(有問題)的結果。

即使加載的兩個網格是相同的,每個模型都有自己的頂點緩衝區,索引緩衝區和SRV。在創建圖形上下文的過程中,只有一個圖形上下文,並與每個模型的索引和頂點緩衝區一起設置,然後我調用drawIndexed()函數來渲染它。在創建圖形上下文之後,我們每幀執行一次圖形上下文。但是,如果我們爲每個模型創建一個獨立的圖形上下文並在每個幀中執行所有圖形上下文,則渲染效果不錯,但幀速率下降很多。

對於您提供任何有關奇怪結果的原因的提示或提供更好的解決方案會非常有幫助。先進的非常感謝。

+0

什麼是ÿ ou調用圖形上下文? d3d12中沒有這樣的事情,你是在談論命令列表嗎? – galop1n

+0

是的。圖形上下文是DirectX 12樣本的迷你引擎中定義的結構。 –

+0

Direct3D 12增加了許多額外的方法來渲染Direct3D 11,所以在嘗試使用DX12之前,先調試圖形問題非常重要。您需要一次更換一件東西,直到您將問題隔離出來爲止,並且請記住,使用DX12時,您可能需要額外的屏蔽,渲染障礙或其他更改以控制重新使用資源時的情況。您還應該嘗試使用WARP來確保它不是一些與驅動程序相關的問題。 –

回答

-1

首先,我建議你遠離dx12並堅持dx11,除非你已經是dx11專家,並且你是最高1%的應用案例,比如三A遊戲或者非常特殊的高要求控制gpu內存。

沒有太多細節上的問題,在這裏,我只能給你一些基本的建議:

  1. 運行與調試層,並期待在控制檯日誌與D3D12GetDebugInterface(需要安裝可選功能命名圖形工具)來自Nvidia
  2. 使用幀捕獲工具,如VSGD在Visual Studio或nsight並逐步檢查你的框架步
  3. 使用DX11,真的