diff --git a/src/rendering/swrenderer/drawers/r_draw_pal.h b/src/rendering/swrenderer/drawers/r_draw_pal.h index cb2af1bcb..14b1e3bc2 100644 --- a/src/rendering/swrenderer/drawers/r_draw_pal.h +++ b/src/rendering/swrenderer/drawers/r_draw_pal.h @@ -344,15 +344,7 @@ namespace swrenderer void DrawWall(const WallDrawerArgs &args) override { Queue->Push(args); } void DrawWallMasked(const WallDrawerArgs &args) override { Queue->Push(args); } - - void DrawWallAdd(const WallDrawerArgs &args) override - { - if (!args.lightlist) - Queue->Push(args); - else - Queue->Push(args); - } - + void DrawWallAdd(const WallDrawerArgs &args) override { Queue->Push(args); } void DrawWallAddClamp(const WallDrawerArgs &args) override { Queue->Push(args); } void DrawWallSubClamp(const WallDrawerArgs &args) override { Queue->Push(args); } void DrawWallRevSubClamp(const WallDrawerArgs &args) override { Queue->Push(args); } diff --git a/src/rendering/swrenderer/line/r_walldraw.cpp b/src/rendering/swrenderer/line/r_walldraw.cpp index 77846b53d..b8a8fb089 100644 --- a/src/rendering/swrenderer/line/r_walldraw.cpp +++ b/src/rendering/swrenderer/line/r_walldraw.cpp @@ -130,11 +130,11 @@ namespace swrenderer // Textures that aren't masked can use the faster opaque drawer if (!pic->GetTexture()->isMasked() && mask && alpha >= OPAQUE && !additive) { - drawerargs.SetStyle(true, false, OPAQUE, mLight.GetBaseColormap()); + drawerargs.SetStyle(true, false, OPAQUE, mLight.GetBaseColormap(), light_list); } else { - drawerargs.SetStyle(mask, additive, alpha, mLight.GetBaseColormap()); + drawerargs.SetStyle(mask, additive, alpha, mLight.GetBaseColormap(), light_list); } int count = x2 - x1; diff --git a/src/rendering/swrenderer/viewport/r_walldrawer.cpp b/src/rendering/swrenderer/viewport/r_walldrawer.cpp index e7bdbc112..06435d0c5 100644 --- a/src/rendering/swrenderer/viewport/r_walldrawer.cpp +++ b/src/rendering/swrenderer/viewport/r_walldrawer.cpp @@ -35,11 +35,11 @@ namespace swrenderer (thread->Drawers(dc_viewport)->*wallfunc)(*this); } - void WallDrawerArgs::SetStyle(bool masked, bool additive, fixed_t alpha, FDynamicColormap *basecolormap) + void WallDrawerArgs::SetStyle(bool masked, bool additive, fixed_t alpha, FDynamicColormap *basecolormap, bool dynlights) { if (alpha < OPAQUE || additive) { - if (!additive) + if (!additive && !dynlights) { wallfunc = &SWPixelFormatDrawers::DrawWallAdd; dc_srcblend = Col2RGB8[alpha >> 10]; @@ -47,6 +47,14 @@ namespace swrenderer dc_srcalpha = alpha; dc_destalpha = OPAQUE - alpha; } + else if (!additive) + { + wallfunc = &SWPixelFormatDrawers::DrawWallAddClamp; + dc_srcblend = Col2RGB8_LessPrecision[alpha >> 10]; + dc_destblend = Col2RGB8_LessPrecision[(OPAQUE - alpha) >> 10]; + dc_srcalpha = alpha; + dc_destalpha = OPAQUE - alpha; + } else { wallfunc = &SWPixelFormatDrawers::DrawWallAddClamp; diff --git a/src/rendering/swrenderer/viewport/r_walldrawer.h b/src/rendering/swrenderer/viewport/r_walldrawer.h index 45ee10610..008422ea7 100644 --- a/src/rendering/swrenderer/viewport/r_walldrawer.h +++ b/src/rendering/swrenderer/viewport/r_walldrawer.h @@ -15,7 +15,7 @@ namespace swrenderer class WallDrawerArgs : public DrawerArgs { public: - void SetStyle(bool masked, bool additive, fixed_t alpha, FDynamicColormap *basecolormap); + void SetStyle(bool masked, bool additive, fixed_t alpha, FDynamicColormap *basecolormap, bool dynlights); void SetDest(RenderViewport *viewport); void DrawWall(RenderThread *thread);