解除绑定着色器资源

Kai*_*aan 5 directx directx-11

如果要在DirectX11中取消绑定着色器资源,我发现的所有代码都将按照以下方式进行操作:

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

为什么不简单地使用它呢?

context->PSSetShaderResources(0, 0, nullptr);
Run Code Online (Sandbox Code Playgroud)

似乎受文档支持(https://msdn.microsoft.com/zh-cn/library/windows/desktop/ff476473%28v=vs.85%29.aspx),两者之间真的有区别吗?

Mue*_*ito 4

在第一种情况下,您从插槽 0 开始解除绑定一个 SRV。在第二种情况下,您不会解除任何绑定,因为NumViews为零。如果你想在第二种情况下解除绑定,你必须使用:

context->PSSetShaderResources(0, 1, nullptr);
Run Code Online (Sandbox Code Playgroud)

但是,这会导致运行时崩溃:

D3D11 CORRUPTION: ID3D11DeviceContext::PSSetShaderResources: Third parameter corrupt or unexpectedly NULL. [ MISCELLANEOUS CORRUPTION #15: CORRUPTED_PARAMETER3]
Run Code Online (Sandbox Code Playgroud)

这就是使用第一种形式的原因。