mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-24 13:01:47 +00:00
- Fixed drawing of wide high resolution skies. (At least for the samples I
received. I'm not convinced that it's yet fixed for the general case.) SVN r1930 (trunk)
This commit is contained in:
parent
788f17323c
commit
1c9b693087
4 changed files with 20 additions and 15 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
October 23, 2009
|
||||||
|
- Fixed drawing of wide high resolution skies. (At least for the samples I
|
||||||
|
received. I'm not convinced that it's yet fixed for the general case.)
|
||||||
|
|
||||||
October 19, 2009 (Changes by Graf Zahl)
|
October 19, 2009 (Changes by Graf Zahl)
|
||||||
- fixed: Setting the first state's duration of a fast projectile to 0 caused
|
- fixed: Setting the first state's duration of a fast projectile to 0 caused
|
||||||
an underflow and blocked all further state changes.
|
an underflow and blocked all further state changes.
|
||||||
|
|
|
@ -834,6 +834,6 @@ void R_UpdateAnimations (DWORD mstime)
|
||||||
|
|
||||||
// Scroll the sky
|
// Scroll the sky
|
||||||
double ms = (double)mstime * FRACUNIT;
|
double ms = (double)mstime * FRACUNIT;
|
||||||
sky1pos = fixed_t(fmod (ms * level.skyspeed1, double(TexMan[sky1texture]->GetWidth() << FRACBITS)));
|
sky1pos = fixed_t(fmod (ms * level.skyspeed1, double(TexMan[sky1texture]->GetScaledWidth() << FRACBITS)));
|
||||||
sky2pos = fixed_t(fmod (ms * level.skyspeed2, double(TexMan[sky2texture]->GetWidth() << FRACBITS)));
|
sky2pos = fixed_t(fmod (ms * level.skyspeed2, double(TexMan[sky2texture]->GetScaledWidth() << FRACBITS)));
|
||||||
}
|
}
|
||||||
|
|
|
@ -764,17 +764,16 @@ static int skycolplace;
|
||||||
// Get a column of sky when there is only one sky texture.
|
// Get a column of sky when there is only one sky texture.
|
||||||
static const BYTE *R_GetOneSkyColumn (FTexture *fronttex, int x)
|
static const BYTE *R_GetOneSkyColumn (FTexture *fronttex, int x)
|
||||||
{
|
{
|
||||||
angle_t column = MulScale16 (frontxScale, viewangle + xtoviewangle[x]);
|
angle_t column = (viewangle + xtoviewangle[x]) ^ skyflip;
|
||||||
|
return fronttex->GetColumn (MulScale32((column >> sky1shift) + frontpos, frontxScale), NULL);
|
||||||
return fronttex->GetColumn ((((column^skyflip) >> sky1shift) + frontpos) >> FRACBITS, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get a column of sky when there are two overlapping sky textures
|
// Get a column of sky when there are two overlapping sky textures
|
||||||
static const BYTE *R_GetTwoSkyColumns (FTexture *fronttex, int x)
|
static const BYTE *R_GetTwoSkyColumns (FTexture *fronttex, int x)
|
||||||
{
|
{
|
||||||
DWORD ang = (viewangle + xtoviewangle[x])^skyflip;
|
DWORD ang = (viewangle + xtoviewangle[x]) ^ skyflip;
|
||||||
DWORD angle1 = (((DWORD)MulScale16 (frontxScale, ang) >> sky1shift) + frontpos) >> FRACBITS;
|
DWORD angle1 = (DWORD)MulScale32((ang >> sky1shift) + frontpos, frontxScale);
|
||||||
DWORD angle2 = (((DWORD)MulScale16 (backxScale, ang) >> sky2shift) + backpos) >> FRACBITS;
|
DWORD angle2 = (DWORD)MulScale32((ang >> sky2shift) + backpos, backxScale);
|
||||||
|
|
||||||
// Check if this column has already been built. If so, there's
|
// Check if this column has already been built. If so, there's
|
||||||
// no reason to waste time building it again.
|
// no reason to waste time building it again.
|
||||||
|
@ -825,7 +824,6 @@ static void R_DrawSky (visplane_t *pl)
|
||||||
dc_iscale = skyiscale >> skystretch;
|
dc_iscale = skyiscale >> skystretch;
|
||||||
|
|
||||||
clearbuf (swall+pl->minx, pl->maxx-pl->minx+1, dc_iscale<<2);
|
clearbuf (swall+pl->minx, pl->maxx-pl->minx+1, dc_iscale<<2);
|
||||||
rw_offset = frontpos;
|
|
||||||
|
|
||||||
if (MirrorFlags & RF_XFLIP)
|
if (MirrorFlags & RF_XFLIP)
|
||||||
{
|
{
|
||||||
|
@ -1328,6 +1326,11 @@ void R_DrawSkyPlane (visplane_t *pl)
|
||||||
skyflip = l->args[2] ? 0u : ~0u;
|
skyflip = l->args[2] ? 0u : ~0u;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// frontpos = FixedMul(frontpos, frontskytex->xScale/2);
|
||||||
|
if (backskytex != NULL)
|
||||||
|
{
|
||||||
|
backpos = FixedMul(backpos, backskytex->xScale);
|
||||||
|
}
|
||||||
|
|
||||||
bool fakefixed = false;
|
bool fakefixed = false;
|
||||||
if (fixedcolormap)
|
if (fixedcolormap)
|
||||||
|
|
|
@ -115,11 +115,9 @@ void R_InitSkyMap ()
|
||||||
}
|
}
|
||||||
|
|
||||||
// The (standard Doom) sky map is 256*128*4 maps.
|
// The (standard Doom) sky map is 256*128*4 maps.
|
||||||
sky1shift = 22+skystretch-16;
|
int swidth = skytex1->GetScaledWidth();
|
||||||
sky2shift = 22+skystretch-16;
|
sky1shift = 22 - 16 + (skystretch && swidth < 512) - (swidth >= 1024 && skytex1->xScale >= 4*FRACUNIT);
|
||||||
if (skytex1->WidthBits >= 9)
|
swidth = skytex2->GetScaledWidth();
|
||||||
sky1shift -= skystretch;
|
sky2shift = 22 - 16 + (skystretch && swidth < 512) - (swidth >= 1024 && skytex2->xScale >= 4*FRACUNIT);
|
||||||
if (skytex2->WidthBits >= 9)
|
|
||||||
sky2shift -= skystretch;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue