取消绑定着色器资源

时间:2015-04-21 12:31:23

标签: directx directx-11

如果你想在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)的支持,这两者之间真的有什么不同吗?

1 个答案:

答案 0 :(得分:2)

在第一种情况下,您将解开一个SRV,从插槽0开始。在第二种情况下,您没有取消绑定任何内容,因为NumViews为零。如果你想在第二种情况下取​​消绑定,你必须使用:

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

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

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

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