diff --git a/src/gl/system/gl_framebuffer.cpp b/src/gl/system/gl_framebuffer.cpp index b03b31968..cb5c92534 100644 --- a/src/gl/system/gl_framebuffer.cpp +++ b/src/gl/system/gl_framebuffer.cpp @@ -479,3 +479,8 @@ void OpenGLFrameBuffer::Draw2D() { if (GLRenderer != nullptr) GLRenderer->Draw2D(&m2DDrawer); } + +void OpenGLFrameBuffer::PostProcessScene(int fixedcm, const std::function &afterBloomDrawEndScene2D) +{ + GLRenderer->PostProcessScene(fixedcm, afterBloomDrawEndScene2D); +} diff --git a/src/gl/system/gl_framebuffer.h b/src/gl/system/gl_framebuffer.h index 817ae96b5..e1cd3a18e 100644 --- a/src/gl/system/gl_framebuffer.h +++ b/src/gl/system/gl_framebuffer.h @@ -44,7 +44,6 @@ public: IUniformBuffer *CreateUniformBuffer(size_t size, bool staticuse = false) override; IShaderProgram *CreateShaderProgram() override; - // Retrieves a buffer containing image data for a screenshot. // Hint: Pitch can be negative for upside-down images, in which case buffer // points to the last row in the buffer, which will be the first row output. @@ -60,6 +59,7 @@ public: void SetVSync(bool vsync); void Draw2D() override; + void PostProcessScene(int fixedcm, const std::function &afterBloomDrawEndScene2D) override; bool HWGammaActive = false; // Are we using hardware or software gamma? std::shared_ptr mDebug; // Debug API diff --git a/src/swrenderer/r_swscene.cpp b/src/swrenderer/r_swscene.cpp index 2a1b05b07..26b1e4060 100644 --- a/src/swrenderer/r_swscene.cpp +++ b/src/swrenderer/r_swscene.cpp @@ -122,6 +122,13 @@ sector_t *SWSceneDrawer::RenderView(player_t *player) auto map = swrenderer::CameraLight::Instance()->ShaderColormap(); screen->DrawTexture(fbtex.get(), 0, 0, DTA_SpecialColormap, map, TAG_DONE); - SWRenderer->DrawRemainingPlayerSprites(); + screen->Draw2D(); + screen->Clear2D(); + screen->PostProcessScene(CM_DEFAULT, [&]() { + SWRenderer->DrawRemainingPlayerSprites(); + screen->Draw2D(); + screen->Clear2D(); + }); + return r_viewpoint.sector; } diff --git a/src/v_video.h b/src/v_video.h index cbf9dd7b0..1e456e6b8 100644 --- a/src/v_video.h +++ b/src/v_video.h @@ -43,6 +43,7 @@ #include "c_cvars.h" #include "v_colortables.h" #include "v_2ddrawer.h" +#include struct sector_t; class IShaderProgram; @@ -464,6 +465,8 @@ public: virtual bool WipeDo(int ticks); virtual void WipeCleanup(); + virtual void PostProcessScene(int fixedcm, const std::function &afterBloomDrawEndScene2D) { if (afterBloomDrawEndScene2D) afterBloomDrawEndScene2D(); } + void ScaleCoordsFromWindow(int16_t &x, int16_t &y); uint64_t GetLastFPS() const { return LastCount; }