mirror of https://github.com/ZDoom/gzdoom-gles.git
Renderer floatification: Use floating point for decals
This commit is contained in:
parent
cb0fe38dfe
commit
1f97488945
|
@ -3032,8 +3032,7 @@ static void R_RenderDecal (side_t *wall, DBaseDecal *decal, drawseg_t *clipper,
|
||||||
{
|
{
|
||||||
DVector2 decal_left, decal_right, decal_pos;
|
DVector2 decal_left, decal_right, decal_pos;
|
||||||
int x1, x2;
|
int x1, x2;
|
||||||
fixed_t xscale, yscale;
|
double yscale;
|
||||||
fixed_t topoff;
|
|
||||||
BYTE flipx;
|
BYTE flipx;
|
||||||
double zpos;
|
double zpos;
|
||||||
int needrepeat = 0;
|
int needrepeat = 0;
|
||||||
|
@ -3085,9 +3084,6 @@ static void R_RenderDecal (side_t *wall, DBaseDecal *decal, drawseg_t *clipper,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
xscale = FLOAT2FIXED(decal->ScaleX);
|
|
||||||
yscale = FLOAT2FIXED(decal->ScaleY);
|
|
||||||
|
|
||||||
WallSpriteTile = TexMan(decal->PicNum, true);
|
WallSpriteTile = TexMan(decal->PicNum, true);
|
||||||
flipx = (BYTE)(decal->RenderFlags & RF_XFLIP);
|
flipx = (BYTE)(decal->RenderFlags & RF_XFLIP);
|
||||||
|
|
||||||
|
@ -3102,12 +3098,10 @@ static void R_RenderDecal (side_t *wall, DBaseDecal *decal, drawseg_t *clipper,
|
||||||
|
|
||||||
FWallCoords savecoord = WallC;
|
FWallCoords savecoord = WallC;
|
||||||
|
|
||||||
x2 = WallSpriteTile->GetWidth();
|
double edge_right = WallSpriteTile->GetWidth();
|
||||||
x1 = WallSpriteTile->LeftOffset;
|
double edge_left = WallSpriteTile->LeftOffset;
|
||||||
x2 = x2 - x1;
|
edge_right = (edge_right - edge_left) * decal->ScaleX;
|
||||||
|
edge_left *= decal->ScaleX;
|
||||||
x1 *= xscale;
|
|
||||||
x2 *= xscale;
|
|
||||||
|
|
||||||
double dcx, dcy;
|
double dcx, dcy;
|
||||||
decal->GetXY(wall, dcx, dcy);
|
decal->GetXY(wall, dcx, dcy);
|
||||||
|
@ -3115,8 +3109,8 @@ static void R_RenderDecal (side_t *wall, DBaseDecal *decal, drawseg_t *clipper,
|
||||||
|
|
||||||
DVector2 angvec = (curline->v2->fPos() - curline->v1->fPos()).Unit();
|
DVector2 angvec = (curline->v2->fPos() - curline->v1->fPos()).Unit();
|
||||||
|
|
||||||
decal_left = decal_pos - x1 * angvec - ViewPos;
|
decal_left = decal_pos - edge_left * angvec - ViewPos;
|
||||||
decal_right = decal_pos + x2 * angvec - ViewPos;
|
decal_right = decal_pos + edge_right * angvec - ViewPos;
|
||||||
|
|
||||||
if (WallC.Init(decal_left, decal_right, TOO_CLOSE_Z))
|
if (WallC.Init(decal_left, decal_right, TOO_CLOSE_Z))
|
||||||
goto done;
|
goto done;
|
||||||
|
@ -3183,8 +3177,8 @@ static void R_RenderDecal (side_t *wall, DBaseDecal *decal, drawseg_t *clipper,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
topoff = WallSpriteTile->TopOffset << FRACBITS;
|
yscale = decal->ScaleY;
|
||||||
dc_texturemid = topoff + (zpos - ViewPos.Z) / yscale;
|
dc_texturemid = WallSpriteTile->TopOffset + (zpos - ViewPos.Z) / yscale;
|
||||||
|
|
||||||
// Clip sprite to drawseg
|
// Clip sprite to drawseg
|
||||||
x1 = MAX<int>(clipper->x1, x1);
|
x1 = MAX<int>(clipper->x1, x1);
|
||||||
|
@ -3194,7 +3188,7 @@ static void R_RenderDecal (side_t *wall, DBaseDecal *decal, drawseg_t *clipper,
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
PrepWall (swall, lwall, WallSpriteTile->GetWidth() << FRACBITS, x1, x2);
|
PrepWall (swall, lwall, WallSpriteTile->GetWidth(), x1, x2);
|
||||||
|
|
||||||
if (flipx)
|
if (flipx)
|
||||||
{
|
{
|
||||||
|
@ -3242,7 +3236,7 @@ static void R_RenderDecal (side_t *wall, DBaseDecal *decal, drawseg_t *clipper,
|
||||||
}
|
}
|
||||||
|
|
||||||
// rw_offset is used as the texture's vertical scale
|
// rw_offset is used as the texture's vertical scale
|
||||||
rw_offset = SafeDivScale30(1, yscale);
|
rw_offset = FLOAT2FIXED(1 / yscale);
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
|
|
@ -632,9 +632,8 @@ void R_DrawWallSprite(vissprite_t *spr)
|
||||||
|
|
||||||
void R_WallSpriteColumn (void (*drawfunc)(const BYTE *column, const FTexture::Span *spans))
|
void R_WallSpriteColumn (void (*drawfunc)(const BYTE *column, const FTexture::Span *spans))
|
||||||
{
|
{
|
||||||
unsigned int texturecolumn = lwall[dc_x] >> FRACBITS;
|
dc_iscale = MulScale16 (swall[dc_x], rw_offset/4);
|
||||||
dc_iscale = MulScale16 (swall[dc_x], rw_offset);
|
spryscale = 65536.0 / dc_iscale;
|
||||||
spryscale = SafeDivScale32 (1, dc_iscale);
|
|
||||||
if (sprflipvert)
|
if (sprflipvert)
|
||||||
sprtopscreen = CenterY + dc_texturemid * spryscale;
|
sprtopscreen = CenterY + dc_texturemid * spryscale;
|
||||||
else
|
else
|
||||||
|
@ -642,7 +641,7 @@ void R_WallSpriteColumn (void (*drawfunc)(const BYTE *column, const FTexture::Sp
|
||||||
|
|
||||||
const BYTE *column;
|
const BYTE *column;
|
||||||
const FTexture::Span *spans;
|
const FTexture::Span *spans;
|
||||||
column = WallSpriteTile->GetColumn (texturecolumn, &spans);
|
column = WallSpriteTile->GetColumn (lwall[dc_x] >> FRACBITS, &spans);
|
||||||
dc_texturefrac = 0;
|
dc_texturefrac = 0;
|
||||||
drawfunc (column, spans);
|
drawfunc (column, spans);
|
||||||
rw_light += rw_lightstep;
|
rw_light += rw_lightstep;
|
||||||
|
|
Loading…
Reference in New Issue