我第一次实施了延迟渲染/着色,我惊讶地发现前向渲染和延迟渲染之间存在很大的性能差距。
当我使用正向渲染运行我的应用程序时,在释放模式下运行时,我获得了相当不错的帧速率
然而,当我使用延迟渲染运行它时,它给了我一个相当令人惊讶的输出
我很清楚,延迟渲染不是你为应用程序设置的东西,而是更快"。我认为它是一种性能优化技术,可以通过多种方式进行优化,我知道该技术比前向渲染具有更大的内存占用。
...然而
我目前在场景中获得了 ONE 点光源,并且通过硬件实例创建了100个立方体。光线在Z轴上来回移动,在立方体上投射光线。
问题是移动时灯光非常迟钝。它太迟了以至于应用程序没有注册键盘输入。老实说,我没有为此做好准备,我认为我在实施过程中做了一些可怕的事情。
到目前为止,我已将gbuffers的纹理格式从DXGI_FORMAT_R32G32B32A32_FLOAT
更改为DXGI_FORMAT_R16G16B16A16_FLOAT
jsut以查看它是否有任何视觉效果,但事实并非如此。
有什么建议吗?谢谢!
SIDE NOTE
我使用Visual Studio Graphics Diagnostics来调试我的DirectX应用程序
答案 0 :(得分:1)
解决了!
我启用了DirectX debug layer,我收到了大量的D3D11警告
D3D11 WARNING: ID3D11DeviceContext::OMSetRenderTargets: Resource being set to OM RenderTarget slot 1 is still bound on input! [ STATE_SETTING WARNING #9: DEVICE_OMSETRENDERTARGETS_HAZARD]
D3D11 WARNING: ID3D11DeviceContext::OMSetRenderTargets[AndUnorderedAccessViews]: Forcing PS shader resource slot 1 to NULL. [ STATE_SETTING WARNING #7: DEVICE_PSSETSHADERRESOURCES_HAZARD]
D3D11 WARNING: ID3D11DeviceContext::OMSetRenderTargets: Resource being set to OM RenderTarget slot 2 is still bound on input! [ STATE_SETTING WARNING #9: DEVICE_OMSETRENDERTARGETS_HAZARD]
D3D11 WARNING: ID3D11DeviceContext::OMSetRenderTargets[AndUnorderedAccessViews]: Forcing PS shader resource slot 2 to NULL. [ STATE_SETTING WARNING #7: DEVICE_PSSETSHADERRESOURCES_HAZARD]
D3D11 WARNING: ID3D11DeviceContext::OMSetRenderTargets: Resource being set to OM RenderTarget slot 3 is still bound on input! [ STATE_SETTING WARNING #9: DEVICE_OMSETRENDERTARGETS_HAZARD]
D3D11 WARNING: ID3D11DeviceContext::OMSetRenderTargets[AndUnorderedAccessViews]: Forcing PS shader resource slot 3 to NULL. [ STATE_SETTING WARNING #7: DEVICE_PSSETSHADERRESOURCES_HAZARD]
所以在渲染函数结束时,即在
之后mSwapChain->Present( 0, 0 );
我添加了
mDeviceContext->ClearState();
按照MSDN
中的说明,重置设备上下文,将所有输入/输出资源槽设置为NULL