DirectX:如何取消绑定 ShaderResourceView 以用于下一个渲染过程?
DirectX: How to unbind ShaderResourceView to use for next render pass?
我目前正在进行一个项目,我正在尝试使用 SRV 作为纹理来绘制我的场景。之前的渲染(使用多个 g 缓冲区的延迟渲染)工作正常,但是一旦我想渲染下一个通道(使用新的渲染目标),当我尝试设置着色器资源时出现错误(x 意味着我尝试将其绑定到不同的位置):
gDeviceContext->PSSetShaderResources(x, 1, &AASRV);
"Resource being set to PS shader resource slot x is still bound on output"
因此它只是将此着色器资源设置为 NULL。我尝试了下面的代码来尝试释放资源但没有运气。之前的shader资源不报错
ID3D11ShaderResourceView* clr[6];
for (int k = 0; k < 6; k++) {
clr[k] = nullptr;
}
gDeviceContext->PSSetShaderResources(0, 6, clr);
您不能同时将相同的资源绑定为渲染目标视图和着色器资源视图。这意味着有时会遇到您尝试交换它们并出现错误的情况。在尝试将其设置为 SRV 之前尝试更改渲染目标视图:
ID3D11RenderTargetView* nullViews [] = { nullptr };
m_d3dContext->OMSetRenderTargets(_countof(nullViews), nullViews, nullptr);
我目前正在进行一个项目,我正在尝试使用 SRV 作为纹理来绘制我的场景。之前的渲染(使用多个 g 缓冲区的延迟渲染)工作正常,但是一旦我想渲染下一个通道(使用新的渲染目标),当我尝试设置着色器资源时出现错误(x 意味着我尝试将其绑定到不同的位置):
gDeviceContext->PSSetShaderResources(x, 1, &AASRV);
"Resource being set to PS shader resource slot x is still bound on output"
因此它只是将此着色器资源设置为 NULL。我尝试了下面的代码来尝试释放资源但没有运气。之前的shader资源不报错
ID3D11ShaderResourceView* clr[6];
for (int k = 0; k < 6; k++) {
clr[k] = nullptr;
}
gDeviceContext->PSSetShaderResources(0, 6, clr);
您不能同时将相同的资源绑定为渲染目标视图和着色器资源视图。这意味着有时会遇到您尝试交换它们并出现错误的情况。在尝试将其设置为 SRV 之前尝试更改渲染目标视图:
ID3D11RenderTargetView* nullViews [] = { nullptr };
m_d3dContext->OMSetRenderTargets(_countof(nullViews), nullViews, nullptr);