E_INVALIDARG One or more arguments are invalid.
這個報錯是最常見的報錯了,一般是調用D3D的函數時的參數設置不對
,或者參數設置無效
,或者是當前系統環境不支持你所設置的參數
,使用Visual studio進行學習開發的話,多注意Output窗口,一般會在報錯提示的前後有更詳細的提示
Invalid resource barrier type. [ RESOURCE_MANIPULATION ERROR #519: RESOURCE_BARRIER_INVALID_TYPE]
這個報錯提示還是很清楚的,我出錯的原因是
D3D12_RESOURCE_BARRIER resourceBarrier;
resourceBarrier.Transition.pResource = mRenderTargets[mFrameIndex].Get();
resourceBarrier.Transition.StateBefore = D3D12_RESOURCE_STATES::D3D12_RESOURCE_STATE_PRESENT;
resourceBarrier.Transition.StateAfter = D3D12_RESOURCE_STATES::D3D12_RESOURCE_STATE_RENDER_TARGET;
resourceBarrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
resourceBarrier.Flags = D3D12_RESOURCE_BARRIER_FLAGS::D3D12_RESOURCE_BARRIER_FLAG_NONE;
//這一句沒有寫的話就會報這個錯誤,加上就好了,當然,這個Type可以選擇合法的其他Type
resourceBarrier.Type = D3D12_RESOURCE_BARRIER_TYPE::D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
mCommandList->ResourceBarrier(1, &resourceBarrier);
編譯報錯: Severity Code Description Project File Line Suppression State Error X3501 ‘main’: entrypoint not found D3D12Guide E:\D3D12Guide\D3D12Guide\FXC 1
這個報錯是因爲寫的shader文件沒有main函數,有幾種做法:
- 若你使用的是
D3DCompileFromFile
編譯,首先檢查你傳遞的路徑對不對 - 若你的shader文件中可以添加main函數,加上就好了
- 或你使用的是
D3DCompileFromFile
進行shader編譯的話有下面兩種做法可以選擇在build的時候不編譯該shader文件
, 在Visual studio的 solution Explorer中找到你的shader文件,右鍵,
將屬性中的配置改爲圖中所示即可告訴Visual studio你是用的是自己的編譯器(也就是在運行時編譯)
,還是在shader文件上鼠標右鍵
改爲如圖所示即可
部分內容參考自stackoverflow