Revert software renderer parts of "- sprite lightlevel cleanup and fixes."

This code had some issues which are not easily fixed, so it's better to just undo it all.
This commit is contained in:
Christoph Oelckers 2022-11-05 09:55:25 +01:00
parent 435e7dddcd
commit 500e2d6c5a
2 changed files with 17 additions and 15 deletions

View file

@ -605,7 +605,8 @@ namespace swrenderer
} }
Add3DFloorPlanes(sub, frontsector, basecolormap, foggy, adjusted_ceilinglightlevel, adjusted_floorlightlevel); Add3DFloorPlanes(sub, frontsector, basecolormap, foggy, adjusted_ceilinglightlevel, adjusted_floorlightlevel);
AddSprites(sub->sector, frontsector, FakeSide, foggy); auto nc = !!(frontsector->Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING);
AddSprites(sub->sector, frontsector->GetTexture(sector_t::ceiling) == skyflatnum ? ceilinglightlevel : floorlightlevel, FakeSide, foggy, GetSpriteColorTable(frontsector->Colormap, frontsector->SpecialColors[sector_t::sprites], nc));
// [RH] Add particles // [RH] Add particles
if ((unsigned int)(sub->Index()) < Level->subsectors.Size()) if ((unsigned int)(sub->Index()) < Level->subsectors.Size())
@ -873,7 +874,7 @@ namespace swrenderer
fillshort(ceilingclip, viewwidth, 0); fillshort(ceilingclip, viewwidth, 0);
} }
void RenderOpaquePass::AddSprites(sector_t *sec, sector_t* frontsector, WaterFakeSide fakeside, bool foggy) void RenderOpaquePass::AddSprites(sector_t *sec, int lightlevel, WaterFakeSide fakeside, bool foggy, FDynamicColormap *basecolormap)
{ {
// BSP is traversed by subsector. // BSP is traversed by subsector.
// A sector might have been split into several // A sector might have been split into several
@ -933,22 +934,23 @@ namespace swrenderer
bool isPicnumOverride = thing->picnum.isValid(); bool isPicnumOverride = thing->picnum.isValid();
if (GetThingSprite(thing, sprite)) if (GetThingSprite(thing, sprite))
{ {
int thinglightlevel; FDynamicColormap *thingColormap = basecolormap;
int thinglightlevel = lightlevel;
if (sec->sectornum != thing->Sector->sectornum) // compare sectornums to account for R_FakeFlat copies. if (sec->sectornum != thing->Sector->sectornum) // compare sectornums to account for R_FakeFlat copies.
{ {
frontsector = thing->Sector; thinglightlevel = thing->Sector->GetTexture(sector_t::ceiling) == skyflatnum ? thing->Sector->GetCeilingLight() : thing->Sector->GetFloorLight();
auto nc = !!(thing->Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING);
thingColormap = GetSpriteColorTable(thing->Sector->Colormap, thing->Sector->SpecialColors[sector_t::sprites], nc);
} }
auto nc = !!(thing->Level->flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING); if (thing->LightLevel > -1)
FDynamicColormap* thingColormap = GetSpriteColorTable(frontsector->Colormap, frontsector->SpecialColors[sector_t::sprites], nc); {
thinglightlevel = thing->LightLevel;
// per-sprite lightlevel and fog do not mix well in the software renderer. if (thing->flags8 & MF8_ADDLIGHTLEVEL)
if (!foggy) {
{ thinglightlevel += thing->Sector->GetTexture(sector_t::ceiling) == skyflatnum ? thing->Sector->GetCeilingLight() : thing->Sector->GetFloorLight();
thinglightlevel = clamp(thing->GetLightLevel(frontsector), 0, 255); thinglightlevel = clamp(thinglightlevel, 0, 255);
} }
else
{
thinglightlevel = clamp<int>(frontsector->lightlevel, 0, 255);
} }
if ((sprite.renderflags & RF_SPRITETYPEMASK) == RF_WALLSPRITE) if ((sprite.renderflags & RF_SPRITETYPEMASK) == RF_WALLSPRITE)
{ {

View file

@ -89,7 +89,7 @@ namespace swrenderer
void FakeDrawLoop(subsector_t *sub, sector_t *frontsector, VisiblePlane *floorplane, VisiblePlane *ceilingplane, Fake3DOpaque opaque3dfloor); void FakeDrawLoop(subsector_t *sub, sector_t *frontsector, VisiblePlane *floorplane, VisiblePlane *ceilingplane, Fake3DOpaque opaque3dfloor);
void Add3DFloorLine(seg_t *line, sector_t *frontsector); void Add3DFloorLine(seg_t *line, sector_t *frontsector);
void AddSprites(sector_t *sec, sector_t* frontsector, WaterFakeSide fakeside, bool foggy); void AddSprites(sector_t *sec, int lightlevel, WaterFakeSide fakeside, bool foggy, FDynamicColormap *basecolormap);
bool IsPotentiallyVisible(AActor *thing); bool IsPotentiallyVisible(AActor *thing);
bool GetThingSprite(AActor *thing, ThingSprite &sprite); bool GetThingSprite(AActor *thing, ThingSprite &sprite);