2017-02-24 55 views
0

我的應用程序是一個學校項目,我遇到了一個令人討厭的問題。我正在使用延遲渲染,我試圖從燈光的pov中添加位置作爲新的g緩衝區紋理,並將深度緩衝區紋理添加爲燈光過程中的着色器資源。我以完全相同的方式處理所有的g-buffer紋理。無法在DirectX 11中添加更多Texture2D作爲Pixel Shader資源

我的問題是,這些新的着色器資源無處可在GPU上找到! 我正在使用RenderDoc來調試我的應用程序,在那裏我可以看到所有寫入這些新資源的東西都很好,並且將它們作爲着色器資源綁定的調用看起來也不錯,但我仍然只有4個資源我之前有過光線傳球。

我的代碼是一個絕對混亂,並且它有很多(!)。所以如果你想看到特定的東西能夠幫助我,我可以發佈它。

如果我只是得到一些關於如何去調試這類問題的提示,如果有人知道問題是什麼,那麼我會非常開心。

在此先感謝!

回答

0

有用於調試DirectX應用程序兩個重要的第一步:

  • 確保爲每一個返回你檢查它在運行時HRESULT功能。如果忽略退貨是安全的,則會返回void。在檢查HRESULT時,請勿使用== S_OK,而應使用FAILEDSUCCEEDED宏。 「快速失敗」錯誤的一個不錯選擇是通過ThrowIfFailed使用C++異常處理。

  • 啓用DirectX調試設備,並在調試輸出窗口中查找錯誤,警告和其他消息。有關啓用它的詳細信息,請參閱Anatomy of Direct3D 11 Create DeviceDirect3D SDK Debug Layer Tricks

這可能不是解決你的問題,但真正能幫助避免花費你大量的時間跟蹤了一些愚蠢的錯誤。

如果你是新來的DirectX的發展,看看在DirectX Tool Kit tutorials

爲了調試DirectX 11個的應用程序,在Visual Studio圖形診斷功能在VS 2012或更高版本是一個不錯的選擇。您可能符合使用VS 2013或VS 2015 Community edition的許可證要求,並且它包含所有功能,包括VSGS。見MSDN

+0

感謝您的回覆!正如你所描述的,我已經在使用HRESULT了,但我會檢查一下SDK調試層的東西。有一段時間嘗試了一下,但是看起來好像有很多工作要把它啓動並運行,但在這一點上,我願意盡一切努力。我試過使用視覺工作室圖形調試(我猜這是你的意思),但我不知道我應該如何去從那裏提取一些有用的信息。我會閱讀如何正確使用它!再次感謝。 – Waterbanana