mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-27 04:00:42 +00:00
- fixed handling of SW's shadows.
An out of range shade will only work without fog.
This commit is contained in:
parent
88695ef554
commit
e1df17964e
4 changed files with 15 additions and 3 deletions
|
@ -114,6 +114,15 @@ void HWSprite::DrawSprite(HWDrawInfo* di, FRenderState& state, bool translucent)
|
||||||
bool foggy = (GlobalMapFog || (fade & 0xffffff));
|
bool foggy = (GlobalMapFog || (fade & 0xffffff));
|
||||||
auto ShadeDiv = lookups.tables[palette].ShadeFactor;
|
auto ShadeDiv = lookups.tables[palette].ShadeFactor;
|
||||||
// Disable brightmaps if non-black fog is used.
|
// Disable brightmaps if non-black fog is used.
|
||||||
|
int shade = this->shade;
|
||||||
|
PalEntry color(255, globalr, globalg, globalb);
|
||||||
|
if (this->shade > numshades) // handling of SW's shadow hack using a shade of 127.
|
||||||
|
{
|
||||||
|
shade = sector[sprite->sectnum].floorshade;
|
||||||
|
color = 0xff000000;
|
||||||
|
}
|
||||||
|
shade = clamp(shade, 0, numshades - 1);
|
||||||
|
|
||||||
if (ShadeDiv >= 1 / 1000.f && foggy && !foglayer)
|
if (ShadeDiv >= 1 / 1000.f && foggy && !foglayer)
|
||||||
{
|
{
|
||||||
state.EnableFog(1);
|
state.EnableFog(1);
|
||||||
|
@ -131,7 +140,7 @@ void HWSprite::DrawSprite(HWDrawInfo* di, FRenderState& state, bool translucent)
|
||||||
}
|
}
|
||||||
|
|
||||||
// The shade rgb from the tint is ignored here.
|
// The shade rgb from the tint is ignored here.
|
||||||
state.SetColorAlpha(PalEntry(255, globalr, globalg, globalb), alpha);
|
state.SetColorAlpha(color, alpha);
|
||||||
|
|
||||||
state.SetMaterial(texture, UF_Texture, 0, CLAMP_XY, TRANSLATION(Translation_Remap + curbasepal, palette), -1);
|
state.SetMaterial(texture, UF_Texture, 0, CLAMP_XY, TRANSLATION(Translation_Remap + curbasepal, palette), -1);
|
||||||
|
|
||||||
|
@ -320,7 +329,7 @@ void HWSprite::Process(HWDrawInfo* di, spritetype* spr, sectortype* sector, int
|
||||||
|
|
||||||
modelframe = 0;
|
modelframe = 0;
|
||||||
dynlightindex = -1;
|
dynlightindex = -1;
|
||||||
shade = clamp(spr->shade, 0, numshades-1);
|
shade = spr->shade;
|
||||||
palette = spr->pal;
|
palette = spr->pal;
|
||||||
fade = lookups.getFade(sector->floorpal); // fog is per sector.
|
fade = lookups.getFade(sector->floorpal); // fog is per sector.
|
||||||
visibility = sectorVisibility(sector);
|
visibility = sectorVisibility(sector);
|
||||||
|
|
|
@ -206,7 +206,8 @@ bool PolymostRenderState::Apply(FRenderState& state, GLState& oldState)
|
||||||
state.SetMaterial(mMaterial.mTexture, mMaterial.uFlags, mMaterial.mScaleFlags, mMaterial.mClampMode, mMaterial.mTranslation, mMaterial.mOverrideShader);
|
state.SetMaterial(mMaterial.mTexture, mMaterial.uFlags, mMaterial.mScaleFlags, mMaterial.mClampMode, mMaterial.mTranslation, mMaterial.mOverrideShader);
|
||||||
}
|
}
|
||||||
|
|
||||||
state.SetColor(Color[0], Color[1], Color[2], Color[3]);
|
if (!drawblack) state.SetColor(Color[0], Color[1], Color[2], Color[3]);
|
||||||
|
else state.SetColor(0, 0, 0, Color[3]);
|
||||||
if (StateFlags != oldState.Flags)
|
if (StateFlags != oldState.Flags)
|
||||||
{
|
{
|
||||||
state.EnableDepthTest(StateFlags & STF_DEPTHTEST);
|
state.EnableDepthTest(StateFlags & STF_DEPTHTEST);
|
||||||
|
|
|
@ -138,6 +138,7 @@ public:
|
||||||
|
|
||||||
void SetShade(int32_t shade, int numshades)
|
void SetShade(int32_t shade, int numshades)
|
||||||
{
|
{
|
||||||
|
renderState.drawblack = shade > numshades;
|
||||||
renderState.Shade = std::min(shade, numshades-1);
|
renderState.Shade = std::min(shade, numshades-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,6 +69,7 @@ struct PolymostRenderState
|
||||||
{
|
{
|
||||||
int vindex, vcount, primtype;
|
int vindex, vcount, primtype;
|
||||||
int Shade;
|
int Shade;
|
||||||
|
int drawblack = false;
|
||||||
float ShadeDiv = 62.f;
|
float ShadeDiv = 62.f;
|
||||||
float VisFactor = 128.f;
|
float VisFactor = 128.f;
|
||||||
int Flags = 0;
|
int Flags = 0;
|
||||||
|
|
Loading…
Reference in a new issue