[sw] Clean up R_SetSkyFrame a little

Move the constant data into R_InitSky so it doesn't get calculated every
frame (doesn't make much difference of course, but...)
This commit is contained in:
Bill Currie 2022-03-17 13:37:21 +09:00
parent d8a4c8dbe9
commit 6c29904b1d
4 changed files with 17 additions and 14 deletions

View file

@ -75,6 +75,8 @@ extern float d_sdivzstepu, d_tdivzstepu, d_zistepu;
extern float d_sdivzstepv, d_tdivzstepv, d_zistepv;
extern float d_sdivzorigin, d_tdivzorigin, d_ziorigin;
extern float d_skyoffs;
extern fixed16_t sadjust, tadjust;
extern fixed16_t bbextents, bbextentt;

View file

@ -93,6 +93,8 @@ D_SetupFrame (void)
d_scalemip[i] = basemip[i] * d_mipscale->value;
d_drawspans = D_DrawSpans8;
d_skyoffs = r_skytime * r_skyspeed;
}
void

View file

@ -36,6 +36,7 @@
#define SKY_SPAN_SHIFT 5
#define SKY_SPAN_MAX (1 << SKY_SPAN_SHIFT)
float d_skyoffs;
static void
D_Sky_uv_To_st (int u, int v, fixed16_t *s, fixed16_t *t)
@ -59,9 +60,8 @@ D_Sky_uv_To_st (int u, int v, fixed16_t *s, fixed16_t *t)
end[2] *= 3;
VectorNormalize (end);
temp = r_skytime * r_skyspeed; // TODO: add D_SetupFrame & set this there
*s = (int) ((temp + 6 * (SKYSIZE / 2 - 1) * end[0]) * 0x10000);
*t = (int) ((temp + 6 * (SKYSIZE / 2 - 1) * end[1]) * 0x10000);
*s = (int) ((d_skyoffs + 6 * (SKYSIZE / 2 - 1) * end[0]) * 0x10000);
*t = (int) ((d_skyoffs + 6 * (SKYSIZE / 2 - 1) * end[1]) * 0x10000);
}
void

View file

@ -35,6 +35,7 @@
static int iskyspeed = 8;
static int iskyspeed2 = 2;
static float r_skyperiod;
float r_skyspeed;
float r_skytime;
@ -64,6 +65,13 @@ R_InitSky (texture_t *mt)
int i, j;
byte *src;
int g = GreatestCommonDivisor (iskyspeed, iskyspeed2);
int s1 = iskyspeed / g;
int s2 = iskyspeed2 / g;
r_skyperiod = SKYSIZE * s1 * s2;
r_skyspeed = iskyspeed;
src = (byte *) mt + mt->offsets[0];
for (i = 0; i < 128; i++) {
@ -174,17 +182,8 @@ R_GenSkyTile (void *pdest)
void
R_SetSkyFrame (void)
{
int g, s1, s2;
float temp;
r_skyspeed = iskyspeed;
g = GreatestCommonDivisor (iskyspeed, iskyspeed2);
s1 = iskyspeed / g;
s2 = iskyspeed2 / g;
temp = SKYSIZE * s1 * s2;
r_skytime = vr_data.realtime - ((int) (vr_data.realtime / temp) * temp);
r_skytime = vr_data.realtime;
r_skytime -= trunc (vr_data.realtime / r_skyperiod) * r_skyperiod;
r_skymade = 0;
}