Merge remote-tracking branch 'zdoom/master' into qzdoom

This commit is contained in:
Magnus Norddahl 2016-11-01 19:51:17 +01:00
commit 1ccf190c4f
4 changed files with 71 additions and 24 deletions

View file

@ -198,7 +198,10 @@ SetTiltedSpanSize:
mov [y8+2],cl mov [y8+2],cl
mov [y9+2],cl mov [y9+2],cl
mov [y10+2],cl mov [y10+2],cl
cmp eax,0 ; if x bits is 0, mask must be 0 too.
jz .notted
not eax not eax
.notted:
pop ecx pop ecx
mov [m1+2],eax mov [m1+2],eax

View file

@ -224,10 +224,26 @@ void R_MapPlane (int y, int x1)
distance = planeheight * yslope[y]; distance = planeheight * yslope[y];
if (ds_xbits != 0)
{
ds_xstep = xs_ToFixed(32 - ds_xbits, distance * xstepscale); ds_xstep = xs_ToFixed(32 - ds_xbits, distance * xstepscale);
ds_ystep = xs_ToFixed(32-ds_ybits, distance * ystepscale);
ds_xfrac = xs_ToFixed(32 - ds_xbits, distance * basexfrac) + pviewx; ds_xfrac = xs_ToFixed(32 - ds_xbits, distance * basexfrac) + pviewx;
}
else
{
ds_xstep = 0;
ds_xfrac = 0;
}
if (ds_ybits != 0)
{
ds_ystep = xs_ToFixed(32 - ds_ybits, distance * ystepscale);
ds_yfrac = xs_ToFixed(32 - ds_ybits, distance * baseyfrac) + pviewy; ds_yfrac = xs_ToFixed(32 - ds_ybits, distance * baseyfrac) + pviewy;
}
else
{
ds_ystep = 0;
ds_yfrac = 0;
}
if (plane_shade) if (plane_shade)
{ {
@ -2116,6 +2132,15 @@ void R_DrawTiltedPlane (visplane_t *pl, double _xscale, double _yscale, fixed_t
} }
} }
// Hack in support for 1 x Z and Z x 1 texture sizes
if (ds_ybits == 0)
{
plane_sv[2] = plane_sv[1] = plane_sv[0] = 0;
}
if (ds_xbits == 0)
{
plane_su[2] = plane_su[1] = plane_su[0] = 0;
}
#if defined(X86_ASM) #if defined(X86_ASM)
if (!r_swtruecolor) if (!r_swtruecolor)
{ {

View file

@ -1093,7 +1093,10 @@ WallscanSampler::WallscanSampler(int y1, float swal, double yrepeat, fixed_t xof
if (!r_swtruecolor) if (!r_swtruecolor)
{ {
height = texture->GetHeight(); height = texture->GetHeight();
int uv_fracbits = 32 - texture->HeightBits; int uv_fracbits = 32 - texture->HeightBits;
if (uv_fracbits != 32)
{
uv_max = height << uv_fracbits; uv_max = height << uv_fracbits;
// Find start uv in [0-base_height[ range. // Find start uv in [0-base_height[ range.
@ -1108,6 +1111,13 @@ WallscanSampler::WallscanSampler(int y1, float swal, double yrepeat, fixed_t xof
uv_step = xs_ToFixed(uv_fracbits, uv_stepd); uv_step = xs_ToFixed(uv_fracbits, uv_stepd);
if (uv_step == 0) // To prevent divide by zero elsewhere if (uv_step == 0) // To prevent divide by zero elsewhere
uv_step = 1; uv_step = 1;
}
else
{ // Hack for one pixel tall textures
uv_pos = 0;
uv_step = 0;
uv_max = 1;
}
source = getcol(texture, xoffset >> FRACBITS); source = getcol(texture, xoffset >> FRACBITS);
source2 = nullptr; source2 = nullptr;
@ -1368,11 +1378,19 @@ void wallscan_any(
return; return;
fixed_t xoffset = rw_offset; fixed_t xoffset = rw_offset;
rw_pic->GetHeight(); // To ensure that rw_pic->HeightBits has been set rw_pic->GetHeight(); // To ensure that rw_pic->HeightBits has been set
int fracbits = 32 - rw_pic->HeightBits;
if (fracbits == 32)
{ // Hack for one pixel tall textures
fracbits = 0;
yrepeat = 0;
dc_texturemid = 0;
}
DWORD(*draw1column)(); DWORD(*draw1column)();
void(*draw4columns)(); void(*draw4columns)();
setupwallscan(r_swtruecolor ? FRACBITS : 32 - rw_pic->HeightBits, draw1column, draw4columns); setupwallscan(r_swtruecolor ? FRACBITS : fracbits, draw1column, draw4columns);
bool fixed = (fixedcolormap != NULL || fixedlightlev >= 0); bool fixed = (fixedcolormap != NULL || fixedlightlev >= 0);
if (fixed) if (fixed)

View file

@ -241,8 +241,9 @@ void FTexture::CalcBitSize ()
} }
WidthMask = (1 << WidthBits) - 1; WidthMask = (1 << WidthBits) - 1;
// The minimum height is 2, because we cannot shift right 32 bits. // <hr>The minimum height is 2, because we cannot shift right 32 bits.</hr>
for (i = 1; (1 << i) < Height; ++i) // Scratch that. Somebody actually made a 1x1 texture, so now we have to handle it.
for (i = 0; (1 << i) < Height; ++i)
{ } { }
HeightBits = i; HeightBits = i;