我有一个纹理,以及它的shaderresourceview,我通过将它用作RenderTarget来渲染场景的原始图像。
就像我之前的数百万人一样,然后我将它用作我下一个着色器的输入,这样我就可以模糊,做HDR,所有这一切。
简单但“对我来说新”的问题是,当我去调用PSSetShaderResources并将纹理放入着色器的纹理/常量缓冲区时,我得到了这个错误:
"Resource being set to PS shader resource slot 0 is still bound on output"
......这很有意义,因为它可能仍然存在。我的问题是如何解除纹理与初始传递的渲染目标的绑定?
我已经在做这个了,我认为它将它设置回DXUT在开始时使用的原始RenderTargetView,但它似乎没有释放纹理:
ID3D11RenderTargetView * renderTargetViewArrayTQ[1] = { DXUTGetD3D11RenderTargetView() };
pd3dImmediateContext->OMSetRenderTargets(1, renderTargetViewArray, nullptr);
答案 0 :(得分:1)
假设您的渲染目标位于插槽0中:
ID3D11RenderTargetView * nullRTV = nullptr; d3dContext-> OMSetRenderTargets(1,& nullRTV,nullptr);
您需要传递长度为1的ID3D11RenderTargetView *数组,其中第一个数组需要为nullptr。
答案 1 :(得分:0)
从像素着色器取消绑定纹理时,这不起作用:
ID3D11ShaderResourceView *const pSRV[1] = { NULL };
pd3dImmediateContext->PSSetShaderResources(0, 0, pSRV);
然而,这可行:
ID3D11ShaderResourceView *const pSRV[1] = { NULL };
pd3dImmediateContext->PSSetShaderResources(0, 1, pSRV);
更简单地说,当将资源设置回null时,你仍然必须告诉它你传入一个指针,尽管是空指针。单独传递null而零计数似乎什么都不做。