我正在开发一个项目,我正在尝试使用SRV作为纹理绘制我的场景。上一个渲染(使用多个g-buffers的延迟渲染)工作正常,但是一旦我想渲染下一个传递(使用新的渲染目标),当我尝试设置着色器资源时,我得到一个错误(x表示我我试图把它绑在不同的地方):
gDeviceContext->PSSetShaderResources(x, 1, &AASRV);
"Resource being set to PS shader resource slot x is still bound on output"
因此它只是将此着色器资源设置为NULL。我已尝试下面的代码尝试释放资源,但没有运气。在此之前的着色器资源不会出错。
ID3D11ShaderResourceView* clr[6];
for (int k = 0; k < 6; k++) {
clr[k] = nullptr;
}
gDeviceContext->PSSetShaderResources(0, 6, clr);
答案 0 :(得分:1)
您不能同时拥有与渲染目标视图和着色器资源视图相同的资源。这意味着有时会遇到这些情况,你试图交换它们并获得错误。尝试更改渲染目标视图,然后尝试将其设置为SRV:
ID3D11RenderTargetView* nullViews [] = { nullptr };
m_d3dContext->OMSetRenderTargets(_countof(nullViews), nullViews, nullptr);