mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-15 01:01:33 +00:00
Delete global lengthcol
This commit is contained in:
parent
feffdb373b
commit
1ccc04c53f
3 changed files with 43 additions and 45 deletions
30
src/r_segs.c
30
src/r_segs.c
|
@ -109,12 +109,13 @@ void R_RenderMaskedSegRange(drawseg_t *ds, INT32 x1, INT32 x2)
|
|||
fixed_t height, realbot;
|
||||
lightlist_t *light;
|
||||
r_lightlist_t *rlight;
|
||||
void (*colfunc_2s)(column_t *);
|
||||
void (*colfunc_2s)(column_t *, unsigned);
|
||||
line_t *ldef;
|
||||
sector_t *front, *back;
|
||||
INT32 times, repeats;
|
||||
INT64 overflow_test;
|
||||
INT32 range;
|
||||
unsigned lengthcol;
|
||||
|
||||
// Calculate light table.
|
||||
// Use different light tables
|
||||
|
@ -391,7 +392,7 @@ void R_RenderMaskedSegRange(drawseg_t *ds, INT32 x1, INT32 x2)
|
|||
if (windowbottom >= realbot)
|
||||
{
|
||||
windowbottom = realbot;
|
||||
colfunc_2s(col);
|
||||
colfunc_2s(col, lengthcol);
|
||||
for (i++; i < dc_numlights; i++)
|
||||
{
|
||||
rlight = &dc_lightlist[i];
|
||||
|
@ -400,13 +401,13 @@ void R_RenderMaskedSegRange(drawseg_t *ds, INT32 x1, INT32 x2)
|
|||
|
||||
continue;
|
||||
}
|
||||
colfunc_2s(col);
|
||||
colfunc_2s(col, lengthcol);
|
||||
windowtop = windowbottom + 1;
|
||||
dc_colormap = rlight->rcolormap;
|
||||
}
|
||||
windowbottom = realbot;
|
||||
if (windowtop < windowbottom)
|
||||
colfunc_2s(col);
|
||||
colfunc_2s(col, lengthcol);
|
||||
|
||||
spryscale += rw_scalestep;
|
||||
continue;
|
||||
|
@ -428,7 +429,7 @@ void R_RenderMaskedSegRange(drawseg_t *ds, INT32 x1, INT32 x2)
|
|||
|
||||
// draw the texture
|
||||
col = R_GetColumn(texnum, maskedtexturecol[dc_x] >> FRACBITS);
|
||||
colfunc_2s(col);
|
||||
colfunc_2s(col, lengthcol);
|
||||
|
||||
spryscale += rw_scalestep;
|
||||
}
|
||||
|
@ -437,10 +438,10 @@ void R_RenderMaskedSegRange(drawseg_t *ds, INT32 x1, INT32 x2)
|
|||
}
|
||||
|
||||
// Loop through R_DrawMaskedColumn calls
|
||||
static void R_DrawRepeatMaskedColumn(column_t *col)
|
||||
static void R_DrawRepeatMaskedColumn(column_t *col, unsigned lengthcol)
|
||||
{
|
||||
while (sprtopscreen < sprbotscreen) {
|
||||
R_DrawMaskedColumn(col);
|
||||
R_DrawMaskedColumn(col, lengthcol);
|
||||
if ((INT64)sprtopscreen + dc_texheight*spryscale > (INT64)INT32_MAX) // prevent overflow
|
||||
sprtopscreen = INT32_MAX;
|
||||
else
|
||||
|
@ -448,10 +449,10 @@ static void R_DrawRepeatMaskedColumn(column_t *col)
|
|||
}
|
||||
}
|
||||
|
||||
static void R_DrawRepeatFlippedMaskedColumn(column_t *col)
|
||||
static void R_DrawRepeatFlippedMaskedColumn(column_t *col, unsigned lengthcol)
|
||||
{
|
||||
do {
|
||||
R_DrawFlippedMaskedColumn(col);
|
||||
R_DrawFlippedMaskedColumn(col, lengthcol);
|
||||
sprtopscreen += dc_texheight*spryscale;
|
||||
} while (sprtopscreen < sprbotscreen);
|
||||
}
|
||||
|
@ -502,8 +503,9 @@ void R_RenderThickSideRange(drawseg_t *ds, INT32 x1, INT32 x2, ffloor_t *pfloor)
|
|||
boolean do_texture_skew;
|
||||
INT16 lineflags;
|
||||
fixed_t wall_scalex, wall_scaley;
|
||||
unsigned lengthcol;
|
||||
|
||||
void (*colfunc_2s) (column_t *);
|
||||
void (*colfunc_2s) (column_t *, unsigned);
|
||||
|
||||
// Calculate light table.
|
||||
// Use different light tables
|
||||
|
@ -901,7 +903,7 @@ void R_RenderThickSideRange(drawseg_t *ds, INT32 x1, INT32 x2, ffloor_t *pfloor)
|
|||
{
|
||||
windowbottom = sprbotscreen;
|
||||
// draw the texture
|
||||
colfunc_2s (col);
|
||||
colfunc_2s (col, lengthcol);
|
||||
for (i++; i < dc_numlights; i++)
|
||||
{
|
||||
rlight = &dc_lightlist[i];
|
||||
|
@ -912,7 +914,7 @@ void R_RenderThickSideRange(drawseg_t *ds, INT32 x1, INT32 x2, ffloor_t *pfloor)
|
|||
continue;
|
||||
}
|
||||
// draw the texture
|
||||
colfunc_2s (col);
|
||||
colfunc_2s (col, lengthcol);
|
||||
if (solid)
|
||||
windowtop = bheight;
|
||||
else
|
||||
|
@ -923,7 +925,7 @@ void R_RenderThickSideRange(drawseg_t *ds, INT32 x1, INT32 x2, ffloor_t *pfloor)
|
|||
windowbottom = sprbotscreen;
|
||||
// draw the texture, if there is any space left
|
||||
if (windowtop < windowbottom)
|
||||
colfunc_2s (col);
|
||||
colfunc_2s (col, lengthcol);
|
||||
|
||||
spryscale += rw_scalestep;
|
||||
continue;
|
||||
|
@ -943,7 +945,7 @@ void R_RenderThickSideRange(drawseg_t *ds, INT32 x1, INT32 x2, ffloor_t *pfloor)
|
|||
dc_colormap = frontsector->extra_colormap->colormap + (dc_colormap - colormaps);
|
||||
|
||||
// draw the texture
|
||||
colfunc_2s (col);
|
||||
colfunc_2s (col, lengthcol);
|
||||
spryscale += rw_scalestep;
|
||||
}
|
||||
colfunc = colfuncs[BASEDRAWFUNC];
|
||||
|
|
|
@ -634,10 +634,12 @@ INT16 *mceilingclip;
|
|||
fixed_t spryscale = 0, sprtopscreen = 0, sprbotscreen = 0;
|
||||
fixed_t windowtop = 0, windowbottom = 0;
|
||||
|
||||
void R_DrawMaskedColumn(column_t *column)
|
||||
void R_DrawMaskedColumn(column_t *column, unsigned lengthcol)
|
||||
{
|
||||
fixed_t basetexturemid = dc_texturemid;
|
||||
|
||||
(void)lengthcol;
|
||||
|
||||
for (unsigned i = 0; i < column->num_posts; i++)
|
||||
{
|
||||
post_t *post = &column->posts[i];
|
||||
|
@ -670,25 +672,17 @@ void R_DrawMaskedColumn(column_t *column)
|
|||
dc_source = column->pixels + post->data_offset;
|
||||
dc_texturemid = basetexturemid - (post->topdelta<<FRACBITS);
|
||||
|
||||
// Drawn by R_DrawColumn.
|
||||
// This stuff is a likely cause of the splitscreen water crash bug.
|
||||
// FIXTHIS: Figure out what "something more proper" is and do it.
|
||||
// quick fix... something more proper should be done!!!
|
||||
if (ylookup[dc_yl])
|
||||
colfunc();
|
||||
#ifdef PARANOIA
|
||||
else
|
||||
I_Error("R_DrawMaskedColumn: Invalid ylookup for dc_yl %d", dc_yl);
|
||||
#endif
|
||||
colfunc();
|
||||
}
|
||||
}
|
||||
|
||||
dc_texturemid = basetexturemid;
|
||||
}
|
||||
|
||||
INT32 lengthcol; // column->length : for flipped column function pointers and multi-patch on 2sided wall = texture->height
|
||||
static UINT8 *flippedcol = NULL;
|
||||
static size_t flippedcolsize = 0;
|
||||
|
||||
void R_DrawFlippedMaskedColumn(column_t *column)
|
||||
void R_DrawFlippedMaskedColumn(column_t *column, unsigned lengthcol)
|
||||
{
|
||||
INT32 topscreen;
|
||||
INT32 bottomscreen;
|
||||
|
@ -698,6 +692,9 @@ void R_DrawFlippedMaskedColumn(column_t *column)
|
|||
for (unsigned i = 0; i < column->num_posts; i++)
|
||||
{
|
||||
post_t *post = &column->posts[i];
|
||||
if (!post->length)
|
||||
continue;
|
||||
|
||||
INT32 topdelta = lengthcol-post->length-post->topdelta;
|
||||
topscreen = sprtopscreen + spryscale*topdelta;
|
||||
bottomscreen = sprbotscreen == INT32_MAX ? topscreen + spryscale*post->length
|
||||
|
@ -725,19 +722,18 @@ void R_DrawFlippedMaskedColumn(column_t *column)
|
|||
|
||||
if (dc_yl <= dc_yh && dc_yh > 0)
|
||||
{
|
||||
dc_source = ZZ_Alloc(post->length);
|
||||
for (s = column->pixels+post->data_offset+post->length, d = dc_source; d < dc_source+post->length; --s)
|
||||
if (post->length > flippedcolsize)
|
||||
{
|
||||
flippedcolsize = post->length;
|
||||
flippedcol = Z_Realloc(flippedcol, flippedcolsize, PU_STATIC, NULL);
|
||||
}
|
||||
|
||||
for (s = column->pixels+post->data_offset+post->length, d = flippedcol; d < flippedcol+post->length; --s)
|
||||
*d++ = *s;
|
||||
dc_source = flippedcol;
|
||||
dc_texturemid = basetexturemid - (topdelta<<FRACBITS);
|
||||
|
||||
// Still drawn by R_DrawColumn.
|
||||
if (ylookup[dc_yl])
|
||||
colfunc();
|
||||
#ifdef PARANOIA
|
||||
else
|
||||
I_Error("R_DrawMaskedColumn: Invalid ylookup for dc_yl %d", dc_yl);
|
||||
#endif
|
||||
Z_Free(dc_source);
|
||||
colfunc();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -800,13 +796,14 @@ UINT8 *R_GetSpriteTranslation(vissprite_t *vis)
|
|||
static void R_DrawVisSprite(vissprite_t *vis)
|
||||
{
|
||||
column_t *column;
|
||||
void (*localcolfunc)(column_t *);
|
||||
void (*localcolfunc)(column_t *, unsigned);
|
||||
INT32 pwidth;
|
||||
fixed_t frac;
|
||||
patch_t *patch = vis->patch;
|
||||
fixed_t this_scale = vis->thingscale;
|
||||
INT32 x1, x2;
|
||||
INT64 overflow_test;
|
||||
INT32 lengthcol;
|
||||
|
||||
if (!patch)
|
||||
return;
|
||||
|
@ -940,7 +937,7 @@ static void R_DrawVisSprite(vissprite_t *vis)
|
|||
|
||||
column = &patch->columns[texturecolumn];
|
||||
|
||||
localcolfunc (column);
|
||||
localcolfunc (column, lengthcol);
|
||||
}
|
||||
}
|
||||
else if (vis->cut & SC_SHEAR)
|
||||
|
@ -954,7 +951,7 @@ static void R_DrawVisSprite(vissprite_t *vis)
|
|||
{
|
||||
column = &patch->columns[frac>>FRACBITS];
|
||||
sprtopscreen = (centeryfrac - FixedMul(dc_texturemid, spryscale));
|
||||
localcolfunc (column);
|
||||
localcolfunc (column, lengthcol);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -967,7 +964,7 @@ static void R_DrawVisSprite(vissprite_t *vis)
|
|||
for (dc_x = vis->x1; dc_x <= vis->x2; dc_x++, frac += vis->xiscale, sprtopscreen += vis->shear.tan)
|
||||
{
|
||||
column = &patch->columns[frac>>FRACBITS];
|
||||
localcolfunc (column);
|
||||
localcolfunc (column, lengthcol);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1014,7 +1011,7 @@ static void R_DrawPrecipitationVisSprite(vissprite_t *vis)
|
|||
fixed_t frac = vis->startfrac;
|
||||
|
||||
for (dc_x = vis->x1; dc_x <= vis->x2; dc_x++, frac += vis->xiscale)
|
||||
R_DrawMaskedColumn(&patch->columns[frac>>FRACBITS]);
|
||||
R_DrawMaskedColumn(&patch->columns[frac>>FRACBITS], patch->height);
|
||||
|
||||
colfunc = colfuncs[BASEDRAWFUNC];
|
||||
}
|
||||
|
|
|
@ -45,10 +45,9 @@ extern fixed_t sprtopscreen;
|
|||
extern fixed_t sprbotscreen;
|
||||
extern fixed_t windowtop;
|
||||
extern fixed_t windowbottom;
|
||||
extern INT32 lengthcol;
|
||||
|
||||
void R_DrawMaskedColumn(column_t *column);
|
||||
void R_DrawFlippedMaskedColumn(column_t *column);
|
||||
void R_DrawMaskedColumn(column_t *column, unsigned lengthcol);
|
||||
void R_DrawFlippedMaskedColumn(column_t *column, unsigned lengthcol);
|
||||
|
||||
// ----------------
|
||||
// SPRITE RENDERING
|
||||
|
|
Loading…
Reference in a new issue