Skymist is a third sky layer with transparency, and adopts the fade color and skyfog density. Size not connected to SKY1 or SKY2. Works with 6-sided skyboxes. Three template pngs (skymist1, 2, & 3) all 1x544 pixels, 8-bit grayscale with transparency are part of gzdoom.pk3 for general usage. Can supply custom lump through mapinfo. Console command 'skymisttoggle' shows the effect (make sure fade has a non-zero color in mapinfo and skyfog has non-zero density). Oh, and skyfog now works with 6-sided skyboxes.
This commit is contained in:
parent
31cd741cb0
commit
e9a067dd65
14 changed files with 80 additions and 12 deletions
|
|
@ -13,9 +13,9 @@ class FSkyBox;
|
|||
|
||||
struct HWSkyInfo
|
||||
{
|
||||
float x_offset[2];
|
||||
float x_offset[3];
|
||||
float y_offset; // doubleskies don't have a y-offset
|
||||
FGameTexture * texture[2];
|
||||
FGameTexture * texture[3];
|
||||
FTextureID skytexno1;
|
||||
bool mirrored;
|
||||
bool doublesky;
|
||||
|
|
@ -351,7 +351,6 @@ public:
|
|||
|
||||
};
|
||||
|
||||
|
||||
struct HWSkyPortal : public HWPortal
|
||||
{
|
||||
HWSkyInfo * origin;
|
||||
|
|
|
|||
|
|
@ -118,6 +118,9 @@ void HWSkyInfo::init(HWDrawInfo *di, sector_t* sec, int skypos, int sky1, PalEnt
|
|||
}
|
||||
else fadecolor = 0;
|
||||
|
||||
texture[2] = TexMan.GetGameTexture(di->Level->skymisttexture);
|
||||
x_offset[2] = di->Level->hw_skymistpos;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -74,19 +74,26 @@ void HWSkyPortal::DrawContents(HWDrawInfo *di, FRenderState &state)
|
|||
vertexBuffer->RenderDome(state, origin->texture[0], origin->x_offset[0], origin->y_offset, origin->mirrored, FSkyVertexBuffer::SKYMODE_MAINLAYER, !!(di->Level->flags & LEVEL_FORCETILEDSKY));
|
||||
state.SetTextureMode(TM_NORMAL);
|
||||
}
|
||||
|
||||
|
||||
state.AlphaFunc(Alpha_Greater, 0.f);
|
||||
|
||||
if (origin->doublesky && origin->texture[1])
|
||||
{
|
||||
vertexBuffer->RenderDome(state, origin->texture[1], origin->x_offset[1], origin->y_offset, false, FSkyVertexBuffer::SKYMODE_SECONDLAYER, !!(di->Level->flags & LEVEL_FORCETILEDSKY));
|
||||
}
|
||||
}
|
||||
|
||||
if (di->Level->skyfog>0 && !di->isFullbrightScene() && (origin->fadecolor & 0xffffff) != 0)
|
||||
if (di->Level->skyfog>0 && (origin->fadecolor & 0xffffff) != 0)
|
||||
{
|
||||
PalEntry FadeColor = origin->fadecolor;
|
||||
FadeColor.a = clamp<int>(di->Level->skyfog, 0, 255);
|
||||
|
||||
if (di->Level->flags3 & LEVEL3_SKYMIST && origin->texture[2])
|
||||
{
|
||||
vertexBuffer->RenderDome(state, origin->texture[2], origin->x_offset[2], 0.f, false, FSkyVertexBuffer::SKYMODE_FOGLAYER, !!(di->Level->flags & LEVEL_FORCETILEDSKY), 0, 0, FadeColor);
|
||||
}
|
||||
else if (!di->isFullbrightScene())
|
||||
{
|
||||
PalEntry FadeColor = origin->fadecolor;
|
||||
FadeColor.a = clamp<int>(di->Level->skyfog, 0, 255);
|
||||
|
||||
state.EnableTexture(false);
|
||||
state.SetObjectColor(FadeColor);
|
||||
state.Draw(DT_Triangles, 0, 12);
|
||||
|
|
|
|||
|
|
@ -79,6 +79,10 @@ void InitSkyMap(FLevelLocals *Level)
|
|||
{
|
||||
Level->skytexture1 = TexMan.GetFrontSkyLayer(Level->skytexture1);
|
||||
}
|
||||
if (Level->skymisttexture.isNull())
|
||||
{
|
||||
Level->skymisttexture = TexMan.CheckForTexture("skymist1", ETextureType::Any);
|
||||
}
|
||||
|
||||
skytex1 = TexMan.GetGameTexture(Level->skytexture1, false);
|
||||
skytex2 = TexMan.GetGameTexture(Level->skytexture2, false);
|
||||
|
|
@ -143,6 +147,7 @@ void R_UpdateSky (uint64_t mstime)
|
|||
// The hardware renderer uses a different value range and clamps it to a single rotation
|
||||
Level->hw_sky1pos = (float)(fmod((double(mstime) * Level->skyspeed1), 1024.) * (90. / 256.));
|
||||
Level->hw_sky2pos = (float)(fmod((double(mstime) * Level->skyspeed2), 1024.) * (90. / 256.));
|
||||
Level->hw_skymistpos = (float)(fmod((double(mstime) * Level->skymistspeed), 1024.) * (90. / 256.));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue