mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Software: do not do 3d rendering while the game is paused
- Let menus render at full framerate, without expensive 3d rendering time cutting into it - Opening the menu pauses the game offline, so this is perfect - Software preserves the last frame if rendering stops
This commit is contained in:
parent
f442f933fc
commit
e1e115743a
1 changed files with 29 additions and 3 deletions
|
|
@ -90,6 +90,7 @@
|
||||||
#include "k_bans.h"
|
#include "k_bans.h"
|
||||||
#include "k_credits.h"
|
#include "k_credits.h"
|
||||||
#include "r_debug.hpp"
|
#include "r_debug.hpp"
|
||||||
|
#include "k_director.h"
|
||||||
|
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
#include "hardware/hw_main.h" // 3D View Rendering
|
#include "hardware/hw_main.h" // 3D View Rendering
|
||||||
|
|
@ -347,7 +348,7 @@ gamestate_t wipegamestate = GS_LEVEL;
|
||||||
INT16 wipetypepre = -1;
|
INT16 wipetypepre = -1;
|
||||||
INT16 wipetypepost = -1;
|
INT16 wipetypepost = -1;
|
||||||
|
|
||||||
static bool D_Display(void)
|
static bool D_Display(bool world)
|
||||||
{
|
{
|
||||||
bool ranwipe = false;
|
bool ranwipe = false;
|
||||||
boolean forcerefresh = false;
|
boolean forcerefresh = false;
|
||||||
|
|
@ -526,7 +527,7 @@ static bool D_Display(void)
|
||||||
// see if the border needs to be initially drawn
|
// see if the border needs to be initially drawn
|
||||||
if (G_GamestateUsesLevel() == true)
|
if (G_GamestateUsesLevel() == true)
|
||||||
{
|
{
|
||||||
if (!automapactive && !dedicated && cv_renderview.value)
|
if (!automapactive && !dedicated && cv_renderview.value && (world || forcerefresh))
|
||||||
{
|
{
|
||||||
R_ApplyLevelInterpolators(R_UsingFrameInterpolation() ? rendertimefrac : FRACUNIT);
|
R_ApplyLevelInterpolators(R_UsingFrameInterpolation() ? rendertimefrac : FRACUNIT);
|
||||||
|
|
||||||
|
|
@ -986,7 +987,32 @@ void D_SRB2Loop(void)
|
||||||
if (!renderisnewtic)
|
if (!renderisnewtic)
|
||||||
P_ResetInterpHudRandSeed(false);
|
P_ResetInterpHudRandSeed(false);
|
||||||
|
|
||||||
ranwipe = D_Display();
|
bool world = true;
|
||||||
|
|
||||||
|
// TODO: skipping 3D rendering does not work in
|
||||||
|
// Legacy GL -- the screen gets filled with a
|
||||||
|
// single color.
|
||||||
|
// In software, the last frame is preserved,
|
||||||
|
// which is the intended effect.
|
||||||
|
if (rendermode == render_soft)
|
||||||
|
{
|
||||||
|
auto none_freecam = []
|
||||||
|
{
|
||||||
|
for (UINT8 i = 0; i <= r_splitscreen; ++i)
|
||||||
|
{
|
||||||
|
if (camera[i].freecam || (players[displayplayers[i]].spectator && !K_DirectorIsAvailable(i)))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
// 3D rendering is stopped ENTIRELY if the game is paused.
|
||||||
|
// - In single player, opening the menu pauses the game, so it's perfect.
|
||||||
|
// - One exception: freecam is allowed to move when the game is paused.
|
||||||
|
if ((paused || P_AutoPause()) && none_freecam())
|
||||||
|
world = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ranwipe = D_Display(world);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HWRENDER
|
#ifdef HWRENDER
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue