0

我刚刚第一次实现了延迟渲染/着色,我很惊讶地看到前向渲染和延迟渲染之间的巨大性能差距。

当我使用前向渲染运行我的应用程序时,我在发布模式下运行时获得了相当不错的帧速率

前向渲染 在此处输入图像描述

然而,当我使用延迟渲染运行它时,它给了我一个相当令人惊讶的输出

延迟渲染 在此处输入图像描述

我很清楚延迟渲染并不是你为应用程序涂上一层以使其“更快”运行的东西。我认为它是一种性能优化技术,可以通过多种方式进行优化,并且我知道该技术比前向渲染具有更大的内存占用。

然而...

我目前在场景中有一个点光源和一百个通过硬件实例创建的立方体。光在 Z 轴上来回移动,将光投射到立方体上。

问题是移动时光线非常滞后。它是如此滞后,以至于应用程序没有注册键盘输入。老实说,我并没有为此做好准备,我认为我在实施过程中做了一些非常糟糕的事情。

到目前为止,我已经将 gbuffers 上的纹理格式从 jsut 更改为 jsutDXGI_FORMAT_R32G32B32A32_FLOATDXGI_FORMAT_R16G16B16A16_FLOAT查看它是否有任何视觉影响,但没有。

有什么建议么?谢谢!

旁注
我正在使用Visual Studio 图形诊断程序来调试我的 DirectX 应用程序

4

1 回答 1

1

解决了!

我启用了DirectX 调试层,我收到了大量 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();

只是为了重置将所有输入/输出资源插槽设置为的设备上下文,NULLMSDN上所述

于 2015-07-29T20:01:36.783 回答