2015-04-21 180 views
3

如果你想取消綁定在DirectX11的着色器的資源,所有的代碼,我發現它的東西沿着這些路線:解除綁定着色器資源

ID3D10ShaderResourceView* nullSRV[1] = {nullptr}; 
context->PSSetShaderResources(0, 1, &nullSRV); 

爲什麼不乾脆用這個?

context->PSSetShaderResources(0, 0, nullptr); 

它似乎由文檔(https://msdn.microsoft.com/en-us/library/windows/desktop/ff476473%28v=vs.85%29.aspx)的支持,是真的兩者之間有什麼區別?

+0

而且要清楚你並不是解除所有着色器資源的綁定,只是第一個插槽。 –

回答

1

在第一種情況下,您將從零插槽開始解除綁定一個SRV。在第二種情況下,由於NumViews爲零,因此您不會解除任何綁定。如果你想在第二種情況下解除綁定,你不得不使用:

context->PSSetShaderResources(0, 1, nullptr); 

然而,這將導致運行時崩潰:

D3D11 CORRUPTION: ID3D11DeviceContext::PSSetShaderResources: Third parameter corrupt or unexpectedly NULL. [ MISCELLANEOUS CORRUPTION #15: CORRUPTED_PARAMETER3] 

這就是爲什麼使用第一種形式。