diff --git a/src/rendering/gl/renderer/gl_postprocess.cpp b/src/rendering/gl/renderer/gl_postprocess.cpp index 4e0744fb4..43983b140 100644 --- a/src/rendering/gl/renderer/gl_postprocess.cpp +++ b/src/rendering/gl/renderer/gl_postprocess.cpp @@ -68,18 +68,10 @@ void FGLRenderer::PostProcessScene(int fixedcm, const std::function &aft GLPPRenderState renderstate(mBuffers); - hw_postprocess.exposure.Render(&renderstate, sceneWidth, sceneHeight); - hw_postprocess.customShaders.Run(&renderstate, "beforebloom"); - hw_postprocess.bloom.RenderBloom(&renderstate, sceneWidth, sceneHeight, fixedcm); - + hw_postprocess.Pass1(&renderstate, fixedcm, sceneWidth, sceneHeight); mBuffers->BindCurrentFB(); afterBloomDrawEndScene2D(); - - hw_postprocess.tonemap.Render(&renderstate); - hw_postprocess.colormap.Render(&renderstate, fixedcm); - hw_postprocess.lens.Render(&renderstate); - hw_postprocess.fxaa.Render(&renderstate); - hw_postprocess.customShaders.Run(&renderstate, "scene"); + hw_postprocess.Pass2(&renderstate, fixedcm, sceneWidth, sceneHeight); } //----------------------------------------------------------------------------- diff --git a/src/rendering/hwrenderer/postprocessing/hw_postprocess.cpp b/src/rendering/hwrenderer/postprocessing/hw_postprocess.cpp index 9eb64a1d0..532f2ca35 100644 --- a/src/rendering/hwrenderer/postprocessing/hw_postprocess.cpp +++ b/src/rendering/hwrenderer/postprocessing/hw_postprocess.cpp @@ -1081,3 +1081,20 @@ void PPCustomShaderInstance::AddUniformField(size_t &offset, const FString &name offset += alignment - fieldsize; } } + + +void Postprocess::Pass1(PPRenderState* state, int fixedcm, int sceneWidth, int sceneHeight) +{ + exposure.Render(state, sceneWidth, sceneHeight); + customShaders.Run(state, "beforebloom"); + bloom.RenderBloom(state, sceneWidth, sceneHeight, fixedcm); +} + +void Postprocess::Pass2(PPRenderState* state, int fixedcm, int sceneWidth, int sceneHeight) +{ + tonemap.Render(state); + colormap.Render(state, fixedcm); + lens.Render(state); + fxaa.Render(state); + customShaders.Run(state, "scene"); +} diff --git a/src/rendering/hwrenderer/postprocessing/hw_postprocess.h b/src/rendering/hwrenderer/postprocessing/hw_postprocess.h index aa9a26e5c..8c74af83e 100644 --- a/src/rendering/hwrenderer/postprocessing/hw_postprocess.h +++ b/src/rendering/hwrenderer/postprocessing/hw_postprocess.h @@ -834,6 +834,10 @@ public: PPPresent present; PPShadowMap shadowmap; PPCustomShaders customShaders; + + + void Pass1(PPRenderState *state, int fixedcm, int sceneWidth, int sceneHeight); + void Pass2(PPRenderState* state, int fixedcm, int sceneWidth, int sceneHeight); }; extern Postprocess hw_postprocess; diff --git a/src/rendering/vulkan/renderer/vk_postprocess.cpp b/src/rendering/vulkan/renderer/vk_postprocess.cpp index fc8a0a6f2..9aab746f2 100644 --- a/src/rendering/vulkan/renderer/vk_postprocess.cpp +++ b/src/rendering/vulkan/renderer/vk_postprocess.cpp @@ -46,18 +46,10 @@ void VkPostprocess::PostProcessScene(int fixedcm, const std::function &a VkPPRenderState renderstate; - hw_postprocess.exposure.Render(&renderstate, sceneWidth, sceneHeight); - hw_postprocess.customShaders.Run(&renderstate, "beforebloom"); - hw_postprocess.bloom.RenderBloom(&renderstate, sceneWidth, sceneHeight, fixedcm); - + hw_postprocess.Pass1(&renderstate, fixedcm, sceneWidth, sceneHeight); SetActiveRenderTarget(); afterBloomDrawEndScene2D(); - - hw_postprocess.tonemap.Render(&renderstate); - hw_postprocess.colormap.Render(&renderstate, fixedcm); - hw_postprocess.lens.Render(&renderstate); - hw_postprocess.fxaa.Render(&renderstate); - hw_postprocess.customShaders.Run(&renderstate, "scene"); + hw_postprocess.Pass2(&renderstate, fixedcm, sceneWidth, sceneHeight); } void VkPostprocess::BlitSceneToPostprocess()