mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-29 23:41:56 +00:00
Merge branch 'master' of https://github.com/raa-eruanna/qzdoom into qzdoom
This commit is contained in:
commit
6caa53529f
3 changed files with 22 additions and 10 deletions
|
@ -1279,6 +1279,7 @@ set (PCH_SOURCES
|
|||
p_3dfloors.cpp
|
||||
p_3dmidtex.cpp
|
||||
p_acs.cpp
|
||||
p_actionfunctions.cpp
|
||||
p_buildmap.cpp
|
||||
p_ceiling.cpp
|
||||
p_conversation.cpp
|
||||
|
@ -1417,7 +1418,6 @@ set (PCH_SOURCES
|
|||
textures/warptexture.cpp
|
||||
thingdef/olddecorations.cpp
|
||||
thingdef/thingdef.cpp
|
||||
thingdef/thingdef_codeptr.cpp
|
||||
thingdef/thingdef_data.cpp
|
||||
thingdef/thingdef_exp.cpp
|
||||
thingdef/thingdef_expression.cpp
|
||||
|
|
|
@ -852,10 +852,11 @@ extern FTexture *rw_pic;
|
|||
// since the most anyone can ever see of the sky is 500 pixels.
|
||||
// We need 4 skybufs because wallscan can draw up to 4 columns at a time.
|
||||
// Need two versions - one for true color and one for palette
|
||||
#define MAXSKYBUF 3072
|
||||
static BYTE skybuf[4][512];
|
||||
static uint32_t skybuf_bgra[4][512];
|
||||
static uint32_t skybuf_bgra[MAXSKYBUF][512];
|
||||
static DWORD lastskycol[4];
|
||||
static DWORD lastskycol_bgra[4];
|
||||
static DWORD lastskycol_bgra[MAXSKYBUF];
|
||||
static int skycolplace;
|
||||
static int skycolplace_bgra;
|
||||
|
||||
|
@ -888,9 +889,19 @@ static const BYTE *R_GetOneSkyColumn (FTexture *fronttex, int x)
|
|||
// Get a column of sky when there are two overlapping sky textures
|
||||
static const BYTE *R_GetTwoSkyColumns (FTexture *fronttex, int x)
|
||||
{
|
||||
DWORD ang = (skyangle + xtoviewangle[x]) ^ skyflip;
|
||||
DWORD angle1 = (DWORD)((UMulScale16(ang, frontcyl) + frontpos) >> FRACBITS);
|
||||
DWORD angle2 = (DWORD)((UMulScale16(ang, backcyl) + backpos) >> FRACBITS);
|
||||
DWORD ang, angle1, angle2;
|
||||
|
||||
if (r_linearsky)
|
||||
{
|
||||
angle_t xangle = (angle_t)((0.5 - x / (double)viewwidth) * FocalTangent * ANGLE_90);
|
||||
ang = (skyangle + xangle) ^ skyflip;
|
||||
}
|
||||
else
|
||||
{
|
||||
ang = (skyangle + xtoviewangle[x]) ^ skyflip;
|
||||
}
|
||||
angle1 = (DWORD)((UMulScale16(ang, frontcyl) + frontpos) >> FRACBITS);
|
||||
angle2 = (DWORD)((UMulScale16(ang, backcyl) + backpos) >> FRACBITS);
|
||||
|
||||
// Check if this column has already been built. If so, there's
|
||||
// no reason to waste time building it again.
|
||||
|
@ -935,17 +946,18 @@ static const BYTE *R_GetTwoSkyColumns (FTexture *fronttex, int x)
|
|||
else
|
||||
{
|
||||
//return R_GetOneSkyColumn(fronttex, x);
|
||||
for (i = 0; i < 4; ++i)
|
||||
for (i = skycolplace_bgra - 4; i < skycolplace_bgra; ++i)
|
||||
{
|
||||
if (lastskycol_bgra[i] == skycol)
|
||||
int ic = (i % MAXSKYBUF); // i "checker" - can wrap around the ends of the array
|
||||
if (lastskycol_bgra[ic] == skycol)
|
||||
{
|
||||
return (BYTE*)(skybuf_bgra[i]);
|
||||
return (BYTE*)(skybuf_bgra[ic]);
|
||||
}
|
||||
}
|
||||
|
||||
lastskycol_bgra[skycolplace_bgra] = skycol;
|
||||
uint32_t *composite = skybuf_bgra[skycolplace_bgra];
|
||||
skycolplace_bgra = (skycolplace_bgra + 1) & 3;
|
||||
skycolplace_bgra = (skycolplace_bgra + 1) % MAXSKYBUF;
|
||||
|
||||
// The ordering of the following code has been tuned to allow VC++ to optimize
|
||||
// it well. In particular, this arrangement lets it keep count in a register
|
||||
|
|
Loading…
Reference in a new issue