diff --git a/src/d_main.cpp b/src/d_main.cpp index d9bc89206..20db4fdb0 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -753,13 +753,15 @@ void D_Display () screen->FrameTime = I_msTimeFS(); TexMan.UpdateAnimations(screen->FrameTime); R_UpdateSky(screen->FrameTime); + screen->BeginFrame(); + screen->ClearClipRect(); switch (gamestate) { case GS_FULLCONSOLE: - screen->SetBlendingRect(0,0,0,0); screen->Begin2D(false); C_DrawConsole (); M_Drawer (); + screen->End2D(); screen->Update (); return; @@ -775,6 +777,7 @@ void D_Display () //E_RenderFrame(); // screen->RenderView(&players[consoleplayer]); + screen->Begin2D(false); // returns with 2S mode set. if (automapactive) { @@ -820,21 +823,18 @@ void D_Display () break; case GS_INTERMISSION: - screen->SetBlendingRect(0,0,0,0); screen->Begin2D(false); WI_Drawer (); CT_Drawer (); break; case GS_FINALE: - screen->SetBlendingRect(0,0,0,0); screen->Begin2D(false); F_Drawer (); CT_Drawer (); break; case GS_DEMOSCREEN: - screen->SetBlendingRect(0,0,0,0); screen->Begin2D(false); D_PageDrawer (); CT_Drawer (); diff --git a/src/gl/renderer/gl_renderer.cpp b/src/gl/renderer/gl_renderer.cpp index f3dd00aa5..9d6833dcf 100644 --- a/src/gl/renderer/gl_renderer.cpp +++ b/src/gl/renderer/gl_renderer.cpp @@ -356,21 +356,6 @@ void FGLRenderer::SetupLevel() mVBO->CreateVBO(); } -void FGLRenderer::Begin2D() -{ - if (mBuffers->Setup(mScreenViewport.width, mScreenViewport.height, mSceneViewport.width, mSceneViewport.height)) - { - if (mDrawingScene2D) - mBuffers->BindSceneFB(false); - else - mBuffers->BindCurrentFB(); - } - glViewport(mScreenViewport.left, mScreenViewport.top, mScreenViewport.width, mScreenViewport.height); - glScissor(mScreenViewport.left, mScreenViewport.top, mScreenViewport.width, mScreenViewport.height); - - gl_RenderState.EnableFog(false); -} - //=========================================================================== // // @@ -533,6 +518,12 @@ void FGLRenderer::WriteSavePic(player_t *player, FileWriter *file, int width, in drawer.WriteSavePic(player, file, width, height); } +void FGLRenderer::BeginFrame() +{ + buffersActive = GLRenderer->mBuffers->Setup(GLRenderer->mScreenViewport.width, GLRenderer->mScreenViewport.height, GLRenderer->mSceneViewport.width, GLRenderer->mSceneViewport.height); +} + + void gl_FillScreen() { @@ -721,9 +712,31 @@ public: void LegacyColorOverlay(F2DDrawer *drawer, F2DDrawer::RenderCommand & cmd); int LegacyDesaturation(F2DDrawer::RenderCommand &cmd); +CVAR(Bool, gl_aalines, false, CVAR_ARCHIVE) void FGLRenderer::Draw2D(F2DDrawer *drawer) { + if (buffersActive) + { + mBuffers->BindCurrentFB(); + } + glViewport(mScreenViewport.left, mScreenViewport.top, mScreenViewport.width, mScreenViewport.height); + + gl_RenderState.mViewMatrix.loadIdentity(); + gl_RenderState.mProjectionMatrix.ortho(0, screen->GetWidth(), screen->GetHeight(), 0, -1.0f, 1.0f); + gl_RenderState.ApplyMatrices(); + + glDisable(GL_DEPTH_TEST); + + // Korshun: ENABLE AUTOMAP ANTIALIASING!!! + if (gl_aalines) + glEnable(GL_LINE_SMOOTH); + else + { + glDisable(GL_MULTISAMPLE); + glDisable(GL_LINE_SMOOTH); + glLineWidth(1.0); + } auto &vertices = drawer->mVertices; @@ -741,6 +754,7 @@ void FGLRenderer::Draw2D(F2DDrawer *drawer) vb->UploadData(&vertices[0], vertices.Size(), &indices[0], indices.Size()); gl_RenderState.SetVertexBuffer(vb); gl_RenderState.SetFixedColormap(CM_DEFAULT); + gl_RenderState.EnableFog(false); for(auto &cmd : commands) { diff --git a/src/gl/renderer/gl_renderer.h b/src/gl/renderer/gl_renderer.h index 19f58836d..0126c3619 100644 --- a/src/gl/renderer/gl_renderer.h +++ b/src/gl/renderer/gl_renderer.h @@ -152,6 +152,7 @@ public: GL_IRECT mSceneViewport; GL_IRECT mOutputLetterbox; bool mDrawingScene2D = false; + bool buffersActive = false; float mSceneClearColor[3]; @@ -166,7 +167,6 @@ public: void Initialize(int width, int height); - void Begin2D(); void ClearBorders(); void FlushTextures(); @@ -193,7 +193,7 @@ public: void WriteSavePic(player_t *player, FileWriter *file, int width, int height); void RenderView(player_t *player); void DrawBlend(sector_t * viewsector, bool FixedColormap, bool docolormap, bool in2d = false); - + void BeginFrame(); bool StartOffscreen(); void EndOffscreen(); diff --git a/src/gl/scene/gl_scene.cpp b/src/gl/scene/gl_scene.cpp index 1997344d5..593d496cf 100644 --- a/src/gl/scene/gl_scene.cpp +++ b/src/gl/scene/gl_scene.cpp @@ -134,7 +134,7 @@ void GLSceneDrawer::Reset3DViewport() void GLSceneDrawer::Set3DViewport(bool mainview) { - if (mainview && GLRenderer->mBuffers->Setup(GLRenderer->mScreenViewport.width, GLRenderer->mScreenViewport.height, GLRenderer->mSceneViewport.width, GLRenderer->mSceneViewport.height)) + if (mainview && GLRenderer->buffersActive) { bool useSSAO = (gl_ssao != 0); GLRenderer->mBuffers->BindSceneFB(useSSAO); @@ -526,8 +526,6 @@ void GLSceneDrawer::EndDrawScene(sector_t * viewsector) glDisable(GL_STENCIL_TEST); - GLRenderer->framebuffer->Begin2D(false); - Reset3DViewport(); // Delay drawing psprites until after bloom has been applied, if enabled. @@ -776,7 +774,6 @@ void GLSceneDrawer::WriteSavePic (player_t *player, FileWriter *file, int width, glDisable(GL_STENCIL_TEST); gl_RenderState.SetFixedColormap(CM_DEFAULT); gl_RenderState.SetSoftLightLevel(-1); - screen->Begin2D(false); if (!FGLRenderBuffers::IsEnabled()) { DrawBlend(viewsector); diff --git a/src/gl/scene/gl_swscene.cpp b/src/gl/scene/gl_swscene.cpp index 965a2f8dd..86915eec2 100644 --- a/src/gl/scene/gl_swscene.cpp +++ b/src/gl/scene/gl_swscene.cpp @@ -119,7 +119,6 @@ void SWSceneDrawer::RenderView(player_t *player) FBTexture->SystemTexture[0]->CreateTexture(nullptr, screen->GetWidth(), screen->GetHeight(), 0, false, 0, "swbuffer"); auto map = swrenderer::CameraLight::Instance()->ShaderColormap(); - screen->Begin2D(false); screen->DrawTexture(FBTexture, 0, 0, DTA_SpecialColormap, map, TAG_DONE); SWRenderer->DrawRemainingPlayerSprites(); GLRenderer->DrawBlend(r_viewpoint.sector, !!map, V_IsTrueColor(), true); diff --git a/src/gl/system/gl_framebuffer.cpp b/src/gl/system/gl_framebuffer.cpp index 2ebac1b76..65879e9ff 100644 --- a/src/gl/system/gl_framebuffer.cpp +++ b/src/gl/system/gl_framebuffer.cpp @@ -44,8 +44,6 @@ EXTERN_CVAR (Bool, vid_vsync) -CVAR(Bool, gl_aalines, false, CVAR_ARCHIVE) - FGLRenderer *GLRenderer; void gl_LoadExtensions(); @@ -140,7 +138,6 @@ void OpenGLFrameBuffer::InitializeState() GLRenderer->Initialize(GetWidth(), GetHeight()); GLRenderer->SetOutputViewport(nullptr); - Begin2D(false); } //========================================================================== @@ -157,8 +154,6 @@ void OpenGLFrameBuffer::Update() return; } - Begin2D(false); - DrawRateStuff(); GLRenderer->Flush(); @@ -442,32 +437,10 @@ void OpenGLFrameBuffer::SetClearColor(int color) } -//========================================================================== -// -// -// -//========================================================================== -void OpenGLFrameBuffer::Begin2D(bool copy3d) +void OpenGLFrameBuffer::BeginFrame() { - Super::Begin2D(copy3d); - gl_RenderState.mViewMatrix.loadIdentity(); - gl_RenderState.mProjectionMatrix.ortho(0, GetWidth(), GetHeight(), 0, -1.0f, 1.0f); - gl_RenderState.ApplyMatrices(); - - glDisable(GL_DEPTH_TEST); - - // Korshun: ENABLE AUTOMAP ANTIALIASING!!! - if (gl_aalines) - glEnable(GL_LINE_SMOOTH); - else - { - glDisable(GL_MULTISAMPLE); - glDisable(GL_LINE_SMOOTH); - glLineWidth(1.0); - } - - if (GLRenderer != NULL) - GLRenderer->Begin2D(); + if (GLRenderer != nullptr) + GLRenderer->BeginFrame(); } //=========================================================================== diff --git a/src/gl/system/gl_framebuffer.h b/src/gl/system/gl_framebuffer.h index e82bcee03..22d5f6e63 100644 --- a/src/gl/system/gl_framebuffer.h +++ b/src/gl/system/gl_framebuffer.h @@ -31,7 +31,6 @@ public: PalEntry *GetPalette () override; bool SetFlash(PalEntry rgb, int amount) override; void GetFlash(PalEntry &rgb, int &amount) override; - void Begin2D(bool copy3d) override; void GameRestart() override; void InitForLevel() override; void SetClearColor(int color) override; @@ -46,6 +45,7 @@ public: void FlushTextures() override; void TextureFilterChanged() override; void ResetFixedColormap() override; + void BeginFrame() override; // Retrieves a buffer containing image data for a screenshot. // Hint: Pitch can be negative for upside-down images, in which case buffer diff --git a/src/intermission/intermission.cpp b/src/intermission/intermission.cpp index 115084637..30ef3fa40 100644 --- a/src/intermission/intermission.cpp +++ b/src/intermission/intermission.cpp @@ -229,7 +229,6 @@ void DIntermissionScreenFader::Drawer () if (mType == FADE_In) factor = 1.0 - factor; int color = MAKEARGB(int(factor*255), 0,0,0); - screen->Begin2D(false); screen->DrawTexture (TexMan[mBackground], 0, 0, DTA_Fullscreen, true, DTA_ColorOverlay, color, TAG_DONE); for (unsigned i=0; i < mOverlays.Size(); i++) { diff --git a/src/v_video.cpp b/src/v_video.cpp index c0da989d5..0cb424d2c 100644 --- a/src/v_video.cpp +++ b/src/v_video.cpp @@ -839,33 +839,6 @@ void DFrameBuffer::NewRefreshRate () { } -//========================================================================== -// -// DFrameBuffer :: SetBlendingRect -// -// Defines the area of the screen containing the 3D view. -// -//========================================================================== - -void DFrameBuffer::SetBlendingRect (int x1, int y1, int x2, int y2) -{ -} - -//========================================================================== -// -// DFrameBuffer :: Begin2D -// -// Signal that 3D rendering is complete, and the rest of the operations on -// the canvas until Unlock() will be 2D ones. -// -//========================================================================== - -void DFrameBuffer::Begin2D (bool copy3d) -{ - isIn2D = true; - ClearClipRect(); -} - //========================================================================== // // DFrameBuffer :: WipeStartScreen diff --git a/src/v_video.h b/src/v_video.h index f7b2f20c8..98903413f 100644 --- a/src/v_video.h +++ b/src/v_video.h @@ -372,9 +372,6 @@ public: // Tells the device to recreate itself with the new setting from vid_refreshrate. virtual void NewRefreshRate (); - // Set the rect defining the area affected by blending. - virtual void SetBlendingRect (int x1, int y1, int x2, int y2); - // Delete any resources that need to be deleted after restarting with a different IWAD virtual void CleanForRestart() {} virtual void SetTextureFilterMode() {} @@ -384,10 +381,11 @@ public: virtual void FlushTextures() {} virtual void TextureFilterChanged() {} virtual void ResetFixedColormap() {} + virtual void BeginFrame() {} // Begin 2D drawing operations. // Returns true if hardware-accelerated 2D has been entered, false if not. - virtual void Begin2D(bool copy3d); + void Begin2D(bool copy3d) { isIn2D = true; } void End2D() { isIn2D = false; } // Returns true if Begin2D has been called and 2D drawing is now active