DirectX:如何取消绑定ShaderResourceView以用于下一个渲染过程?

时间:2018-02-25 18:29:45

标签: directx

我正在开发一个项目,我正在尝试使用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);    

1 个答案:

答案 0 :(得分:1)

您不能同时拥有与渲染目标视图和着色器资源视图相同的资源。这意味着有时会遇到这些情况,你试图交换它们并获得错误。尝试更改渲染目标视图,然后尝试将其设置为SRV:

ID3D11RenderTargetView* nullViews [] = { nullptr };
m_d3dContext->OMSetRenderTargets(_countof(nullViews), nullViews, nullptr);