我正在尝试直接使用3d 11“当前”函数钩子并将当前的后备缓冲区和当前的z-buffer(深度模板)作为纹理传递给我的像素着色器。
我在我的钩子“现在”功能中使用以下代码:
ID3D11RenderTargetView* pRT = NULL;
ID3D11DepthStencilView* pDS = NULL;
pContext->OMGetRenderTargets(1, &pRT, &pDS);
if (pRT != NULL)
{
ID3D11Texture2D* pBackBuffer = NULL;
pSwapChain->GetBuffer(0, __uuidof(*pBackBuffer), (LPVOID*)&pBackBuffer);
D3D11_TEXTURE2D_DESC bbDesc;
pBackBuffer->GetDesc(&bbDesc);
ID3D11ShaderResourceView* g_refRes = NULL;
D3D11_SHADER_RESOURCE_VIEW_DESC shaderResourceViewDesc;
shaderResourceViewDesc.Format = bbDesc.Format;
shaderResourceViewDesc.ViewDimension = D3D_SRV_DIMENSION_UNKNOWN;
shaderResourceViewDesc.Texture2D.MostDetailedMip = 0;
shaderResourceViewDesc.Texture2D.MipLevels = bbDesc.MipLevels;
hr = d3d11Device->CreateShaderResourceView(pBackBuffer, &g_shaderResourceViewDesc, &g_refRes);
d3d11DevCon->PSSetShaderResources(0, 1, &g_refRes);
}
但是当我调用CreateShaderResourceView()时,我得到了E_INVALID_ARG。
任何人都可以帮我解决如何通过当前的backbuffer& z-buffer作为像素着色器的纹理?
非常感谢。