Merge branch 'bloom_psprite_fix' into gzdoom

This commit is contained in:
Magnus Norddahl 2018-01-25 19:01:46 +01:00
commit a46bbc81a0
4 changed files with 29 additions and 7 deletions

View file

@ -161,12 +161,13 @@ void FGLRenderer::RenderScreenQuad()
GLRenderer->mVBO->RenderArray(GL_TRIANGLE_STRIP, FFlatVertexBuffer::PRESENT_INDEX, 4); GLRenderer->mVBO->RenderArray(GL_TRIANGLE_STRIP, FFlatVertexBuffer::PRESENT_INDEX, 4);
} }
void FGLRenderer::PostProcessScene(int fixedcm) void FGLRenderer::PostProcessScene(int fixedcm, const std::function<void()> &afterBloomDrawEndScene2D)
{ {
mBuffers->BlitSceneToTexture(); mBuffers->BlitSceneToTexture();
UpdateCameraExposure(); UpdateCameraExposure();
mCustomPostProcessShaders->Run("beforebloom"); mCustomPostProcessShaders->Run("beforebloom");
BloomScene(fixedcm); BloomScene(fixedcm);
afterBloomDrawEndScene2D();
TonemapScene(); TonemapScene();
ColormapScene(fixedcm); ColormapScene(fixedcm);
LensDistortScene(); LensDistortScene();

View file

@ -7,6 +7,7 @@
#include "r_renderer.h" #include "r_renderer.h"
#include "r_data/matrix.h" #include "r_data/matrix.h"
#include "gl/dynlights/gl_shadowmap.h" #include "gl/dynlights/gl_shadowmap.h"
#include <functional>
struct particle_t; struct particle_t;
class FCanvasTexture; class FCanvasTexture;
@ -43,6 +44,7 @@ class F2DDrawer;
class FHardwareTexture; class FHardwareTexture;
class FShadowMapShader; class FShadowMapShader;
class FCustomPostProcessShaders; class FCustomPostProcessShaders;
class GLSceneDrawer;
inline float DEG2RAD(float deg) inline float DEG2RAD(float deg)
{ {
@ -174,7 +176,7 @@ public:
void RenderView(player_t* player); void RenderView(player_t* player);
void RenderScreenQuad(); void RenderScreenQuad();
void PostProcessScene(int fixedcm); void PostProcessScene(int fixedcm, const std::function<void()> &afterBloomDrawEndScene2D);
void AmbientOccludeScene(); void AmbientOccludeScene();
void UpdateCameraExposure(); void UpdateCameraExposure();
void BloomScene(int fixedcm); void BloomScene(int fixedcm);

View file

@ -681,6 +681,25 @@ void GLSceneDrawer::EndDrawScene(sector_t * viewsector)
Reset3DViewport(); Reset3DViewport();
// Delay drawing psprites until after bloom has been applied, if enabled.
if (!FGLRenderBuffers::IsEnabled() || !gl_bloom || FixedColormap != CM_DEFAULT)
{
DrawEndScene2D(viewsector);
}
else
{
// Restore standard rendering state
gl_RenderState.BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
gl_RenderState.ResetColor();
gl_RenderState.EnableTexture(true);
glDisable(GL_SCISSOR_TEST);
}
}
void GLSceneDrawer::DrawEndScene2D(sector_t * viewsector)
{
const bool renderHUDModel = gl_IsHUDModelForPlayerAvailable(players[consoleplayer].camera->player);
// [BB] Only draw the sprites if we didn't render a HUD model before. // [BB] Only draw the sprites if we didn't render a HUD model before.
if (renderHUDModel == false) if (renderHUDModel == false)
{ {
@ -706,7 +725,6 @@ void GLSceneDrawer::EndDrawScene(sector_t * viewsector)
glDisable(GL_SCISSOR_TEST); glDisable(GL_SCISSOR_TEST);
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// //
// R_RenderView - renders one view - either the screen or a camera texture // R_RenderView - renders one view - either the screen or a camera texture
@ -846,7 +864,7 @@ sector_t * GLSceneDrawer::RenderViewpoint (AActor * camera, GL_IRECT * bounds, f
if (mainview && toscreen) EndDrawScene(lviewsector); // do not call this for camera textures. if (mainview && toscreen) EndDrawScene(lviewsector); // do not call this for camera textures.
if (mainview && FGLRenderBuffers::IsEnabled()) if (mainview && FGLRenderBuffers::IsEnabled())
{ {
GLRenderer->PostProcessScene(FixedColormap); GLRenderer->PostProcessScene(FixedColormap, [&]() { if (gl_bloom && FixedColormap == CM_DEFAULT) DrawEndScene2D(lviewsector); });
// This should be done after postprocessing, not before. // This should be done after postprocessing, not before.
GLRenderer->mBuffers->BindCurrentFB(); GLRenderer->mBuffers->BindCurrentFB();

View file

@ -55,6 +55,7 @@ public:
void ProcessScene(bool toscreen = false); void ProcessScene(bool toscreen = false);
void DrawBlend(sector_t * viewsector); void DrawBlend(sector_t * viewsector);
void EndDrawScene(sector_t * viewsector); void EndDrawScene(sector_t * viewsector);
void DrawEndScene2D(sector_t * viewsector);
void RenderActorsInPortal(FGLLinePortal *glport); void RenderActorsInPortal(FGLLinePortal *glport);
void CheckViewArea(vertex_t *v1, vertex_t *v2, sector_t *frontsector, sector_t *backsector); void CheckViewArea(vertex_t *v1, vertex_t *v2, sector_t *frontsector, sector_t *backsector);