- crossfade wipe is working again.

The other two types still need work.
This commit is contained in:
Christoph Oelckers 2018-08-28 22:58:21 +02:00
parent 29a54c33b2
commit 6e0ed3e930
3 changed files with 13 additions and 9 deletions

View file

@ -889,11 +889,11 @@ void D_Display ()
screen->End2D(); screen->End2D();
auto wipend = screen->WipeEndScreen (); auto wipend = screen->WipeEndScreen ();
auto wiper = Wiper::Create(wipe_type); auto wiper = Wiper::Create(wipe_type);
wiper->SetTextures(wipe, wipend);
wipestart = I_msTime(); wipestart = I_msTime();
NetUpdate(); // send out any new accumulation NetUpdate(); // send out any new accumulation
/*
do do
{ {
do do
@ -903,14 +903,13 @@ void D_Display ()
diff = (nowtime - wipestart) * 40 / 1000; // Using 35 here feels too slow. diff = (nowtime - wipestart) * 40 / 1000; // Using 35 here feels too slow.
} while (diff < 1); } while (diff < 1);
wipestart = nowtime; wipestart = nowtime;
done = screen->WipeDo (1);
screen->Begin2D(); screen->Begin2D();
done = wiper->Run(1);
C_DrawConsole (); // console and C_DrawConsole (); // console and
M_Drawer (); // menu are drawn even on top of wipes M_Drawer (); // menu are drawn even on top of wipes
screen->End2DAndUpdate (); screen->End2DAndUpdate ();
NetUpdate (); // [RH] not sure this is needed anymore NetUpdate (); // [RH] not sure this is needed anymore
} while (!done); } while (!done);
*/
delete wiper; delete wiper;
I_FreezeTime(false); I_FreezeTime(false);
GSnd->SetSfxPaused(false, 1); GSnd->SetSfxPaused(false, 1);

View file

@ -238,8 +238,8 @@ Wiper::~Wiper()
bool Wiper_Crossfade::Run(int ticks) bool Wiper_Crossfade::Run(int ticks)
{ {
Clock += ticks; Clock += ticks;
screen->DrawTexture(startScreen, 0, 0, TAG_DONE); screen->DrawTexture(startScreen, 0, 0, DTA_FlipY, screen->RenderTextureIsFlipped(), TAG_DONE);
screen->DrawTexture(endScreen, 0, 0, DTA_Alpha, clamp(Clock / 32.f, 0.f, 1.f), TAG_DONE); screen->DrawTexture(endScreen, 0, 0, DTA_FlipY, screen->RenderTextureIsFlipped(), DTA_Alpha, clamp(Clock / 32.f, 0.f, 1.f), TAG_DONE);
return Clock >= 32; return Clock >= 32;
} }
@ -274,7 +274,7 @@ Wiper_Melt::Wiper_Melt()
bool Wiper_Melt::Run(int ticks) bool Wiper_Melt::Run(int ticks)
{ {
bool done; bool done;
screen->DrawTexture(endScreen, 0, 0, TAG_DONE); screen->DrawTexture(endScreen, 0, 0, DTA_FlipY, screen->RenderTextureIsFlipped(), DTA_Color, PalEntry(255, 255, 0, 0), TAG_DONE);
// Copy the old screen in vertical strips on top of the new one. // Copy the old screen in vertical strips on top of the new one.
while (ticks--) while (ticks--)
@ -319,7 +319,7 @@ bool Wiper_Melt::Run(int ticks)
rect.bottom = w - dpt.y; rect.bottom = w - dpt.y;
if (rect.bottom > rect.top) if (rect.bottom > rect.top)
{ {
screen->DrawTexture(startScreen, 0, rect.top, DTA_ClipLeft, rect.left, DTA_ClipRight, rect.right, TAG_DONE); screen->DrawTexture(startScreen, 0, rect.top, DTA_FlipY, screen->RenderTextureIsFlipped(), DTA_ClipLeft, rect.left, DTA_ClipRight, rect.right, TAG_DONE);
} }
} }
} }
@ -388,8 +388,8 @@ bool Wiper_Burn::Run(int ticks)
} }
} }
screen->DrawTexture(startScreen, 0, 0, TAG_DONE); screen->DrawTexture(startScreen, 0, 0, DTA_FlipY, screen->RenderTextureIsFlipped(), TAG_DONE);
screen->DrawTexture(endScreen, 0, 0, DTA_Burn, true, TAG_DONE); screen->DrawTexture(endScreen, 0, 0, DTA_FlipY, screen->RenderTextureIsFlipped(), DTA_Burn, true, DTA_LegacyRenderStyle, STYLE_Translucent, TAG_DONE);
// The fire may not always stabilize, so the wipe is forced to end // The fire may not always stabilize, so the wipe is forced to end
// after an arbitrary maximum time. // after an arbitrary maximum time.

View file

@ -459,6 +459,11 @@ public:
// Returns true if Begin2D has been called and 2D drawing is now active // Returns true if Begin2D has been called and 2D drawing is now active
bool HasBegun2D() { return isIn2D; } bool HasBegun2D() { return isIn2D; }
// This is overridable in case Vulkan does it differently.
virtual bool RenderTextureIsFlipped() const
{
return true;
}
// Report a game restart // Report a game restart
void InitPalette(); void InitPalette();