mirror of
https://github.com/ZDoom/gzdoom.git
synced 2025-02-21 11:31:41 +00:00
Fix broken fixed camera light for walls
This commit is contained in:
parent
1f011cda7f
commit
3b336a1476
5 changed files with 37 additions and 27 deletions
|
@ -232,8 +232,6 @@ namespace swrenderer
|
||||||
WallColumnDrawerArgs& drawerargs = *thread->columndrawer.get();
|
WallColumnDrawerArgs& drawerargs = *thread->columndrawer.get();
|
||||||
drawerargs.wallargs = &wallargs;
|
drawerargs.wallargs = &wallargs;
|
||||||
|
|
||||||
bool fixed = wallargs.fixedlight;
|
|
||||||
|
|
||||||
bool haslights = r_dynlights && wallargs.lightlist;
|
bool haslights = r_dynlights && wallargs.lightlist;
|
||||||
if (haslights)
|
if (haslights)
|
||||||
{
|
{
|
||||||
|
@ -249,7 +247,13 @@ namespace swrenderer
|
||||||
|
|
||||||
float curlight = wallargs.lightpos;
|
float curlight = wallargs.lightpos;
|
||||||
float lightstep = wallargs.lightstep;
|
float lightstep = wallargs.lightstep;
|
||||||
int shade = wallargs.mShade;
|
int shade = wallargs.Shade();
|
||||||
|
|
||||||
|
if (wallargs.fixedlight)
|
||||||
|
{
|
||||||
|
curlight = wallargs.FixedLight();
|
||||||
|
lightstep = 0;
|
||||||
|
}
|
||||||
|
|
||||||
float upos = wallargs.texcoords.upos, ustepX = wallargs.texcoords.ustepX, ustepY = wallargs.texcoords.ustepY;
|
float upos = wallargs.texcoords.upos, ustepX = wallargs.texcoords.ustepX, ustepY = wallargs.texcoords.ustepY;
|
||||||
float vpos = wallargs.texcoords.vpos, vstepX = wallargs.texcoords.vstepX, vstepY = wallargs.texcoords.vstepY;
|
float vpos = wallargs.texcoords.vpos, vstepX = wallargs.texcoords.vstepX, vstepY = wallargs.texcoords.vstepY;
|
||||||
|
@ -274,7 +278,7 @@ namespace swrenderer
|
||||||
int y2 = dwal[x];
|
int y2 = dwal[x];
|
||||||
if (y2 > y1)
|
if (y2 > y1)
|
||||||
{
|
{
|
||||||
if (!fixed) drawerargs.SetLight(curlight, shade);
|
drawerargs.SetLight(curlight, shade);
|
||||||
if (haslights)
|
if (haslights)
|
||||||
SetLights(drawerargs, x, y1);
|
SetLights(drawerargs, x, y1);
|
||||||
else
|
else
|
||||||
|
|
|
@ -52,6 +52,8 @@
|
||||||
#include "swrenderer/r_renderthread.h"
|
#include "swrenderer/r_renderthread.h"
|
||||||
#include "swrenderer/r_memory.h"
|
#include "swrenderer/r_memory.h"
|
||||||
|
|
||||||
|
EXTERN_CVAR(Bool, r_fullbrightignoresectorcolor)
|
||||||
|
|
||||||
namespace swrenderer
|
namespace swrenderer
|
||||||
{
|
{
|
||||||
RenderWallPart::RenderWallPart(RenderThread* thread)
|
RenderWallPart::RenderWallPart(RenderThread* thread)
|
||||||
|
@ -130,11 +132,30 @@ namespace swrenderer
|
||||||
// Textures that aren't masked can use the faster opaque drawer
|
// Textures that aren't masked can use the faster opaque drawer
|
||||||
if (!pic->GetTexture()->isMasked() && mask && alpha >= OPAQUE && !additive)
|
if (!pic->GetTexture()->isMasked() && mask && alpha >= OPAQUE && !additive)
|
||||||
{
|
{
|
||||||
drawerargs.SetStyle(true, false, OPAQUE, mLight.GetBaseColormap(), light_list);
|
drawerargs.SetStyle(true, false, OPAQUE, light_list);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
drawerargs.SetStyle(mask, additive, alpha, mLight.GetBaseColormap(), light_list);
|
drawerargs.SetStyle(mask, additive, alpha, light_list);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cameraLight->FixedLightLevel() >= 0)
|
||||||
|
{
|
||||||
|
drawerargs.SetBaseColormap((r_fullbrightignoresectorcolor) ? &FullNormalLight : mLight.GetBaseColormap());
|
||||||
|
drawerargs.SetLight(0.0f, cameraLight->FixedLightLevelShade());
|
||||||
|
drawerargs.fixedlight = true;
|
||||||
|
}
|
||||||
|
else if (cameraLight->FixedColormap())
|
||||||
|
{
|
||||||
|
drawerargs.SetBaseColormap(cameraLight->FixedColormap());
|
||||||
|
drawerargs.SetLight(0.0f, 0);
|
||||||
|
drawerargs.fixedlight = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
drawerargs.SetBaseColormap(mLight.GetBaseColormap());
|
||||||
|
drawerargs.SetLight(0.0f, mLight.GetLightLevel(), mLight.GetFoggy(), viewport);
|
||||||
|
drawerargs.fixedlight = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int count = x2 - x1;
|
int count = x2 - x1;
|
||||||
|
@ -151,7 +172,7 @@ namespace swrenderer
|
||||||
|
|
||||||
drawerargs.lightpos = mLight.GetLightPos(x1);
|
drawerargs.lightpos = mLight.GetLightPos(x1);
|
||||||
drawerargs.lightstep = mLight.GetLightStep();
|
drawerargs.lightstep = mLight.GetLightStep();
|
||||||
drawerargs.mShade = LightVisibility::LightLevelToShade(mLight.GetLightLevel(), mLight.GetFoggy(), viewport);
|
|
||||||
drawerargs.lightlist = light_list;
|
drawerargs.lightlist = light_list;
|
||||||
|
|
||||||
drawerargs.texwidth = pic->GetPhysicalWidth();
|
drawerargs.texwidth = pic->GetPhysicalWidth();
|
||||||
|
@ -183,7 +204,6 @@ namespace swrenderer
|
||||||
drawerargs.TanCos = Thread->Viewport->viewpoint.TanCos;
|
drawerargs.TanCos = Thread->Viewport->viewpoint.TanCos;
|
||||||
drawerargs.TanSin = Thread->Viewport->viewpoint.TanSin;
|
drawerargs.TanSin = Thread->Viewport->viewpoint.TanSin;
|
||||||
drawerargs.PortalMirrorFlags = Thread->Portal->MirrorFlags;
|
drawerargs.PortalMirrorFlags = Thread->Portal->MirrorFlags;
|
||||||
drawerargs.fixedlight = (cameraLight->FixedColormap() || cameraLight->FixedLightLevel() >= 0);
|
|
||||||
|
|
||||||
drawerargs.DrawWall(Thread);
|
drawerargs.DrawWall(Thread);
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,6 +43,9 @@ namespace swrenderer
|
||||||
ShadeConstants ColormapConstants() const;
|
ShadeConstants ColormapConstants() const;
|
||||||
fixed_t Light() const { return LIGHTSCALE(mLight, mShade); }
|
fixed_t Light() const { return LIGHTSCALE(mLight, mShade); }
|
||||||
|
|
||||||
|
float FixedLight() const { return mLight; }
|
||||||
|
int Shade() const { return mShade; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void SetLight(const ColormapLight &light);
|
void SetLight(const ColormapLight &light);
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ namespace swrenderer
|
||||||
(thread->Drawers(dc_viewport)->*wallfunc)(*this);
|
(thread->Drawers(dc_viewport)->*wallfunc)(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WallDrawerArgs::SetStyle(bool masked, bool additive, fixed_t alpha, FDynamicColormap *basecolormap, bool dynlights)
|
void WallDrawerArgs::SetStyle(bool masked, bool additive, fixed_t alpha, bool dynlights)
|
||||||
{
|
{
|
||||||
if (alpha < OPAQUE || additive)
|
if (alpha < OPAQUE || additive)
|
||||||
{
|
{
|
||||||
|
@ -72,21 +72,5 @@ namespace swrenderer
|
||||||
{
|
{
|
||||||
wallfunc = &SWPixelFormatDrawers::DrawWall;
|
wallfunc = &SWPixelFormatDrawers::DrawWall;
|
||||||
}
|
}
|
||||||
|
|
||||||
CameraLight *cameraLight = CameraLight::Instance();
|
|
||||||
if (cameraLight->FixedLightLevel() >= 0)
|
|
||||||
{
|
|
||||||
SetBaseColormap((r_fullbrightignoresectorcolor) ? &FullNormalLight : basecolormap);
|
|
||||||
SetLight(0.0f, cameraLight->FixedLightLevelShade());
|
|
||||||
}
|
|
||||||
else if (cameraLight->FixedColormap() != nullptr)
|
|
||||||
{
|
|
||||||
SetBaseColormap(cameraLight->FixedColormap());
|
|
||||||
SetLight(0.0f, 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
SetBaseColormap(basecolormap);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ namespace swrenderer
|
||||||
class WallDrawerArgs : public DrawerArgs
|
class WallDrawerArgs : public DrawerArgs
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void SetStyle(bool masked, bool additive, fixed_t alpha, FDynamicColormap *basecolormap, bool dynlights);
|
void SetStyle(bool masked, bool additive, fixed_t alpha, bool dynlights);
|
||||||
void SetDest(RenderViewport *viewport);
|
void SetDest(RenderViewport *viewport);
|
||||||
void DrawWall(RenderThread *thread);
|
void DrawWall(RenderThread *thread);
|
||||||
|
|
||||||
|
@ -35,7 +35,6 @@ namespace swrenderer
|
||||||
|
|
||||||
float lightpos;
|
float lightpos;
|
||||||
float lightstep;
|
float lightstep;
|
||||||
int mShade;
|
|
||||||
|
|
||||||
int texwidth;
|
int texwidth;
|
||||||
int texheight;
|
int texheight;
|
||||||
|
|
Loading…
Reference in a new issue