From 3d3f364874117a10afa4d737ca5b502a20fbf12a Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 20 Jun 2019 11:55:45 +0200 Subject: [PATCH] - consolidated postprocessing code a bit. The code that determines the order of effects should not be duplicated between renderers. --- src/rendering/gl/renderer/gl_postprocess.cpp | 12 ++---------- .../postprocessing/hw_postprocess.cpp | 17 +++++++++++++++++ .../hwrenderer/postprocessing/hw_postprocess.h | 4 ++++ .../vulkan/renderer/vk_postprocess.cpp | 12 ++---------- 4 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/rendering/gl/renderer/gl_postprocess.cpp b/src/rendering/gl/renderer/gl_postprocess.cpp index 4e0744fb45..43983b140e 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 9eb64a1d01..532f2ca358 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 aa9a26e5c2..8c74af83e5 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 fc8a0a6f2e..9aab746f2f 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()