mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-02-19 18:41:28 +00:00
Add missing optimization to npo2 sloped floor sprites
This commit is contained in:
parent
93512ae9f9
commit
49d03913d7
1 changed files with 42 additions and 30 deletions
|
@ -992,6 +992,9 @@ void R_DrawTiltedFloorSprite_NPO2_8(void)
|
||||||
double endz, endu, endv;
|
double endz, endu, endv;
|
||||||
UINT32 stepu, stepv;
|
UINT32 stepu, stepv;
|
||||||
|
|
||||||
|
struct libdivide_u32_t x_divider = libdivide_u32_gen(ds_flatwidth);
|
||||||
|
struct libdivide_u32_t y_divider = libdivide_u32_gen(ds_flatheight);
|
||||||
|
|
||||||
iz = ds_szp->z + ds_szp->y*(centery-ds_y) + ds_szp->x*(ds_x1-centerx);
|
iz = ds_szp->z + ds_szp->y*(centery-ds_y) + ds_szp->x*(ds_x1-centerx);
|
||||||
uz = ds_sup->z + ds_sup->y*(centery-ds_y) + ds_sup->x*(ds_x1-centerx);
|
uz = ds_sup->z + ds_sup->y*(centery-ds_y) + ds_sup->x*(ds_x1-centerx);
|
||||||
vz = ds_svp->z + ds_svp->y*(centery-ds_y) + ds_svp->x*(ds_x1-centerx);
|
vz = ds_svp->z + ds_svp->y*(centery-ds_y) + ds_svp->x*(ds_x1-centerx);
|
||||||
|
@ -1033,12 +1036,13 @@ void R_DrawTiltedFloorSprite_NPO2_8(void)
|
||||||
|
|
||||||
// Carefully align all of my Friends.
|
// Carefully align all of my Friends.
|
||||||
if (x < 0)
|
if (x < 0)
|
||||||
x = ds_flatwidth - ((UINT32)(ds_flatwidth - x) % ds_flatwidth);
|
x += (libdivide_u32_do((UINT32)(-x-1), &x_divider) + 1) * ds_flatwidth;
|
||||||
|
else
|
||||||
|
x -= libdivide_u32_do((UINT32)x, &x_divider) * ds_flatwidth;
|
||||||
if (y < 0)
|
if (y < 0)
|
||||||
y = ds_flatheight - ((UINT32)(ds_flatheight - y) % ds_flatheight);
|
y += (libdivide_u32_do((UINT32)(-y-1), &y_divider) + 1) * ds_flatheight;
|
||||||
|
else
|
||||||
x %= ds_flatwidth;
|
y -= libdivide_u32_do((UINT32)y, &y_divider) * ds_flatheight;
|
||||||
y %= ds_flatheight;
|
|
||||||
|
|
||||||
val = source[((y * ds_flatwidth) + x)];
|
val = source[((y * ds_flatwidth) + x)];
|
||||||
if (val & 0xFF00)
|
if (val & 0xFF00)
|
||||||
|
@ -1065,12 +1069,13 @@ void R_DrawTiltedFloorSprite_NPO2_8(void)
|
||||||
|
|
||||||
// Carefully align all of my Friends.
|
// Carefully align all of my Friends.
|
||||||
if (x < 0)
|
if (x < 0)
|
||||||
x = ds_flatwidth - ((UINT32)(ds_flatwidth - x) % ds_flatwidth);
|
x += (libdivide_u32_do((UINT32)(-x-1), &x_divider) + 1) * ds_flatwidth;
|
||||||
|
else
|
||||||
|
x -= libdivide_u32_do((UINT32)x, &x_divider) * ds_flatwidth;
|
||||||
if (y < 0)
|
if (y < 0)
|
||||||
y = ds_flatheight - ((UINT32)(ds_flatheight - y) % ds_flatheight);
|
y += (libdivide_u32_do((UINT32)(-y-1), &y_divider) + 1) * ds_flatheight;
|
||||||
|
else
|
||||||
x %= ds_flatwidth;
|
y -= libdivide_u32_do((UINT32)y, &y_divider) * ds_flatheight;
|
||||||
y %= ds_flatheight;
|
|
||||||
|
|
||||||
val = source[((y * ds_flatwidth) + x)];
|
val = source[((y * ds_flatwidth) + x)];
|
||||||
if (val & 0xFF00)
|
if (val & 0xFF00)
|
||||||
|
@ -1101,12 +1106,13 @@ void R_DrawTiltedFloorSprite_NPO2_8(void)
|
||||||
|
|
||||||
// Carefully align all of my Friends.
|
// Carefully align all of my Friends.
|
||||||
if (x < 0)
|
if (x < 0)
|
||||||
x = ds_flatwidth - ((UINT32)(ds_flatwidth - x) % ds_flatwidth);
|
x += (libdivide_u32_do((UINT32)(-x-1), &x_divider) + 1) * ds_flatwidth;
|
||||||
|
else
|
||||||
|
x -= libdivide_u32_do((UINT32)x, &x_divider) * ds_flatwidth;
|
||||||
if (y < 0)
|
if (y < 0)
|
||||||
y = ds_flatheight - ((UINT32)(ds_flatheight - y) % ds_flatheight);
|
y += (libdivide_u32_do((UINT32)(-y-1), &y_divider) + 1) * ds_flatheight;
|
||||||
|
else
|
||||||
x %= ds_flatwidth;
|
y -= libdivide_u32_do((UINT32)y, &y_divider) * ds_flatheight;
|
||||||
y %= ds_flatheight;
|
|
||||||
|
|
||||||
val = source[((y * ds_flatwidth) + x)];
|
val = source[((y * ds_flatwidth) + x)];
|
||||||
if (val & 0xFF00)
|
if (val & 0xFF00)
|
||||||
|
@ -1142,6 +1148,9 @@ void R_DrawTiltedTranslucentFloorSprite_NPO2_8(void)
|
||||||
double endz, endu, endv;
|
double endz, endu, endv;
|
||||||
UINT32 stepu, stepv;
|
UINT32 stepu, stepv;
|
||||||
|
|
||||||
|
struct libdivide_u32_t x_divider = libdivide_u32_gen(ds_flatwidth);
|
||||||
|
struct libdivide_u32_t y_divider = libdivide_u32_gen(ds_flatheight);
|
||||||
|
|
||||||
iz = ds_szp->z + ds_szp->y*(centery-ds_y) + ds_szp->x*(ds_x1-centerx);
|
iz = ds_szp->z + ds_szp->y*(centery-ds_y) + ds_szp->x*(ds_x1-centerx);
|
||||||
uz = ds_sup->z + ds_sup->y*(centery-ds_y) + ds_sup->x*(ds_x1-centerx);
|
uz = ds_sup->z + ds_sup->y*(centery-ds_y) + ds_sup->x*(ds_x1-centerx);
|
||||||
vz = ds_svp->z + ds_svp->y*(centery-ds_y) + ds_svp->x*(ds_x1-centerx);
|
vz = ds_svp->z + ds_svp->y*(centery-ds_y) + ds_svp->x*(ds_x1-centerx);
|
||||||
|
@ -1183,12 +1192,13 @@ void R_DrawTiltedTranslucentFloorSprite_NPO2_8(void)
|
||||||
|
|
||||||
// Carefully align all of my Friends.
|
// Carefully align all of my Friends.
|
||||||
if (x < 0)
|
if (x < 0)
|
||||||
x = ds_flatwidth - ((UINT32)(ds_flatwidth - x) % ds_flatwidth);
|
x += (libdivide_u32_do((UINT32)(-x-1), &x_divider) + 1) * ds_flatwidth;
|
||||||
|
else
|
||||||
|
x -= libdivide_u32_do((UINT32)x, &x_divider) * ds_flatwidth;
|
||||||
if (y < 0)
|
if (y < 0)
|
||||||
y = ds_flatheight - ((UINT32)(ds_flatheight - y) % ds_flatheight);
|
y += (libdivide_u32_do((UINT32)(-y-1), &y_divider) + 1) * ds_flatheight;
|
||||||
|
else
|
||||||
x %= ds_flatwidth;
|
y -= libdivide_u32_do((UINT32)y, &y_divider) * ds_flatheight;
|
||||||
y %= ds_flatheight;
|
|
||||||
|
|
||||||
val = source[((y * ds_flatwidth) + x)];
|
val = source[((y * ds_flatwidth) + x)];
|
||||||
if (val & 0xFF00)
|
if (val & 0xFF00)
|
||||||
|
@ -1215,12 +1225,13 @@ void R_DrawTiltedTranslucentFloorSprite_NPO2_8(void)
|
||||||
|
|
||||||
// Carefully align all of my Friends.
|
// Carefully align all of my Friends.
|
||||||
if (x < 0)
|
if (x < 0)
|
||||||
x = ds_flatwidth - ((UINT32)(ds_flatwidth - x) % ds_flatwidth);
|
x += (libdivide_u32_do((UINT32)(-x-1), &x_divider) + 1) * ds_flatwidth;
|
||||||
|
else
|
||||||
|
x -= libdivide_u32_do((UINT32)x, &x_divider) * ds_flatwidth;
|
||||||
if (y < 0)
|
if (y < 0)
|
||||||
y = ds_flatheight - ((UINT32)(ds_flatheight - y) % ds_flatheight);
|
y += (libdivide_u32_do((UINT32)(-y-1), &y_divider) + 1) * ds_flatheight;
|
||||||
|
else
|
||||||
x %= ds_flatwidth;
|
y -= libdivide_u32_do((UINT32)y, &y_divider) * ds_flatheight;
|
||||||
y %= ds_flatheight;
|
|
||||||
|
|
||||||
val = source[((y * ds_flatwidth) + x)];
|
val = source[((y * ds_flatwidth) + x)];
|
||||||
if (val & 0xFF00)
|
if (val & 0xFF00)
|
||||||
|
@ -1251,12 +1262,13 @@ void R_DrawTiltedTranslucentFloorSprite_NPO2_8(void)
|
||||||
|
|
||||||
// Carefully align all of my Friends.
|
// Carefully align all of my Friends.
|
||||||
if (x < 0)
|
if (x < 0)
|
||||||
x = ds_flatwidth - ((UINT32)(ds_flatwidth - x) % ds_flatwidth);
|
x += (libdivide_u32_do((UINT32)(-x-1), &x_divider) + 1) * ds_flatwidth;
|
||||||
|
else
|
||||||
|
x -= libdivide_u32_do((UINT32)x, &x_divider) * ds_flatwidth;
|
||||||
if (y < 0)
|
if (y < 0)
|
||||||
y = ds_flatheight - ((UINT32)(ds_flatheight - y) % ds_flatheight);
|
y += (libdivide_u32_do((UINT32)(-y-1), &y_divider) + 1) * ds_flatheight;
|
||||||
|
else
|
||||||
x %= ds_flatwidth;
|
y -= libdivide_u32_do((UINT32)y, &y_divider) * ds_flatheight;
|
||||||
y %= ds_flatheight;
|
|
||||||
|
|
||||||
val = source[((y * ds_flatwidth) + x)];
|
val = source[((y * ds_flatwidth) + x)];
|
||||||
if (val & 0xFF00)
|
if (val & 0xFF00)
|
||||||
|
|
Loading…
Reference in a new issue