Rework rendertimefrac and gate it behind a function
Fixes intermission background shifting when toggling fullscreen (yup) and fixes audio caption text losing interp when paused
This commit is contained in:
parent
423a9ee8a6
commit
219acbb9cc
17 changed files with 80 additions and 212 deletions
|
|
@ -2006,7 +2006,7 @@ static boolean CL_ServerConnectionTicker(const char *tmpsave, tic_t *oldtic, tic
|
|||
|
||||
// Needs to be updated here for M_DrawEggaChannel
|
||||
renderdeltatics = FRACUNIT;
|
||||
rendertimefrac = FRACUNIT;
|
||||
R_SetTimeFrac(FRACUNIT);
|
||||
|
||||
memset(deviceResponding, false, sizeof (deviceResponding));
|
||||
|
||||
|
|
|
|||
|
|
@ -282,7 +282,7 @@ boolean D_RenderLevel(void)
|
|||
if (automapactive || dedicated || !cv_renderview.value || !levelloaded)
|
||||
return false;
|
||||
|
||||
R_ApplyLevelInterpolators(R_UsingFrameInterpolation() ? rendertimefrac : FRACUNIT);
|
||||
R_ApplyLevelInterpolators(R_GetTimeFrac(RTF_LEVEL));
|
||||
|
||||
viewwindowy = 0;
|
||||
viewwindowx = 0;
|
||||
|
|
@ -446,7 +446,7 @@ static void D_Display(void)
|
|||
for (i = 0; i <= r_splitscreen; ++i)
|
||||
{
|
||||
R_SetViewContext(static_cast<viewcontext_e>(VIEWCONTEXT_PLAYER1 + i));
|
||||
R_InterpolateViewRollAngle(rendertimefrac);
|
||||
R_InterpolateViewRollAngle(R_GetTimeFrac(RTF_LEVEL));
|
||||
R_CheckViewMorph(i);
|
||||
}
|
||||
}
|
||||
|
|
@ -882,7 +882,7 @@ void D_WipeLoop(wipelooptype_t type, UINT8 wipetype, boolean drawMenu)
|
|||
renderisnewtic = false;
|
||||
|
||||
// draw loop
|
||||
rendertimefrac = g_time.timefrac;
|
||||
R_SetTimeFrac(g_time.timefrac);
|
||||
renderdeltatics = FLOAT_TO_FIXED(delta);
|
||||
|
||||
#ifndef NOWIPE
|
||||
|
|
@ -1016,7 +1016,7 @@ void D_SRB2Loop(void)
|
|||
debugload--;
|
||||
#endif
|
||||
|
||||
interp = R_UsingFrameInterpolation() && !dedicated;
|
||||
interp = !dedicated && (R_GetFramerateCap() != TICRATE || cv_timescale.value < FRACUNIT);
|
||||
doDisplay = false;
|
||||
|
||||
#ifdef HW3SOUND
|
||||
|
|
@ -1080,29 +1080,12 @@ void D_SRB2Loop(void)
|
|||
|
||||
I_UpdateTime(cv_timescale.value);
|
||||
|
||||
if (!(paused || P_AutoPause()) && !lagging)
|
||||
{
|
||||
rendertimefrac = g_time.timefrac;
|
||||
}
|
||||
else
|
||||
{
|
||||
rendertimefrac = FRACUNIT;
|
||||
}
|
||||
|
||||
if (!lagging)
|
||||
{
|
||||
rendertimefrac_unpaused = g_time.timefrac;
|
||||
}
|
||||
else
|
||||
{
|
||||
rendertimefrac_unpaused = FRACUNIT;
|
||||
}
|
||||
R_SetTimeFrac(lagging ? FRACUNIT : g_time.timefrac);
|
||||
}
|
||||
else
|
||||
{
|
||||
renderdeltatics = realtics * FRACUNIT;
|
||||
rendertimefrac = FRACUNIT;
|
||||
rendertimefrac_unpaused = FRACUNIT;
|
||||
R_SetTimeFrac(FRACUNIT);
|
||||
}
|
||||
|
||||
I_UpdateTime(cv_timescale.value);
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
#include "p_setup.h"
|
||||
#include "st_stuff.h" // hud hiding
|
||||
#include "fastcmp.h"
|
||||
#include "r_fps.h" // R_GetTimeFrac
|
||||
|
||||
#include "lua_hud.h"
|
||||
#include "lua_hook.h"
|
||||
|
|
@ -238,8 +239,8 @@ static void F_TitleBGScroll(INT32 scrollspeed)
|
|||
w = (vid.width / vid.dupx)<<FRACBITS;
|
||||
|
||||
// The scroll offset MUST be clamped before shifting by FRACBITS, or else it'll overflow in about 3 minutes
|
||||
animtimer = ((((finalecount * scrollspeed) % (SHORT(pat->width)*16))<<FRACBITS) + (rendertimefrac * scrollspeed))/16;
|
||||
anim2 = (SHORT(pat2->width)<<FRACBITS) - ((((finalecount * scrollspeed) % (SHORT(pat2->width)*16))<<FRACBITS) + (rendertimefrac * scrollspeed))/16;
|
||||
animtimer = ((((finalecount * scrollspeed) % (SHORT(pat->width)*16))<<FRACBITS) + (R_GetTimeFrac(RTF_MENU) * scrollspeed))/16;
|
||||
anim2 = (SHORT(pat2->width)<<FRACBITS) - ((((finalecount * scrollspeed) % (SHORT(pat2->width)*16))<<FRACBITS) + (R_GetTimeFrac(RTF_MENU) * scrollspeed))/16;
|
||||
|
||||
// SRB2Kart: F_DrawPatchCol is over-engineered; recoded to be less shitty and error-prone
|
||||
if (rendermode != render_none)
|
||||
|
|
@ -1220,7 +1221,7 @@ void F_SkyScroll(INT32 scrollxspeed, INT32 scrollyspeed, const char *patchname)
|
|||
tilex = max(FixedCeil(FixedDiv(vid.width, pw)) >> FRACBITS, 1)+2; // one tile on both sides of center
|
||||
tiley = max(FixedCeil(FixedDiv(vid.height, ph)) >> FRACBITS, 1)+2;
|
||||
|
||||
fracmenuanimtimer = (menuanimtimer * FRACUNIT) - (FRACUNIT - rendertimefrac);
|
||||
fracmenuanimtimer = (menuanimtimer * FRACUNIT) - (FRACUNIT - R_GetTimeFrac(RTF_MENU));
|
||||
xscrolltimer = ((fracmenuanimtimer*scrollxspeed)/16 + patwidth*xneg*FRACUNIT) % (patwidth * FRACUNIT);
|
||||
yscrolltimer = ((fracmenuanimtimer*scrollyspeed)/16 + patheight*yneg*FRACUNIT) % (patheight * FRACUNIT);
|
||||
|
||||
|
|
@ -1427,7 +1428,7 @@ void F_TitleScreenDrawer(void)
|
|||
if (finalecount >= 20)
|
||||
V_DrawSmallScaledPatch(84, 87, 0, ttkart);
|
||||
else if (finalecount >= 10)
|
||||
V_DrawSciencePatch((84<<FRACBITS) - 18*(((20 - finalecount)<<FRACBITS) - R_GetMenuUncap()), 87<<FRACBITS, 0, ttkart, FRACUNIT/2);
|
||||
V_DrawSciencePatch((84<<FRACBITS) - 18*(((20 - finalecount)<<FRACBITS) - R_GetTimeFrac(RTF_MENU)), 87<<FRACBITS, 0, ttkart, FRACUNIT/2);
|
||||
}
|
||||
else if (finalecount < 52)
|
||||
{
|
||||
|
|
@ -1443,8 +1444,8 @@ void F_TitleScreenDrawer(void)
|
|||
|
||||
F_TitleBGScroll(5);
|
||||
|
||||
V_DrawSciencePatch(0, -40*FixedDiv(((finalecount % 70)<<FRACBITS) + R_GetMenuUncap(), 70<<FRACBITS), V_SNAPTOTOP|V_SNAPTOLEFT, ttcheckers, FRACUNIT);
|
||||
V_DrawSciencePatch(280<<FRACBITS, -(40<<FRACBITS) + 40*FixedDiv(((finalecount % 70)<<FRACBITS) + R_GetMenuUncap(), 70<<FRACBITS), V_SNAPTOTOP|V_SNAPTORIGHT, ttcheckers, FRACUNIT);
|
||||
V_DrawSciencePatch(0, -40*FixedDiv(((finalecount % 70)<<FRACBITS) + R_GetTimeFrac(RTF_MENU), 70<<FRACBITS), V_SNAPTOTOP|V_SNAPTOLEFT, ttcheckers, FRACUNIT);
|
||||
V_DrawSciencePatch(280<<FRACBITS, -(40<<FRACBITS) + 40*FixedDiv(((finalecount % 70)<<FRACBITS) + R_GetTimeFrac(RTF_MENU), 70<<FRACBITS), V_SNAPTOTOP|V_SNAPTORIGHT, ttcheckers, FRACUNIT);
|
||||
|
||||
if (transval)
|
||||
V_DrawFadeScreen(0, 10 - transval);
|
||||
|
|
|
|||
|
|
@ -3136,14 +3136,7 @@ static void HWR_DrawDropShadow(mobj_t *thing, fixed_t scale)
|
|||
// uncapped/interpolation
|
||||
interpmobjstate_t interp = {0};
|
||||
|
||||
if (R_UsingFrameInterpolation() && !paused)
|
||||
{
|
||||
R_InterpolateMobjState(thing, rendertimefrac, &interp);
|
||||
}
|
||||
else
|
||||
{
|
||||
R_InterpolateMobjState(thing, FRACUNIT, &interp);
|
||||
}
|
||||
R_InterpolateMobjState(thing, R_GetTimeFrac(RTF_LEVEL), &interp);
|
||||
|
||||
// sprite offset
|
||||
interp.x += thing->sprxoff;
|
||||
|
|
@ -3262,27 +3255,13 @@ static void HWR_RotateSpritePolyToAim(gl_vissprite_t *spr, FOutVector *wallVerts
|
|||
interpmobjstate_t interp = {0};
|
||||
|
||||
// do interpolation
|
||||
if (R_UsingFrameInterpolation() && !paused)
|
||||
if (spr->precip)
|
||||
{
|
||||
if (spr->precip)
|
||||
{
|
||||
R_InterpolatePrecipMobjState((precipmobj_t *)spr->mobj, rendertimefrac, &interp);
|
||||
}
|
||||
else
|
||||
{
|
||||
R_InterpolateMobjState(spr->mobj, rendertimefrac, &interp);
|
||||
}
|
||||
R_InterpolatePrecipMobjState((precipmobj_t *)spr->mobj, R_GetTimeFrac(RTF_LEVEL), &interp);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (spr->precip)
|
||||
{
|
||||
R_InterpolatePrecipMobjState((precipmobj_t *)spr->mobj, FRACUNIT, &interp);
|
||||
}
|
||||
else
|
||||
{
|
||||
R_InterpolateMobjState(spr->mobj, FRACUNIT, &interp);
|
||||
}
|
||||
R_InterpolateMobjState(spr->mobj, R_GetTimeFrac(RTF_LEVEL), &interp);
|
||||
}
|
||||
|
||||
float basey = FIXED_TO_FLOAT(interp.z);
|
||||
|
|
@ -4741,14 +4720,7 @@ static void HWR_ProjectSprite(mobj_t *thing)
|
|||
if (!thing)
|
||||
return;
|
||||
|
||||
if (R_UsingFrameInterpolation() && !paused)
|
||||
{
|
||||
R_InterpolateMobjState(thing, rendertimefrac, &interp);
|
||||
}
|
||||
else
|
||||
{
|
||||
R_InterpolateMobjState(thing, FRACUNIT, &interp);
|
||||
}
|
||||
R_InterpolateMobjState(thing, R_GetTimeFrac(RTF_LEVEL), &interp);
|
||||
|
||||
dispoffset = thing->dispoffset;
|
||||
|
||||
|
|
@ -4946,14 +4918,7 @@ static void HWR_ProjectSprite(mobj_t *thing)
|
|||
fixed_t groundz;
|
||||
fixed_t floordiff;
|
||||
|
||||
if (R_UsingFrameInterpolation() && !paused)
|
||||
{
|
||||
R_InterpolateMobjState(caster, rendertimefrac, &casterinterp);
|
||||
}
|
||||
else
|
||||
{
|
||||
R_InterpolateMobjState(caster, FRACUNIT, &casterinterp);
|
||||
}
|
||||
R_InterpolateMobjState(caster, R_GetTimeFrac(RTF_LEVEL), &casterinterp);
|
||||
|
||||
groundz = R_GetShadowZ(thing, NULL);
|
||||
floordiff = abs(((thing->eflags & MFE_VERTICALFLIP) ? caster->height : 0) + casterinterp.z - groundz);
|
||||
|
|
@ -5052,14 +5017,7 @@ static void HWR_ProjectSprite(mobj_t *thing)
|
|||
if (! R_ThingVisible(thing->tracer))
|
||||
return;
|
||||
|
||||
if (R_UsingFrameInterpolation() && !paused)
|
||||
{
|
||||
R_InterpolateMobjState(thing->tracer, rendertimefrac, &tracer_interp);
|
||||
}
|
||||
else
|
||||
{
|
||||
R_InterpolateMobjState(thing->tracer, FRACUNIT, &tracer_interp);
|
||||
}
|
||||
R_InterpolateMobjState(thing->tracer, R_GetTimeFrac(RTF_LEVEL), &tracer_interp);
|
||||
|
||||
// calculate tz for tracer, same way it is calculated for this sprite
|
||||
// transform the origin point
|
||||
|
|
@ -5202,14 +5160,7 @@ static void HWR_ProjectPrecipitationSprite(precipmobj_t *thing)
|
|||
}
|
||||
|
||||
// do interpolation
|
||||
if (R_UsingFrameInterpolation() && !paused)
|
||||
{
|
||||
R_InterpolatePrecipMobjState(thing, rendertimefrac, &interp);
|
||||
}
|
||||
else
|
||||
{
|
||||
R_InterpolatePrecipMobjState(thing, FRACUNIT, &interp);
|
||||
}
|
||||
R_InterpolatePrecipMobjState(thing, R_GetTimeFrac(RTF_LEVEL), &interp);
|
||||
|
||||
this_scale = FIXED_TO_FLOAT(interp.scale);
|
||||
|
||||
|
|
@ -5323,14 +5274,7 @@ static void HWR_ProjectBoundingBox(mobj_t *thing)
|
|||
if (!R_ThingBoundingBoxVisible(thing))
|
||||
return;
|
||||
|
||||
if (R_UsingFrameInterpolation() && !paused)
|
||||
{
|
||||
R_InterpolateMobjState(thing, rendertimefrac, &interp);
|
||||
}
|
||||
else
|
||||
{
|
||||
R_InterpolateMobjState(thing, FRACUNIT, &interp);
|
||||
}
|
||||
R_InterpolateMobjState(thing, R_GetTimeFrac(RTF_LEVEL), &interp);
|
||||
|
||||
// transform the origin point
|
||||
tr_x = FIXED_TO_FLOAT(interp.x) - gl_viewx;
|
||||
|
|
@ -6445,7 +6389,7 @@ void HWR_DoPostProcessor(player_t *player)
|
|||
{
|
||||
// 10 by 10 grid. 2 coordinates (xy)
|
||||
float v[SCREENVERTS][SCREENVERTS][2];
|
||||
float disStart = (leveltime-1) + FIXED_TO_FLOAT(rendertimefrac);
|
||||
float disStart = (leveltime-1) + FIXED_TO_FLOAT(R_GetTimeFrac(RTF_LEVEL));
|
||||
|
||||
UINT8 x, y;
|
||||
INT32 WAVELENGTH;
|
||||
|
|
|
|||
|
|
@ -1426,14 +1426,7 @@ boolean HWR_DrawModel(gl_vissprite_t *spr)
|
|||
interpmobjstate_t interp;
|
||||
modeltype_t modeltype = MODELTYPE_SPRITE;
|
||||
|
||||
if (R_UsingFrameInterpolation() && !paused)
|
||||
{
|
||||
R_InterpolateMobjState(spr->mobj, rendertimefrac, &interp);
|
||||
}
|
||||
else
|
||||
{
|
||||
R_InterpolateMobjState(spr->mobj, FRACUNIT, &interp);
|
||||
}
|
||||
R_InterpolateMobjState(spr->mobj, R_GetTimeFrac(RTF_LEVEL), &interp);
|
||||
|
||||
// sprite offset
|
||||
interp.x += spr->mobj->sprxoff;
|
||||
|
|
@ -1611,7 +1604,7 @@ boolean HWR_DrawModel(gl_vissprite_t *spr)
|
|||
|
||||
#ifdef USE_MODEL_NEXTFRAME
|
||||
// Interpolate the model interpolation. (lol)
|
||||
tics -= FixedToFloat(rendertimefrac);
|
||||
tics -= FixedToFloat(R_GetTimeFrac(RTF_LEVEL));
|
||||
|
||||
#define INTERPOLERATION_LIMIT TICRATE/4
|
||||
if (
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
|
||||
#include <stdarg.h>
|
||||
#include <math.h>
|
||||
#include "../../r_local.h" // For rendertimefrac, used for the leveltime shader uniform
|
||||
#include "../../r_fps.h" // For R_GetTimeFrac, used for the leveltime shader uniform
|
||||
#include "r_opengl.h"
|
||||
#include "r_vbo.h"
|
||||
|
||||
|
|
@ -1053,7 +1053,7 @@ EXPORT void HWRAPI(SetShaderInfo) (hwdshaderinfo_t info, INT32 value)
|
|||
switch (info)
|
||||
{
|
||||
case HWD_SHADERINFO_LEVELTIME:
|
||||
shader_leveltime = (((float)(value-1)) + FIXED_TO_FLOAT(rendertimefrac)) / TICRATE;
|
||||
shader_leveltime = (((float)(value-1)) + FIXED_TO_FLOAT(R_GetTimeFrac(RTF_LEVEL))) / TICRATE;
|
||||
break;
|
||||
case HWD_SHADERINFO_LIGHT_X:
|
||||
shader_light_x = FixedToFloat(value);
|
||||
|
|
|
|||
|
|
@ -1422,7 +1422,7 @@ static void K_drawKartItem(void)
|
|||
|
||||
if (cv_fancyroulette.value && stplyr->itemroulette && !stplyr->deadtimer)
|
||||
{
|
||||
fixed_t frac = R_GetHudUncap();
|
||||
fixed_t frac = R_GetTimeFrac(RTF_LEVEL);
|
||||
UINT8 fancystep = (offset ? 6 : 10);
|
||||
fixed_t fancyoffset = (stplyr->itemroulette % 3)-1;
|
||||
|
||||
|
|
@ -4130,7 +4130,7 @@ static void K_drawBattleFullscreen(void)
|
|||
// fill in the fractional bits
|
||||
if (cardanim && cardanim != 164*FRACUNIT)
|
||||
{
|
||||
INT32 frac = R_GetHudUncap() * ((164 - stplyr->karthud[khud_cardanimation])/8 + 1);
|
||||
INT32 frac = R_GetTimeFrac(RTF_LEVEL) * ((164 - stplyr->karthud[khud_cardanimation])/8 + 1);
|
||||
if (stplyr->exiting)
|
||||
cardanim += frac;
|
||||
else
|
||||
|
|
|
|||
|
|
@ -595,7 +595,7 @@ void LUA_HUD_DrawList(huddrawlist_h list)
|
|||
{
|
||||
size_t i;
|
||||
size_t j = 0;
|
||||
fixed_t frac = R_UsingFrameInterpolation() ? rendertimefrac : FRACUNIT;
|
||||
fixed_t frac = R_GetTimeFrac(RTF_INTER);
|
||||
fixed_t lerpx = 0, lerpy = 0;
|
||||
drawitem_t *latchitem = NULL;
|
||||
drawitem_t *oldlatchitem = NULL;
|
||||
|
|
|
|||
37
src/r_fps.c
37
src/r_fps.c
|
|
@ -29,6 +29,9 @@
|
|||
#include "hardware/hw_main.h"
|
||||
#endif
|
||||
|
||||
// The fraction of a tic being drawn (for interpolation between two tics)
|
||||
static fixed_t rendertimefrac;
|
||||
|
||||
static CV_PossibleValue_t fpscap_cons_t[] = {
|
||||
#ifdef DEVELOP
|
||||
// Lower values are actually pretty useful for debugging interp problems!
|
||||
|
|
@ -67,9 +70,25 @@ UINT32 R_GetFramerateCap(void)
|
|||
return cv_fpscap.value;
|
||||
}
|
||||
|
||||
boolean R_UsingFrameInterpolation(void)
|
||||
// this wacky function exists now because rendertimefrac is stopped outside levels
|
||||
// just for the sake of the intermission background...
|
||||
fixed_t R_GetTimeFrac(timefrac_e level)
|
||||
{
|
||||
return (R_GetFramerateCap() != TICRATE || cv_timescale.value < FRACUNIT);
|
||||
// level interp. pauses if level isn't ticking
|
||||
if (level <= RTF_LEVEL && !G_GamestateUsesLevel())
|
||||
return FRACUNIT;
|
||||
|
||||
// intermission interp. keeps interp even if level isn't ticking, but pauses if game is paused
|
||||
if (level <= RTF_INTER && (paused || P_AutoPause()))
|
||||
return FRACUNIT;
|
||||
|
||||
// menu interp. interpolates no matter what
|
||||
return rendertimefrac;
|
||||
}
|
||||
|
||||
void R_SetTimeFrac(fixed_t frac)
|
||||
{
|
||||
rendertimefrac = frac;
|
||||
}
|
||||
|
||||
static viewvars_t pview_old[MAXSPLITSCREENPLAYERS];
|
||||
|
|
@ -252,22 +271,12 @@ void R_SetViewContext(enum viewcontext_e _viewcontext)
|
|||
|
||||
fixed_t R_InterpolateFixed(fixed_t from, fixed_t to)
|
||||
{
|
||||
if (!R_UsingFrameInterpolation())
|
||||
{
|
||||
return to;
|
||||
}
|
||||
|
||||
return (R_LerpFixed(from, to, rendertimefrac));
|
||||
return R_LerpFixed(from, to, R_GetTimeFrac(RTF_LEVEL));
|
||||
}
|
||||
|
||||
angle_t R_InterpolateAngle(angle_t from, angle_t to)
|
||||
{
|
||||
if (!R_UsingFrameInterpolation())
|
||||
{
|
||||
return to;
|
||||
}
|
||||
|
||||
return (R_LerpAngle(from, to, rendertimefrac));
|
||||
return R_LerpAngle(from, to, R_GetTimeFrac(RTF_LEVEL));
|
||||
}
|
||||
|
||||
void R_InterpolateMobjState(mobj_t *mobj, fixed_t frac, interpmobjstate_t *out)
|
||||
|
|
|
|||
10
src/r_fps.h
10
src/r_fps.h
|
|
@ -25,8 +25,16 @@ extern "C" {
|
|||
|
||||
extern consvar_t cv_fpscap;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
RTF_LEVEL,
|
||||
RTF_INTER,
|
||||
RTF_MENU,
|
||||
} timefrac_e;
|
||||
|
||||
UINT32 R_GetFramerateCap(void);
|
||||
boolean R_UsingFrameInterpolation(void);
|
||||
fixed_t R_GetTimeFrac(timefrac_e level);
|
||||
void R_SetTimeFrac(fixed_t frac);
|
||||
|
||||
enum viewcontext_e
|
||||
{
|
||||
|
|
|
|||
|
|
@ -78,8 +78,6 @@ mobj_t *r_viewmobj;
|
|||
|
||||
int r_splitscreen;
|
||||
|
||||
fixed_t rendertimefrac;
|
||||
fixed_t rendertimefrac_unpaused;
|
||||
fixed_t renderdeltatics;
|
||||
boolean renderisnewtic;
|
||||
|
||||
|
|
@ -377,16 +375,6 @@ angle_t R_PointToAngle2(fixed_t pviewx, fixed_t pviewy, fixed_t x, fixed_t y)
|
|||
0;
|
||||
}
|
||||
|
||||
INT32 R_GetHudUncap(void)
|
||||
{
|
||||
return rendertimefrac & FRACMASK;
|
||||
}
|
||||
|
||||
INT32 R_GetMenuUncap(void)
|
||||
{
|
||||
return rendertimefrac_unpaused & FRACMASK;
|
||||
}
|
||||
|
||||
//
|
||||
// R_ScaleFromGlobalAngle
|
||||
// Returns the texture mapping scale for the current line (horizontal span)
|
||||
|
|
@ -1223,7 +1211,7 @@ R_SetupCommonFrame
|
|||
else
|
||||
newview->sector = R_PointInSubsector(newview->x, newview->y)->sector;
|
||||
|
||||
R_InterpolateView(rendertimefrac_unpaused);
|
||||
R_InterpolateView(R_GetTimeFrac(RTF_LEVEL));
|
||||
}
|
||||
|
||||
static void R_SetupAimingFrame(int s)
|
||||
|
|
|
|||
|
|
@ -37,10 +37,6 @@ extern fixed_t fovtan[MAXSPLITSCREENPLAYERS];
|
|||
|
||||
extern size_t validcount, linecount, loopcount, framecount;
|
||||
|
||||
// The fraction of a tic being drawn (for interpolation between two tics)
|
||||
extern fixed_t rendertimefrac;
|
||||
// Same as rendertimefrac but not suspended when the game is paused
|
||||
extern fixed_t rendertimefrac_unpaused;
|
||||
// Evaluated delta tics for this frame (how many tics since the last frame)
|
||||
extern fixed_t renderdeltatics;
|
||||
// The current render is a new logical tic
|
||||
|
|
@ -215,11 +211,6 @@ void R_RenderPlayerView(void);
|
|||
// add commands related to engine, at game startup
|
||||
void R_RegisterEngineStuff(void);
|
||||
|
||||
// return multiplier for HUD uncap
|
||||
INT32 R_GetHudUncap(void);
|
||||
// same as above but keeps interpolation during pause
|
||||
INT32 R_GetMenuUncap(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1353,14 +1353,7 @@ fixed_t R_GetShadowZ(
|
|||
// for frame interpolation
|
||||
interpmobjstate_t interp = {0};
|
||||
|
||||
if (R_UsingFrameInterpolation() && !paused)
|
||||
{
|
||||
R_InterpolateMobjState(thing, rendertimefrac, &interp);
|
||||
}
|
||||
else
|
||||
{
|
||||
R_InterpolateMobjState(thing, FRACUNIT, &interp);
|
||||
}
|
||||
R_InterpolateMobjState(thing, R_GetTimeFrac(RTF_LEVEL), &interp);
|
||||
|
||||
halfHeight = interp.z + (thing->height >> 1);
|
||||
floorz = P_GetFloorZ(thing, interp.subsector->sector, interp.x, interp.y, NULL);
|
||||
|
|
@ -1428,14 +1421,7 @@ static void R_SkewShadowSprite(
|
|||
// for frame interpolation
|
||||
interpmobjstate_t interp = {0};
|
||||
|
||||
if (R_UsingFrameInterpolation() && !paused)
|
||||
{
|
||||
R_InterpolateMobjState(thing, rendertimefrac, &interp);
|
||||
}
|
||||
else
|
||||
{
|
||||
R_InterpolateMobjState(thing, FRACUNIT, &interp);
|
||||
}
|
||||
R_InterpolateMobjState(thing, R_GetTimeFrac(RTF_LEVEL), &interp);
|
||||
|
||||
sloperelang = (R_PointToAngle(interp.x, interp.y) - groundslope->xydirection) >> ANGLETOFINESHIFT;
|
||||
|
||||
|
|
@ -1470,14 +1456,7 @@ static void R_ProjectDropShadow(
|
|||
|
||||
if (abs(groundz-viewz)/tz > 4) return; // Prevent stretchy shadows and possible crashes
|
||||
|
||||
if (R_UsingFrameInterpolation() && !paused)
|
||||
{
|
||||
R_InterpolateMobjState(thing, rendertimefrac, &interp);
|
||||
}
|
||||
else
|
||||
{
|
||||
R_InterpolateMobjState(thing, FRACUNIT, &interp);
|
||||
}
|
||||
R_InterpolateMobjState(thing, R_GetTimeFrac(RTF_LEVEL), &interp);
|
||||
|
||||
if (shadowpatch == NULL)
|
||||
{
|
||||
|
|
@ -1584,14 +1563,7 @@ static void R_ProjectBoundingBox(mobj_t *thing, vissprite_t *vis)
|
|||
}
|
||||
|
||||
// do interpolation
|
||||
if (R_UsingFrameInterpolation() && !paused)
|
||||
{
|
||||
R_InterpolateMobjState(thing, rendertimefrac, &interp);
|
||||
}
|
||||
else
|
||||
{
|
||||
R_InterpolateMobjState(thing, FRACUNIT, &interp);
|
||||
}
|
||||
R_InterpolateMobjState(thing, R_GetTimeFrac(RTF_LEVEL), &interp);
|
||||
|
||||
// 1--3
|
||||
// | |
|
||||
|
|
@ -1781,14 +1753,7 @@ static void R_ProjectSprite(mobj_t *thing)
|
|||
}
|
||||
|
||||
// do interpolation
|
||||
if (R_UsingFrameInterpolation() && !paused)
|
||||
{
|
||||
R_InterpolateMobjState(interptarg, rendertimefrac, &interp);
|
||||
}
|
||||
else
|
||||
{
|
||||
R_InterpolateMobjState(interptarg, FRACUNIT, &interp);
|
||||
}
|
||||
R_InterpolateMobjState(interptarg, R_GetTimeFrac(RTF_LEVEL), &interp);
|
||||
|
||||
this_scale = interp.scale;
|
||||
|
||||
|
|
@ -2128,14 +2093,7 @@ static void R_ProjectSprite(mobj_t *thing)
|
|||
|
||||
thing = thing->tracer;
|
||||
|
||||
if (R_UsingFrameInterpolation() && !paused)
|
||||
{
|
||||
R_InterpolateMobjState(thing, rendertimefrac, &tracer_interp);
|
||||
}
|
||||
else
|
||||
{
|
||||
R_InterpolateMobjState(thing, FRACUNIT, &tracer_interp);
|
||||
}
|
||||
R_InterpolateMobjState(thing, R_GetTimeFrac(RTF_LEVEL), &tracer_interp);
|
||||
|
||||
// sprite offset
|
||||
tracer_interp.x += thing->sprxoff;
|
||||
|
|
@ -2540,14 +2498,7 @@ static void R_ProjectPrecipitationSprite(precipmobj_t *thing)
|
|||
}
|
||||
|
||||
// do interpolation
|
||||
if (R_UsingFrameInterpolation() && !paused)
|
||||
{
|
||||
R_InterpolatePrecipMobjState(thing, rendertimefrac, &interp);
|
||||
}
|
||||
else
|
||||
{
|
||||
R_InterpolatePrecipMobjState(thing, FRACUNIT, &interp);
|
||||
}
|
||||
R_InterpolatePrecipMobjState(thing, R_GetTimeFrac(RTF_LEVEL), &interp);
|
||||
|
||||
this_scale = interp.scale;
|
||||
|
||||
|
|
|
|||
|
|
@ -651,7 +651,7 @@ void SCR_ClosedCaptions(void)
|
|||
if (closedcaptions[i].b) // If the caption hasn't reached its final destination...
|
||||
{
|
||||
y -= closedcaptions[i].b * 4 * FRACUNIT; // ...move it per tic...
|
||||
y += (rendertimefrac % FRACUNIT) * 4; // ...and interpolate it per frame
|
||||
y += (R_GetTimeFrac(RTF_MENU)) * 4; // ...and interpolate it per frame
|
||||
// We have to modulo it by FRACUNIT, so that it won't be a tic ahead with interpolation disabled
|
||||
// Unlike everything else, captions are (intentionally) interpolated from T to T+1 instead of T-1 to T
|
||||
}
|
||||
|
|
|
|||
|
|
@ -673,7 +673,7 @@ void ST_drawTitleCard(void)
|
|||
|
||||
// uh... "fill in the bits" of sub, or something... no idea what I came up with
|
||||
// VERY janky, but doesn't require m_easing
|
||||
INT32 frac = (FixedMul(R_GetHudUncap(), FixedDiv(dupcalc, BASEVIDWIDTH)) >> (count + 4))/13; // these two magic numbers seem to do the trick
|
||||
INT32 frac = (FixedMul(R_GetTimeFrac(RTF_LEVEL), FixedDiv(dupcalc, BASEVIDWIDTH)) >> (count + 4))/13; // these two magic numbers seem to do the trick
|
||||
|
||||
sub = dupcalc;
|
||||
while (count-- > 0)
|
||||
|
|
@ -959,7 +959,7 @@ void ST_Drawer(void)
|
|||
stplyr = &players[displayplayers[i]];
|
||||
stplyrnum = i;
|
||||
R_SetViewContext(VIEWCONTEXT_PLAYER1 + i);
|
||||
R_InterpolateView(rendertimefrac); // to assist with object tracking
|
||||
R_InterpolateView(R_GetTimeFrac(RTF_LEVEL)); // to assist with object tracking
|
||||
ST_overlayDrawer();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1850,9 +1850,8 @@ void V_DrawVhsEffect(boolean rewind)
|
|||
if (rewind)
|
||||
V_DrawVhsEffect(false); // experimentation
|
||||
|
||||
fixed_t frac = R_UsingFrameInterpolation() ? renderdeltatics : FRACUNIT;
|
||||
upbary -= frac * (vid.dupy * (rewind ? 3 : 1.8f));
|
||||
downbary += frac * (vid.dupy * (rewind ? 2 : 1));
|
||||
upbary -= renderdeltatics * (vid.dupy * (rewind ? 3 : 1.8f));
|
||||
downbary += renderdeltatics * (vid.dupy * (rewind ? 2 : 1));
|
||||
|
||||
if (upbary < -barsize*FRACUNIT) upbary = vid.height<<FRACBITS;
|
||||
if (downbary > vid.height<<FRACBITS) downbary = -barsize*FRACUNIT;
|
||||
|
|
@ -3588,7 +3587,7 @@ void V_DoPostProcessor(INT32 view, INT32 param)
|
|||
{
|
||||
INT32 y;
|
||||
// Set disStart to a range from 0 to FINEANGLE, incrementing by 128 per tic
|
||||
angle_t disStart = (((leveltime-1)*128) + (rendertimefrac / (FRACUNIT/128))) & FINEMASK;
|
||||
angle_t disStart = (((leveltime-1)*128) + (R_GetTimeFrac(RTF_LEVEL) / (FRACUNIT/128))) & FINEMASK;
|
||||
INT32 newpix;
|
||||
INT32 sine;
|
||||
//UINT8 *transme = R_GetTranslucencyTable(tr_trans50);
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@
|
|||
#include "k_pwrlv.h"
|
||||
#include "console.h" // cons_menuhighlight
|
||||
#include "k_grandprix.h"
|
||||
#include "r_fps.h" // R_GetTimeFrac
|
||||
|
||||
#ifdef HWRENDER
|
||||
#include "hardware/hw_main.h"
|
||||
|
|
@ -445,11 +446,11 @@ void Y_IntermissionDrawer(void)
|
|||
INT32 count = (intertic - sorttic);
|
||||
|
||||
if (count < 8)
|
||||
x -= ((((count<<FRACBITS) + R_GetHudUncap()) * vid.width)>>FRACBITS) / (8 * vid.dupx);
|
||||
x -= ((((count<<FRACBITS) + R_GetTimeFrac(RTF_INTER)) * vid.width)>>FRACBITS) / (8 * vid.dupx);
|
||||
else if (count == 8)
|
||||
goto skiptallydrawer;
|
||||
else if (count < 16)
|
||||
x += (((((16 - count)<<FRACBITS) - R_GetHudUncap()) * vid.width)>>FRACBITS) / (8 * vid.dupx);
|
||||
x += (((((16 - count)<<FRACBITS) - R_GetTimeFrac(RTF_INTER)) * vid.width)>>FRACBITS) / (8 * vid.dupx);
|
||||
}
|
||||
|
||||
if (intertype == int_race || intertype == int_battle || intertype == int_battletime)
|
||||
|
|
|
|||
Loading…
Reference in a new issue