解除绑定着色器资源
Unbinding shader resources
如果您想取消绑定 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),请问两者真的有区别吗?
在第一种情况下,您要解除绑定一个 SRV,从插槽 0 开始。在第二种情况下,您没有解除任何绑定,因为 NumViews
为零。如果你想在第二种情况下解除绑定,你必须使用:
context->PSSetShaderResources(0, 1, nullptr);
但是,这会导致运行时崩溃:
D3D11 CORRUPTION: ID3D11DeviceContext::PSSetShaderResources: Third parameter corrupt or unexpectedly NULL. [ MISCELLANEOUS CORRUPTION #15: CORRUPTED_PARAMETER3]
这就是使用第一种形式的原因。
如果您想取消绑定 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),请问两者真的有区别吗?
在第一种情况下,您要解除绑定一个 SRV,从插槽 0 开始。在第二种情况下,您没有解除任何绑定,因为 NumViews
为零。如果你想在第二种情况下解除绑定,你必须使用:
context->PSSetShaderResources(0, 1, nullptr);
但是,这会导致运行时崩溃:
D3D11 CORRUPTION: ID3D11DeviceContext::PSSetShaderResources: Third parameter corrupt or unexpectedly NULL. [ MISCELLANEOUS CORRUPTION #15: CORRUPTED_PARAMETER3]
这就是使用第一种形式的原因。