From fc12fc7cd4e53d3b1f182e7b3839884a71ecd4fd Mon Sep 17 00:00:00 2001 From: Sryder13 Date: Mon, 31 Mar 2014 23:47:12 +0100 Subject: [PATCH] OpenGL Screen Fading Fix Screen Wipes now work as they did in 2.0.x. --- src/d_main.c | 4 ---- src/f_wipe.c | 3 +-- src/hardware/hw_main.c | 27 +++++---------------------- src/hardware/hw_main.h | 1 - src/hardware/r_opengl/r_opengl.c | 16 +++++++++++++++- src/p_setup.c | 5 +---- 6 files changed, 22 insertions(+), 34 deletions(-) diff --git a/src/d_main.c b/src/d_main.c index 9475a77ae..9e00049ee 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -268,10 +268,6 @@ static void D_Display(void) && wipedefs[wipedefindex] != UINT8_MAX) { V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31); -#ifdef HWRENDER - if(rendermode != render_soft) - HWR_PrepFadeToBlack(); -#endif F_WipeEndScreen(); F_RunWipe(wipedefs[wipedefindex], gamestate != GS_TIMEATTACK); } diff --git a/src/f_wipe.c b/src/f_wipe.c index fe740408f..64d5cfeed 100644 --- a/src/f_wipe.c +++ b/src/f_wipe.c @@ -288,8 +288,7 @@ void F_RunWipe(UINT8 wipetype, boolean drawMenu) if (drawMenu) M_Drawer(); // menu is drawn even on top of wipes - if (rendermode == render_soft) - I_FinishUpdate(); // page flip or blit buffer + I_FinishUpdate(); // page flip or blit buffer if (moviemode) M_SaveFrame(); diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 05964351c..c59cc28d8 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -5347,24 +5347,6 @@ void HWR_EndScreenWipe(void) HWD.pfnEndScreenWipe(); } -// Prepare the screen for fading to black. -void HWR_PrepFadeToBlack(void) -{ - FOutVector v[4]; - INT32 flags; - FSurfaceInfo Surf; - - v[0].x = v[2].y = v[3].x = v[3].y = -1.0f; - v[0].y = v[1].x = v[1].y = v[2].x = 1.0f; - v[0].z = v[1].z = v[2].z = v[3].z = 1.0f; - - flags = PF_Modulated | PF_Clip | PF_NoZClip | PF_NoDepthTest | PF_NoTexture; - Surf.FlatColor.s.red = Surf.FlatColor.s.green = Surf.FlatColor.s.blue = 0x00; - Surf.FlatColor.s.alpha = 0xff; - - HWD.pfnDrawPolygon(&Surf, v, 4, flags); -} - void HWR_DrawIntermissionBG(void) { HWD.pfnDrawIntermissionBG(); @@ -5372,14 +5354,15 @@ void HWR_DrawIntermissionBG(void) void HWR_DoScreenWipe(void) { - HWRWipeCounter -= 0.035f; - //CONS_Debug(DBG_RENDER, "In HWR_DoScreenWipe(). Alpha =%f\n", HWRWipeCounter); HWD.pfnDoScreenWipe(HWRWipeCounter); - I_OsPolling(); - I_FinishUpdate(); + // This works for all the cases in vanilla until fade masks get done + HWRWipeCounter -= 0.05f; // Go less opaque after + + if (HWRWipeCounter < 0) + HWRWipeCounter = 0; } #endif // HWRENDER diff --git a/src/hardware/hw_main.h b/src/hardware/hw_main.h index c93d4ea6b..8d8b69e60 100644 --- a/src/hardware/hw_main.h +++ b/src/hardware/hw_main.h @@ -64,7 +64,6 @@ void HWR_DoPostProcessor(player_t *player); void HWR_StartScreenWipe(void); void HWR_EndScreenWipe(void); void HWR_DoScreenWipe(void); -void HWR_PrepFadeToBlack(void); void HWR_DrawIntermissionBG(void); // This stuff is put here so MD2's can use them diff --git a/src/hardware/r_opengl/r_opengl.c b/src/hardware/r_opengl/r_opengl.c index c9a2f392d..ded8d0767 100644 --- a/src/hardware/r_opengl/r_opengl.c +++ b/src/hardware/r_opengl/r_opengl.c @@ -2016,6 +2016,8 @@ EXPORT void HWRAPI(StartScreenWipe) (void) #ifndef KOS_GL_COMPATIBILITY pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, texsize, texsize, 0); #endif + + tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now } // Create Screen to fade to @@ -2043,6 +2045,8 @@ EXPORT void HWRAPI(EndScreenWipe)(void) #ifndef KOS_GL_COMPATIBILITY pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, texsize, texsize, 0); #endif + + tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now } @@ -2060,7 +2064,7 @@ EXPORT void HWRAPI(DrawIntermissionBG)(void) xfix = 1/((float)(texsize)/((float)((screen_width)))); yfix = 1/((float)(texsize)/((float)((screen_height)))); - //pglClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); + pglClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); pglBindTexture(GL_TEXTURE_2D, screentexture); pglBegin(GL_QUADS); @@ -2083,6 +2087,8 @@ EXPORT void HWRAPI(DrawIntermissionBG)(void) pglVertex3f(1.0f, -1.0f, 1.0f); pglEnd(); + + tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now } // Do screen fades! @@ -2102,6 +2108,8 @@ EXPORT void HWRAPI(DoScreenWipe)(float alpha) pglClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); + SetBlend(PF_Modulated|PF_NoDepthTest|PF_Clip|PF_NoZClip); + // Draw the screen on bottom to fade to pglBindTexture(GL_TEXTURE_2D, endScreenWipe); pglBegin(GL_QUADS); @@ -2124,6 +2132,8 @@ EXPORT void HWRAPI(DoScreenWipe)(float alpha) pglVertex3f(1.0f, -1.0f, 1.0f); pglEnd(); + SetBlend(PF_Modulated|PF_Translucent|PF_NoDepthTest|PF_Clip|PF_NoZClip); + // Draw the screen on top that fades. pglBindTexture(GL_TEXTURE_2D, startScreenWipe); pglBegin(GL_QUADS); @@ -2146,6 +2156,8 @@ EXPORT void HWRAPI(DoScreenWipe)(float alpha) pglVertex3f(1.0f, -1.0f, 1.0f); pglEnd(); + + tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now } @@ -2174,6 +2186,8 @@ EXPORT void HWRAPI(MakeScreenTexture) (void) #ifndef KOS_GL_COMPATIBILITY pglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, texsize, texsize, 0); #endif + + tex_downloaded = 0; // 0 so it knows it doesn't have any of the cached patches downloaded right now } #endif //HWRENDER diff --git a/src/p_setup.c b/src/p_setup.c index 9b32d4a03..64f67094a 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -2435,10 +2435,7 @@ noscript: { F_WipeStartScreen(); V_DrawFill(0, 0, BASEVIDWIDTH, BASEVIDHEIGHT, 31); -#ifdef HWRENDER - if(rendermode != render_soft) - HWR_PrepFadeToBlack(); -#endif + F_WipeEndScreen(); F_RunWipe(wipedefs[wipe_level_toblack], false);