2015-04-21 179 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] 

这就是为什么使用第一种形式。