mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-25 13:31:07 +00:00
Remove foggy global
This commit is contained in:
parent
f912b4ab8b
commit
929e07697d
24 changed files with 81 additions and 71 deletions
|
@ -55,7 +55,7 @@ EXTERN_CVAR(Bool, r_fullbrightignoresectorcolor);
|
||||||
|
|
||||||
namespace swrenderer
|
namespace swrenderer
|
||||||
{
|
{
|
||||||
void SWRenderLine::Render(seg_t *line, subsector_t *subsector, sector_t *sector, sector_t *fakebacksector, visplane_t *linefloorplane, visplane_t *lineceilingplane)
|
void SWRenderLine::Render(seg_t *line, subsector_t *subsector, sector_t *sector, sector_t *fakebacksector, visplane_t *linefloorplane, visplane_t *lineceilingplane, bool infog)
|
||||||
{
|
{
|
||||||
static sector_t tempsec; // killough 3/8/98: ceiling/water hack
|
static sector_t tempsec; // killough 3/8/98: ceiling/water hack
|
||||||
bool solid;
|
bool solid;
|
||||||
|
@ -66,6 +66,7 @@ namespace swrenderer
|
||||||
backsector = fakebacksector;
|
backsector = fakebacksector;
|
||||||
floorplane = linefloorplane;
|
floorplane = linefloorplane;
|
||||||
ceilingplane = lineceilingplane;
|
ceilingplane = lineceilingplane;
|
||||||
|
foggy = infog;
|
||||||
|
|
||||||
curline = line;
|
curline = line;
|
||||||
|
|
||||||
|
@ -365,6 +366,7 @@ namespace swrenderer
|
||||||
draw_segment->curline = curline;
|
draw_segment->curline = curline;
|
||||||
draw_segment->bFogBoundary = false;
|
draw_segment->bFogBoundary = false;
|
||||||
draw_segment->bFakeBoundary = false;
|
draw_segment->bFakeBoundary = false;
|
||||||
|
draw_segment->foggy = foggy;
|
||||||
|
|
||||||
Clip3DFloors *clip3d = Clip3DFloors::Instance();
|
Clip3DFloors *clip3d = Clip3DFloors::Instance();
|
||||||
if (clip3d->fake3D & FAKE3D_FAKEMASK) draw_segment->fake = 1;
|
if (clip3d->fake3D & FAKE3D_FAKEMASK) draw_segment->fake = 1;
|
||||||
|
@ -589,7 +591,7 @@ namespace swrenderer
|
||||||
// [ZZ] Only if not an active mirror
|
// [ZZ] Only if not an active mirror
|
||||||
if (!rw_markportal)
|
if (!rw_markportal)
|
||||||
{
|
{
|
||||||
RenderDecal::RenderDecals(curline->sidedef, draw_segment, wallshade, rw_lightleft, rw_lightstep, curline, WallC);
|
RenderDecal::RenderDecals(curline->sidedef, draw_segment, wallshade, rw_lightleft, rw_lightstep, curline, WallC, foggy);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rw_markportal)
|
if (rw_markportal)
|
||||||
|
@ -1077,7 +1079,7 @@ namespace swrenderer
|
||||||
{
|
{
|
||||||
rw_offset = -rw_offset;
|
rw_offset = -rw_offset;
|
||||||
}
|
}
|
||||||
R_DrawWallSegment(frontsector, curline, WallC, rw_pic, x1, x2, walltop, wallbottom, swall, lwall, yscale, MAX(rw_frontcz1, rw_frontcz2), MIN(rw_frontfz1, rw_frontfz2), false, wallshade, rw_offset, rw_light, rw_lightstep, light_list);
|
R_DrawWallSegment(frontsector, curline, WallC, rw_pic, x1, x2, walltop, wallbottom, swall, lwall, yscale, MAX(rw_frontcz1, rw_frontcz2), MIN(rw_frontfz1, rw_frontfz2), false, wallshade, rw_offset, rw_light, rw_lightstep, light_list, foggy);
|
||||||
}
|
}
|
||||||
fillshort(ceilingclip + x1, x2 - x1, viewheight);
|
fillshort(ceilingclip + x1, x2 - x1, viewheight);
|
||||||
fillshort(floorclip + x1, x2 - x1, 0xffff);
|
fillshort(floorclip + x1, x2 - x1, 0xffff);
|
||||||
|
@ -1113,7 +1115,7 @@ namespace swrenderer
|
||||||
{
|
{
|
||||||
rw_offset = -rw_offset;
|
rw_offset = -rw_offset;
|
||||||
}
|
}
|
||||||
R_DrawWallSegment(frontsector, curline, WallC, rw_pic, x1, x2, walltop, wallupper, swall, lwall, yscale, MAX(rw_frontcz1, rw_frontcz2), MIN(rw_backcz1, rw_backcz2), false, wallshade, rw_offset, rw_light, rw_lightstep, light_list);
|
R_DrawWallSegment(frontsector, curline, WallC, rw_pic, x1, x2, walltop, wallupper, swall, lwall, yscale, MAX(rw_frontcz1, rw_frontcz2), MIN(rw_backcz1, rw_backcz2), false, wallshade, rw_offset, rw_light, rw_lightstep, light_list, foggy);
|
||||||
}
|
}
|
||||||
memcpy(ceilingclip + x1, wallupper + x1, (x2 - x1) * sizeof(short));
|
memcpy(ceilingclip + x1, wallupper + x1, (x2 - x1) * sizeof(short));
|
||||||
}
|
}
|
||||||
|
@ -1152,7 +1154,7 @@ namespace swrenderer
|
||||||
{
|
{
|
||||||
rw_offset = -rw_offset;
|
rw_offset = -rw_offset;
|
||||||
}
|
}
|
||||||
R_DrawWallSegment(frontsector, curline, WallC, rw_pic, x1, x2, walllower, wallbottom, swall, lwall, yscale, MAX(rw_backfz1, rw_backfz2), MIN(rw_frontfz1, rw_frontfz2), false, wallshade, rw_offset, rw_light, rw_lightstep, light_list);
|
R_DrawWallSegment(frontsector, curline, WallC, rw_pic, x1, x2, walllower, wallbottom, swall, lwall, yscale, MAX(rw_backfz1, rw_backfz2), MIN(rw_frontfz1, rw_frontfz2), false, wallshade, rw_offset, rw_light, rw_lightstep, light_list, foggy);
|
||||||
}
|
}
|
||||||
memcpy(floorclip + x1, walllower + x1, (x2 - x1) * sizeof(short));
|
memcpy(floorclip + x1, walllower + x1, (x2 - x1) * sizeof(short));
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,7 @@ namespace swrenderer
|
||||||
class SWRenderLine
|
class SWRenderLine
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void Render(seg_t *line, subsector_t *subsector, sector_t *sector, sector_t *fakebacksector, visplane_t *floorplane, visplane_t *ceilingplane);
|
void Render(seg_t *line, subsector_t *subsector, sector_t *sector, sector_t *fakebacksector, visplane_t *floorplane, visplane_t *ceilingplane, bool foggy);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool RenderWallSegment(int x1, int x2);
|
bool RenderWallSegment(int x1, int x2);
|
||||||
|
@ -116,5 +116,7 @@ namespace swrenderer
|
||||||
FTexture *toptexture;
|
FTexture *toptexture;
|
||||||
FTexture *bottomtexture;
|
FTexture *bottomtexture;
|
||||||
FTexture *midtexture;
|
FTexture *midtexture;
|
||||||
|
|
||||||
|
bool foggy;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -431,10 +431,9 @@ namespace swrenderer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ProcessStripedWall(sector_t *frontsector, seg_t *curline, const FWallCoords &WallC, int x1, int x2, short *uwal, short *dwal, float *swal, fixed_t *lwal, double yrepeat, int wallshade, fixed_t xoffset, float light, float lightstep)
|
static void ProcessStripedWall(sector_t *frontsector, seg_t *curline, const FWallCoords &WallC, int x1, int x2, short *uwal, short *dwal, float *swal, fixed_t *lwal, double yrepeat, int wallshade, fixed_t xoffset, float light, float lightstep, bool foggy)
|
||||||
{
|
{
|
||||||
FDynamicColormap *startcolormap = basecolormap;
|
FDynamicColormap *startcolormap = basecolormap;
|
||||||
bool fogginess = foggy;
|
|
||||||
|
|
||||||
short most1[MAXWIDTH], most2[MAXWIDTH], most3[MAXWIDTH];
|
short most1[MAXWIDTH], most2[MAXWIDTH], most3[MAXWIDTH];
|
||||||
short *up, *down;
|
short *up, *down;
|
||||||
|
@ -464,14 +463,14 @@ namespace swrenderer
|
||||||
|
|
||||||
lightlist_t *lit = &frontsector->e->XFloor.lightlist[i];
|
lightlist_t *lit = &frontsector->e->XFloor.lightlist[i];
|
||||||
basecolormap = lit->extra_colormap;
|
basecolormap = lit->extra_colormap;
|
||||||
wallshade = LIGHT2SHADE(curline->sidedef->GetLightLevel(fogginess, *lit->p_lightlevel, lit->lightsource != NULL) + R_ActualExtraLight(foggy));
|
wallshade = LIGHT2SHADE(curline->sidedef->GetLightLevel(foggy, *lit->p_lightlevel, lit->lightsource != NULL) + R_ActualExtraLight(foggy));
|
||||||
}
|
}
|
||||||
|
|
||||||
ProcessNormalWall(WallC, x1, x2, up, dwal, swal, lwal, yrepeat, wallshade, xoffset, light, lightstep);
|
ProcessNormalWall(WallC, x1, x2, up, dwal, swal, lwal, yrepeat, wallshade, xoffset, light, lightstep);
|
||||||
basecolormap = startcolormap;
|
basecolormap = startcolormap;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ProcessWall(sector_t *frontsector, seg_t *curline, const FWallCoords &WallC, int x1, int x2, short *uwal, short *dwal, float *swal, fixed_t *lwal, double yrepeat, int wallshade, fixed_t xoffset, float light, float lightstep, bool mask)
|
static void ProcessWall(sector_t *frontsector, seg_t *curline, const FWallCoords &WallC, int x1, int x2, short *uwal, short *dwal, float *swal, fixed_t *lwal, double yrepeat, int wallshade, fixed_t xoffset, float light, float lightstep, bool mask, bool foggy)
|
||||||
{
|
{
|
||||||
if (mask)
|
if (mask)
|
||||||
{
|
{
|
||||||
|
@ -492,7 +491,7 @@ namespace swrenderer
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ProcessStripedWall(frontsector, curline, WallC, x1, x2, uwal, dwal, swal, lwal, yrepeat, wallshade, xoffset, light, lightstep);
|
ProcessStripedWall(frontsector, curline, WallC, x1, x2, uwal, dwal, swal, lwal, yrepeat, wallshade, xoffset, light, lightstep, foggy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -508,7 +507,7 @@ namespace swrenderer
|
||||||
//
|
//
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
|
|
||||||
static void ProcessWallNP2(sector_t *frontsector, seg_t *curline, const FWallCoords &WallC, int x1, int x2, short *uwal, short *dwal, float *swal, fixed_t *lwal, double yrepeat, double top, double bot, int wallshade, fixed_t xoffset, float light, float lightstep, bool mask)
|
static void ProcessWallNP2(sector_t *frontsector, seg_t *curline, const FWallCoords &WallC, int x1, int x2, short *uwal, short *dwal, float *swal, fixed_t *lwal, double yrepeat, double top, double bot, int wallshade, fixed_t xoffset, float light, float lightstep, bool mask, bool foggy)
|
||||||
{
|
{
|
||||||
short most1[MAXWIDTH], most2[MAXWIDTH], most3[MAXWIDTH];
|
short most1[MAXWIDTH], most2[MAXWIDTH], most3[MAXWIDTH];
|
||||||
short *up, *down;
|
short *up, *down;
|
||||||
|
@ -535,14 +534,14 @@ namespace swrenderer
|
||||||
{
|
{
|
||||||
down[j] = clamp(most3[j], up[j], dwal[j]);
|
down[j] = clamp(most3[j], up[j], dwal[j]);
|
||||||
}
|
}
|
||||||
ProcessWall(frontsector, curline, WallC, x1, x2, up, down, swal, lwal, yrepeat, wallshade, xoffset, light, lightstep, mask);
|
ProcessWall(frontsector, curline, WallC, x1, x2, up, down, swal, lwal, yrepeat, wallshade, xoffset, light, lightstep, mask, foggy);
|
||||||
up = down;
|
up = down;
|
||||||
down = (down == most1) ? most2 : most1;
|
down = (down == most1) ? most2 : most1;
|
||||||
}
|
}
|
||||||
partition -= scaledtexheight;
|
partition -= scaledtexheight;
|
||||||
dc_texturemid -= texheight;
|
dc_texturemid -= texheight;
|
||||||
}
|
}
|
||||||
ProcessWall(frontsector, curline, WallC, x1, x2, up, dwal, swal, lwal, yrepeat, wallshade, xoffset, light, lightstep, mask);
|
ProcessWall(frontsector, curline, WallC, x1, x2, up, dwal, swal, lwal, yrepeat, wallshade, xoffset, light, lightstep, mask, foggy);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // upside down: draw strips from bottom to top
|
{ // upside down: draw strips from bottom to top
|
||||||
|
@ -559,18 +558,18 @@ namespace swrenderer
|
||||||
{
|
{
|
||||||
up[j] = clamp(most3[j], uwal[j], down[j]);
|
up[j] = clamp(most3[j], uwal[j], down[j]);
|
||||||
}
|
}
|
||||||
ProcessWall(frontsector, curline, WallC, x1, x2, up, down, swal, lwal, yrepeat, wallshade, xoffset, light, lightstep, mask);
|
ProcessWall(frontsector, curline, WallC, x1, x2, up, down, swal, lwal, yrepeat, wallshade, xoffset, light, lightstep, mask, foggy);
|
||||||
down = up;
|
down = up;
|
||||||
up = (up == most1) ? most2 : most1;
|
up = (up == most1) ? most2 : most1;
|
||||||
}
|
}
|
||||||
partition -= scaledtexheight;
|
partition -= scaledtexheight;
|
||||||
dc_texturemid -= texheight;
|
dc_texturemid -= texheight;
|
||||||
}
|
}
|
||||||
ProcessWall(frontsector, curline, WallC, x1, x2, uwal, down, swal, lwal, yrepeat, wallshade, xoffset, light, lightstep, mask);
|
ProcessWall(frontsector, curline, WallC, x1, x2, uwal, down, swal, lwal, yrepeat, wallshade, xoffset, light, lightstep, mask, foggy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void R_DrawDrawSeg(sector_t *frontsector, seg_t *curline, const FWallCoords &WallC, FTexture *pic, drawseg_t *ds, int x1, int x2, short *uwal, short *dwal, float *swal, fixed_t *lwal, double yrepeat, int wallshade, fixed_t xoffset, float light, float lightstep)
|
void R_DrawDrawSeg(sector_t *frontsector, seg_t *curline, const FWallCoords &WallC, FTexture *pic, drawseg_t *ds, int x1, int x2, short *uwal, short *dwal, float *swal, fixed_t *lwal, double yrepeat, int wallshade, fixed_t xoffset, float light, float lightstep, bool foggy)
|
||||||
{
|
{
|
||||||
rw_pic = pic;
|
rw_pic = pic;
|
||||||
if (rw_pic->GetHeight() != 1 << rw_pic->HeightBits)
|
if (rw_pic->GetHeight() != 1 << rw_pic->HeightBits)
|
||||||
|
@ -590,26 +589,26 @@ namespace swrenderer
|
||||||
{
|
{
|
||||||
bot = MAX(bot, clip3d->sclipBottom);
|
bot = MAX(bot, clip3d->sclipBottom);
|
||||||
}
|
}
|
||||||
ProcessWallNP2(frontsector, curline, WallC, x1, x2, uwal, dwal, swal, lwal, yrepeat, top, bot, wallshade, xoffset, light, lightstep, true);
|
ProcessWallNP2(frontsector, curline, WallC, x1, x2, uwal, dwal, swal, lwal, yrepeat, top, bot, wallshade, xoffset, light, lightstep, true, foggy);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ProcessWall(frontsector, curline, WallC, x1, x2, uwal, dwal, swal, lwal, yrepeat, wallshade, xoffset, light, lightstep, true);
|
ProcessWall(frontsector, curline, WallC, x1, x2, uwal, dwal, swal, lwal, yrepeat, wallshade, xoffset, light, lightstep, true, foggy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void R_DrawWallSegment(sector_t *frontsector, seg_t *curline, const FWallCoords &WallC, FTexture *pic, int x1, int x2, short *walltop, short *wallbottom, float *swall, fixed_t *lwall, double yscale, double top, double bottom, bool mask, int wallshade, fixed_t xoffset, float light, float lightstep, FLightNode *light_list)
|
void R_DrawWallSegment(sector_t *frontsector, seg_t *curline, const FWallCoords &WallC, FTexture *pic, int x1, int x2, short *walltop, short *wallbottom, float *swall, fixed_t *lwall, double yscale, double top, double bottom, bool mask, int wallshade, fixed_t xoffset, float light, float lightstep, FLightNode *light_list, bool foggy)
|
||||||
{
|
{
|
||||||
rw_pic = pic;
|
rw_pic = pic;
|
||||||
dc_light_list = light_list;
|
dc_light_list = light_list;
|
||||||
if (rw_pic->GetHeight() != 1 << rw_pic->HeightBits)
|
if (rw_pic->GetHeight() != 1 << rw_pic->HeightBits)
|
||||||
{
|
{
|
||||||
ProcessWallNP2(frontsector, curline, WallC, x1, x2, walltop, wallbottom, swall, lwall, yscale, top, bottom, wallshade, xoffset, light, lightstep, false);
|
ProcessWallNP2(frontsector, curline, WallC, x1, x2, walltop, wallbottom, swall, lwall, yscale, top, bottom, wallshade, xoffset, light, lightstep, false, foggy);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ProcessWall(frontsector, curline, WallC, x1, x2, walltop, wallbottom, swall, lwall, yscale, wallshade, xoffset, light, lightstep, false);
|
ProcessWall(frontsector, curline, WallC, x1, x2, walltop, wallbottom, swall, lwall, yscale, wallshade, xoffset, light, lightstep, false, foggy);
|
||||||
}
|
}
|
||||||
dc_light_list = nullptr;
|
dc_light_list = nullptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ namespace swrenderer
|
||||||
uint32_t height;
|
uint32_t height;
|
||||||
};
|
};
|
||||||
|
|
||||||
void R_DrawWallSegment(sector_t *frontsector, seg_t *curline, const FWallCoords &WallC, FTexture *rw_pic, int x1, int x2, short *walltop, short *wallbottom, float *swall, fixed_t *lwall, double yscale, double top, double bottom, bool mask, int wallshade, fixed_t xoffset, float light, float lightstep, FLightNode *light_list);
|
void R_DrawWallSegment(sector_t *frontsector, seg_t *curline, const FWallCoords &WallC, FTexture *rw_pic, int x1, int x2, short *walltop, short *wallbottom, float *swall, fixed_t *lwall, double yscale, double top, double bottom, bool mask, int wallshade, fixed_t xoffset, float light, float lightstep, FLightNode *light_list, bool foggy);
|
||||||
void R_DrawSkySegment(FTexture *rw_pic, int x1, int x2, short *uwal, short *dwal, float *swal, fixed_t *lwal, double yrepeat, int wallshade, fixed_t xoffset, float light, float lightstep, const uint8_t *(*getcol)(FTexture *tex, int col));
|
void R_DrawSkySegment(FTexture *rw_pic, int x1, int x2, short *uwal, short *dwal, float *swal, fixed_t *lwal, double yrepeat, int wallshade, fixed_t xoffset, float light, float lightstep, const uint8_t *(*getcol)(FTexture *tex, int col));
|
||||||
void R_DrawDrawSeg(sector_t *frontsector, seg_t *curline, const FWallCoords &WallC, FTexture *rw_pic, drawseg_t *ds, int x1, int x2, short *uwal, short *dwal, float *swal, fixed_t *lwal, double yrepeat, int wallshade, fixed_t xoffset, float light, float lightstep);
|
void R_DrawDrawSeg(sector_t *frontsector, seg_t *curline, const FWallCoords &WallC, FTexture *rw_pic, drawseg_t *ds, int x1, int x2, short *uwal, short *dwal, float *swal, fixed_t *lwal, double yrepeat, int wallshade, fixed_t xoffset, float light, float lightstep, bool foggy);
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,8 +50,6 @@ namespace swrenderer
|
||||||
FSWColormap *fixedcolormap;
|
FSWColormap *fixedcolormap;
|
||||||
FSpecialColormap *realfixedcolormap;
|
FSpecialColormap *realfixedcolormap;
|
||||||
|
|
||||||
bool foggy; // [RH] ignore extralight and fullbright?
|
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
double CurrentVisibility = 8.f;
|
double CurrentVisibility = 8.f;
|
||||||
|
|
|
@ -57,7 +57,6 @@ namespace swrenderer
|
||||||
extern float r_TiltVisibility;
|
extern float r_TiltVisibility;
|
||||||
extern double r_SpriteVisibility;
|
extern double r_SpriteVisibility;
|
||||||
|
|
||||||
extern bool foggy;
|
|
||||||
extern int fixedlightlev;
|
extern int fixedlightlev;
|
||||||
extern FSWColormap *fixedcolormap;
|
extern FSWColormap *fixedcolormap;
|
||||||
extern FSpecialColormap *realfixedcolormap;
|
extern FSpecialColormap *realfixedcolormap;
|
||||||
|
|
|
@ -398,7 +398,7 @@ namespace swrenderer
|
||||||
}
|
}
|
||||||
|
|
||||||
// kg3D - add fake segs, never rendered
|
// kg3D - add fake segs, never rendered
|
||||||
void RenderOpaquePass::FakeDrawLoop(subsector_t *sub, visplane_t *floorplane, visplane_t *ceilingplane)
|
void RenderOpaquePass::FakeDrawLoop(subsector_t *sub, visplane_t *floorplane, visplane_t *ceilingplane, bool foggy)
|
||||||
{
|
{
|
||||||
int count;
|
int count;
|
||||||
seg_t* line;
|
seg_t* line;
|
||||||
|
@ -410,7 +410,7 @@ namespace swrenderer
|
||||||
{
|
{
|
||||||
if ((line->sidedef) && !(line->sidedef->Flags & WALLF_POLYOBJ))
|
if ((line->sidedef) && !(line->sidedef->Flags & WALLF_POLYOBJ))
|
||||||
{
|
{
|
||||||
renderline.Render(line, InSubsector, frontsector, nullptr, floorplane, ceilingplane);
|
renderline.Render(line, InSubsector, frontsector, nullptr, floorplane, ceilingplane, foggy);
|
||||||
}
|
}
|
||||||
line++;
|
line++;
|
||||||
}
|
}
|
||||||
|
@ -476,7 +476,7 @@ namespace swrenderer
|
||||||
cll = ceilinglightlevel;
|
cll = ceilinglightlevel;
|
||||||
|
|
||||||
// [RH] set foggy flag
|
// [RH] set foggy flag
|
||||||
foggy = level.fadeto || frontsector->ColorMap->Fade || (level.flags & LEVEL_HASFADETABLE);
|
bool foggy = level.fadeto || frontsector->ColorMap->Fade || (level.flags & LEVEL_HASFADETABLE);
|
||||||
|
|
||||||
// kg3D - fake lights
|
// kg3D - fake lights
|
||||||
if (fixedlightlev < 0 && frontsector->e && frontsector->e->XFloor.lightlist.Size())
|
if (fixedlightlev < 0 && frontsector->e && frontsector->e->XFloor.lightlist.Size())
|
||||||
|
@ -620,7 +620,7 @@ namespace swrenderer
|
||||||
if (floorplane)
|
if (floorplane)
|
||||||
floorplane->AddLights(frontsector->lighthead);
|
floorplane->AddLights(frontsector->lighthead);
|
||||||
|
|
||||||
FakeDrawLoop(sub, floorplane, ceilingplane);
|
FakeDrawLoop(sub, floorplane, ceilingplane, foggy);
|
||||||
clip3d->fake3D = 0;
|
clip3d->fake3D = 0;
|
||||||
frontsector = sub->sector;
|
frontsector = sub->sector;
|
||||||
}
|
}
|
||||||
|
@ -685,7 +685,7 @@ namespace swrenderer
|
||||||
if (ceilingplane)
|
if (ceilingplane)
|
||||||
ceilingplane->AddLights(frontsector->lighthead);
|
ceilingplane->AddLights(frontsector->lighthead);
|
||||||
|
|
||||||
FakeDrawLoop(sub, floorplane, ceilingplane);
|
FakeDrawLoop(sub, floorplane, ceilingplane, foggy);
|
||||||
clip3d->fake3D = 0;
|
clip3d->fake3D = 0;
|
||||||
frontsector = sub->sector;
|
frontsector = sub->sector;
|
||||||
}
|
}
|
||||||
|
@ -704,7 +704,7 @@ namespace swrenderer
|
||||||
// lightlevels on floor & ceiling lightlevels in the surrounding area.
|
// lightlevels on floor & ceiling lightlevels in the surrounding area.
|
||||||
// [RH] Handle sprite lighting like Duke 3D: If the ceiling is a sky, sprites are lit by
|
// [RH] Handle sprite lighting like Duke 3D: If the ceiling is a sky, sprites are lit by
|
||||||
// it, otherwise they are lit by the floor.
|
// it, otherwise they are lit by the floor.
|
||||||
AddSprites(sub->sector, frontsector->GetTexture(sector_t::ceiling) == skyflatnum ? ceilinglightlevel : floorlightlevel, FakeSide);
|
AddSprites(sub->sector, frontsector->GetTexture(sector_t::ceiling) == skyflatnum ? ceilinglightlevel : floorlightlevel, FakeSide, foggy);
|
||||||
|
|
||||||
// [RH] Add particles
|
// [RH] Add particles
|
||||||
if ((unsigned int)(sub - subsectors) < (unsigned int)numsubsectors)
|
if ((unsigned int)(sub - subsectors) < (unsigned int)numsubsectors)
|
||||||
|
@ -712,7 +712,7 @@ namespace swrenderer
|
||||||
int shade = LIGHT2SHADE((floorlightlevel + ceilinglightlevel) / 2 + R_ActualExtraLight(foggy));
|
int shade = LIGHT2SHADE((floorlightlevel + ceilinglightlevel) / 2 + R_ActualExtraLight(foggy));
|
||||||
for (WORD i = ParticlesInSubsec[(unsigned int)(sub - subsectors)]; i != NO_PARTICLE; i = Particles[i].snext)
|
for (WORD i = ParticlesInSubsec[(unsigned int)(sub - subsectors)]; i != NO_PARTICLE; i = Particles[i].snext)
|
||||||
{
|
{
|
||||||
RenderParticle::Project(Particles + i, subsectors[sub - subsectors].sector, shade, FakeSide);
|
RenderParticle::Project(Particles + i, subsectors[sub - subsectors].sector, shade, FakeSide, foggy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -746,14 +746,14 @@ namespace swrenderer
|
||||||
clip3d->fakeFloor->validcount = validcount;
|
clip3d->fakeFloor->validcount = validcount;
|
||||||
clip3d->NewClip();
|
clip3d->NewClip();
|
||||||
}
|
}
|
||||||
renderline.Render(line, InSubsector, frontsector, &tempsec, floorplane, ceilingplane); // fake
|
renderline.Render(line, InSubsector, frontsector, &tempsec, floorplane, ceilingplane, foggy); // fake
|
||||||
}
|
}
|
||||||
clip3d->fakeFloor = nullptr;
|
clip3d->fakeFloor = nullptr;
|
||||||
clip3d->fake3D = 0;
|
clip3d->fake3D = 0;
|
||||||
floorplane = backupfp;
|
floorplane = backupfp;
|
||||||
ceilingplane = backupcp;
|
ceilingplane = backupcp;
|
||||||
}
|
}
|
||||||
renderline.Render(line, InSubsector, frontsector, nullptr, floorplane, ceilingplane); // now real
|
renderline.Render(line, InSubsector, frontsector, nullptr, floorplane, ceilingplane, foggy); // now real
|
||||||
}
|
}
|
||||||
line++;
|
line++;
|
||||||
}
|
}
|
||||||
|
@ -809,7 +809,7 @@ namespace swrenderer
|
||||||
fillshort(ceilingclip, viewwidth, !screen->Accel2D && ConBottom > viewwindowy && !bRenderingToCanvas ? (ConBottom - viewwindowy) : 0);
|
fillshort(ceilingclip, viewwidth, !screen->Accel2D && ConBottom > viewwindowy && !bRenderingToCanvas ? (ConBottom - viewwindowy) : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderOpaquePass::AddSprites(sector_t *sec, int lightlevel, WaterFakeSide fakeside)
|
void RenderOpaquePass::AddSprites(sector_t *sec, int lightlevel, WaterFakeSide fakeside, bool foggy)
|
||||||
{
|
{
|
||||||
F3DFloor *fakeceiling = nullptr;
|
F3DFloor *fakeceiling = nullptr;
|
||||||
F3DFloor *fakefloor = nullptr;
|
F3DFloor *fakefloor = nullptr;
|
||||||
|
@ -869,15 +869,15 @@ namespace swrenderer
|
||||||
{
|
{
|
||||||
if ((sprite.renderflags & RF_SPRITETYPEMASK) == RF_WALLSPRITE)
|
if ((sprite.renderflags & RF_SPRITETYPEMASK) == RF_WALLSPRITE)
|
||||||
{
|
{
|
||||||
RenderWallSprite::Project(thing, sprite.pos, sprite.picnum, sprite.spriteScale, sprite.renderflags, spriteshade);
|
RenderWallSprite::Project(thing, sprite.pos, sprite.picnum, sprite.spriteScale, sprite.renderflags, spriteshade, foggy);
|
||||||
}
|
}
|
||||||
else if (sprite.voxel)
|
else if (sprite.voxel)
|
||||||
{
|
{
|
||||||
RenderVoxel::Project(thing, sprite.pos, sprite.voxel, sprite.spriteScale, sprite.renderflags, fakeside, fakefloor, fakeceiling, sec, spriteshade);
|
RenderVoxel::Project(thing, sprite.pos, sprite.voxel, sprite.spriteScale, sprite.renderflags, fakeside, fakefloor, fakeceiling, sec, spriteshade, foggy);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
RenderSprite::Project(thing, sprite.pos, sprite.tex, sprite.spriteScale, sprite.renderflags, fakeside, fakefloor, fakeceiling, sec, spriteshade);
|
RenderSprite::Project(thing, sprite.pos, sprite.tex, sprite.spriteScale, sprite.renderflags, fakeside, fakefloor, fakeceiling, sec, spriteshade, foggy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,9 +68,9 @@ namespace swrenderer
|
||||||
|
|
||||||
bool CheckBBox(float *bspcoord);
|
bool CheckBBox(float *bspcoord);
|
||||||
void AddPolyobjs(subsector_t *sub);
|
void AddPolyobjs(subsector_t *sub);
|
||||||
void FakeDrawLoop(subsector_t *sub, visplane_t *floorplane, visplane_t *ceilingplane);
|
void FakeDrawLoop(subsector_t *sub, visplane_t *floorplane, visplane_t *ceilingplane, bool foggy);
|
||||||
|
|
||||||
void AddSprites(sector_t *sec, int lightlevel, WaterFakeSide fakeside);
|
void AddSprites(sector_t *sec, int lightlevel, WaterFakeSide fakeside, bool foggy);
|
||||||
|
|
||||||
static bool IsPotentiallyVisible(AActor *thing);
|
static bool IsPotentiallyVisible(AActor *thing);
|
||||||
static bool GetThingSprite(AActor *thing, ThingSprite &sprite);
|
static bool GetThingSprite(AActor *thing, ThingSprite &sprite);
|
||||||
|
|
|
@ -215,6 +215,7 @@ namespace swrenderer
|
||||||
draw_segment->bFogBoundary = false;
|
draw_segment->bFogBoundary = false;
|
||||||
draw_segment->curline = nullptr;
|
draw_segment->curline = nullptr;
|
||||||
draw_segment->fake = 0;
|
draw_segment->fake = 0;
|
||||||
|
draw_segment->foggy = false;
|
||||||
memcpy(openings + draw_segment->sprbottomclip, floorclip + pl->left, (pl->right - pl->left) * sizeof(short));
|
memcpy(openings + draw_segment->sprbottomclip, floorclip + pl->left, (pl->right - pl->left) * sizeof(short));
|
||||||
memcpy(openings + draw_segment->sprtopclip, ceilingclip + pl->left, (pl->right - pl->left) * sizeof(short));
|
memcpy(openings + draw_segment->sprtopclip, ceilingclip + pl->left, (pl->right - pl->left) * sizeof(short));
|
||||||
|
|
||||||
|
|
|
@ -233,14 +233,14 @@ namespace swrenderer
|
||||||
spr->Style.BaseColormap = mybasecolormap;
|
spr->Style.BaseColormap = mybasecolormap;
|
||||||
spr->Style.ColormapNum = fixedlightlev >> COLORMAPSHIFT;
|
spr->Style.ColormapNum = fixedlightlev >> COLORMAPSHIFT;
|
||||||
}
|
}
|
||||||
else if (!foggy && (spr->renderflags & RF_FULLBRIGHT))
|
else if (!spr->foggy && (spr->renderflags & RF_FULLBRIGHT))
|
||||||
{ // full bright
|
{ // full bright
|
||||||
spr->Style.BaseColormap = (r_fullbrightignoresectorcolor) ? &FullNormalLight : mybasecolormap;
|
spr->Style.BaseColormap = (r_fullbrightignoresectorcolor) ? &FullNormalLight : mybasecolormap;
|
||||||
spr->Style.ColormapNum = 0;
|
spr->Style.ColormapNum = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{ // diminished light
|
{ // diminished light
|
||||||
int spriteshade = LIGHT2SHADE(sec->lightlevel + R_ActualExtraLight(foggy));
|
int spriteshade = LIGHT2SHADE(sec->lightlevel + R_ActualExtraLight(spr->foggy));
|
||||||
spr->Style.BaseColormap = mybasecolormap;
|
spr->Style.BaseColormap = mybasecolormap;
|
||||||
spr->Style.ColormapNum = GETPALOOKUP(r_SpriteVisibility / MAX(MINZ, (double)spr->depth), spriteshade);
|
spr->Style.ColormapNum = GETPALOOKUP(r_SpriteVisibility / MAX(MINZ, (double)spr->depth), spriteshade);
|
||||||
}
|
}
|
||||||
|
|
|
@ -189,7 +189,7 @@ namespace swrenderer
|
||||||
{
|
{
|
||||||
lightlist_t *lit = &frontsector->e->XFloor.lightlist[i];
|
lightlist_t *lit = &frontsector->e->XFloor.lightlist[i];
|
||||||
basecolormap = lit->extra_colormap;
|
basecolormap = lit->extra_colormap;
|
||||||
wallshade = LIGHT2SHADE(curline->sidedef->GetLightLevel(foggy, *lit->p_lightlevel, lit->lightsource != nullptr) + R_ActualExtraLight(foggy));
|
wallshade = LIGHT2SHADE(curline->sidedef->GetLightLevel(ds->foggy, *lit->p_lightlevel, lit->lightsource != nullptr) + R_ActualExtraLight(ds->foggy));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -420,7 +420,7 @@ namespace swrenderer
|
||||||
|
|
||||||
rw_offset = 0;
|
rw_offset = 0;
|
||||||
rw_pic = tex;
|
rw_pic = tex;
|
||||||
R_DrawDrawSeg(frontsector, curline, WallC, rw_pic, ds, x1, x2, mceilingclip, mfloorclip, MaskedSWall, maskedtexturecol, ds->yscale, wallshade, rw_offset, rw_light, rw_lightstep);
|
R_DrawDrawSeg(frontsector, curline, WallC, rw_pic, ds, x1, x2, mceilingclip, mfloorclip, MaskedSWall, maskedtexturecol, ds->yscale, wallshade, rw_offset, rw_light, rw_lightstep, ds->foggy);
|
||||||
}
|
}
|
||||||
|
|
||||||
clearfog:
|
clearfog:
|
||||||
|
@ -547,7 +547,7 @@ namespace swrenderer
|
||||||
}
|
}
|
||||||
|
|
||||||
PrepLWall(lwall, curline->sidedef->TexelLength*xscale, ds->sx1, ds->sx2, WallT);
|
PrepLWall(lwall, curline->sidedef->TexelLength*xscale, ds->sx1, ds->sx2, WallT);
|
||||||
R_DrawDrawSeg(frontsector, curline, WallC, rw_pic, ds, x1, x2, wallupper, walllower, MaskedSWall, lwall, yscale, wallshade, rw_offset, rw_light, rw_lightstep);
|
R_DrawDrawSeg(frontsector, curline, WallC, rw_pic, ds, x1, x2, wallupper, walllower, MaskedSWall, lwall, yscale, wallshade, rw_offset, rw_light, rw_lightstep, ds->foggy);
|
||||||
R_FinishSetPatchStyle();
|
R_FinishSetPatchStyle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -746,7 +746,7 @@ namespace swrenderer
|
||||||
{
|
{
|
||||||
lightlist_t *lit = &backsector->e->XFloor.lightlist[j];
|
lightlist_t *lit = &backsector->e->XFloor.lightlist[j];
|
||||||
basecolormap = lit->extra_colormap;
|
basecolormap = lit->extra_colormap;
|
||||||
wallshade = LIGHT2SHADE(curline->sidedef->GetLightLevel(foggy, *lit->p_lightlevel, lit->lightsource != nullptr) + R_ActualExtraLight(foggy));
|
wallshade = LIGHT2SHADE(curline->sidedef->GetLightLevel(ds->foggy, *lit->p_lightlevel, lit->lightsource != nullptr) + R_ActualExtraLight(ds->foggy));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -759,7 +759,7 @@ namespace swrenderer
|
||||||
{
|
{
|
||||||
lightlist_t *lit = &frontsector->e->XFloor.lightlist[j];
|
lightlist_t *lit = &frontsector->e->XFloor.lightlist[j];
|
||||||
basecolormap = lit->extra_colormap;
|
basecolormap = lit->extra_colormap;
|
||||||
wallshade = LIGHT2SHADE(curline->sidedef->GetLightLevel(foggy, *lit->p_lightlevel, lit->lightsource != nullptr) + R_ActualExtraLight(foggy));
|
wallshade = LIGHT2SHADE(curline->sidedef->GetLightLevel(ds->foggy, *lit->p_lightlevel, lit->lightsource != nullptr) + R_ActualExtraLight(ds->foggy));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -920,7 +920,7 @@ namespace swrenderer
|
||||||
{
|
{
|
||||||
lightlist_t *lit = &backsector->e->XFloor.lightlist[j];
|
lightlist_t *lit = &backsector->e->XFloor.lightlist[j];
|
||||||
basecolormap = lit->extra_colormap;
|
basecolormap = lit->extra_colormap;
|
||||||
wallshade = LIGHT2SHADE(curline->sidedef->GetLightLevel(foggy, *lit->p_lightlevel, lit->lightsource != nullptr) + R_ActualExtraLight(foggy));
|
wallshade = LIGHT2SHADE(curline->sidedef->GetLightLevel(ds->foggy, *lit->p_lightlevel, lit->lightsource != nullptr) + R_ActualExtraLight(ds->foggy));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -933,7 +933,7 @@ namespace swrenderer
|
||||||
{
|
{
|
||||||
lightlist_t *lit = &frontsector->e->XFloor.lightlist[j];
|
lightlist_t *lit = &frontsector->e->XFloor.lightlist[j];
|
||||||
basecolormap = lit->extra_colormap;
|
basecolormap = lit->extra_colormap;
|
||||||
wallshade = LIGHT2SHADE(curline->sidedef->GetLightLevel(foggy, *lit->p_lightlevel, lit->lightsource != nullptr) + R_ActualExtraLight(foggy));
|
wallshade = LIGHT2SHADE(curline->sidedef->GetLightLevel(ds->foggy, *lit->p_lightlevel, lit->lightsource != nullptr) + R_ActualExtraLight(ds->foggy));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,6 +32,7 @@ namespace swrenderer
|
||||||
uint8_t bFogBoundary;
|
uint8_t bFogBoundary;
|
||||||
uint8_t bFakeBoundary; // for fake walls
|
uint8_t bFakeBoundary; // for fake walls
|
||||||
int shade;
|
int shade;
|
||||||
|
bool foggy;
|
||||||
|
|
||||||
// Pointers to lists for sprite clipping, all three adjusted so [x1] is first value.
|
// Pointers to lists for sprite clipping, all three adjusted so [x1] is first value.
|
||||||
ptrdiff_t sprtopclip; // type short
|
ptrdiff_t sprtopclip; // type short
|
||||||
|
|
|
@ -47,11 +47,11 @@ EXTERN_CVAR(Bool, r_fullbrightignoresectorcolor);
|
||||||
|
|
||||||
namespace swrenderer
|
namespace swrenderer
|
||||||
{
|
{
|
||||||
void RenderDecal::RenderDecals(side_t *sidedef, drawseg_t *draw_segment, int wallshade, float lightleft, float lightstep, seg_t *curline, const FWallCoords &wallC)
|
void RenderDecal::RenderDecals(side_t *sidedef, drawseg_t *draw_segment, int wallshade, float lightleft, float lightstep, seg_t *curline, const FWallCoords &wallC, bool foggy)
|
||||||
{
|
{
|
||||||
for (DBaseDecal *decal = sidedef->AttachedDecals; decal != NULL; decal = decal->WallNext)
|
for (DBaseDecal *decal = sidedef->AttachedDecals; decal != NULL; decal = decal->WallNext)
|
||||||
{
|
{
|
||||||
Render(sidedef, decal, draw_segment, wallshade, lightleft, lightstep, curline, wallC, 0);
|
Render(sidedef, decal, draw_segment, wallshade, lightleft, lightstep, curline, wallC, foggy, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ namespace swrenderer
|
||||||
// = 1: drawing masked textures (including sprites)
|
// = 1: drawing masked textures (including sprites)
|
||||||
// Currently, only pass = 0 is done or used
|
// Currently, only pass = 0 is done or used
|
||||||
|
|
||||||
void RenderDecal::Render(side_t *wall, DBaseDecal *decal, drawseg_t *clipper, int wallshade, float lightleft, float lightstep, seg_t *curline, FWallCoords WallC, int pass)
|
void RenderDecal::Render(side_t *wall, DBaseDecal *decal, drawseg_t *clipper, int wallshade, float lightleft, float lightstep, seg_t *curline, FWallCoords WallC, bool foggy, int pass)
|
||||||
{
|
{
|
||||||
DVector2 decal_left, decal_right, decal_pos;
|
DVector2 decal_left, decal_right, decal_pos;
|
||||||
int x1, x2;
|
int x1, x2;
|
||||||
|
|
|
@ -23,10 +23,10 @@ namespace swrenderer
|
||||||
class RenderDecal
|
class RenderDecal
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static void RenderDecals(side_t *wall, drawseg_t *draw_segment, int wallshade, float lightleft, float lightstep, seg_t *curline, const FWallCoords &wallC);
|
static void RenderDecals(side_t *wall, drawseg_t *draw_segment, int wallshade, float lightleft, float lightstep, seg_t *curline, const FWallCoords &wallC, bool foggy);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void Render(side_t *wall, DBaseDecal *first, drawseg_t *clipper, int wallshade, float lightleft, float lightstep, seg_t *curline, FWallCoords wallC, int pass);
|
static void Render(side_t *wall, DBaseDecal *first, drawseg_t *clipper, int wallshade, float lightleft, float lightstep, seg_t *curline, FWallCoords wallC, bool foggy, int pass);
|
||||||
static void DrawColumn(int x, FTexture *WallSpriteTile, float maskedScaleY, bool sprflipvert, const short *mfloorclip, const short *mceilingclip);
|
static void DrawColumn(int x, FTexture *WallSpriteTile, float maskedScaleY, bool sprflipvert, const short *mfloorclip, const short *mceilingclip);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@ EXTERN_CVAR(Bool, r_fullbrightignoresectorcolor);
|
||||||
|
|
||||||
namespace swrenderer
|
namespace swrenderer
|
||||||
{
|
{
|
||||||
void RenderParticle::Project(particle_t *particle, const sector_t *sector, int shade, WaterFakeSide fakeside)
|
void RenderParticle::Project(particle_t *particle, const sector_t *sector, int shade, WaterFakeSide fakeside, bool foggy)
|
||||||
{
|
{
|
||||||
double tr_x, tr_y;
|
double tr_x, tr_y;
|
||||||
double tx, ty;
|
double tx, ty;
|
||||||
|
@ -200,6 +200,7 @@ namespace swrenderer
|
||||||
vis->FakeFlatStat = fakeside;
|
vis->FakeFlatStat = fakeside;
|
||||||
vis->floorclip = 0;
|
vis->floorclip = 0;
|
||||||
vis->Style.ColormapNum = 0;
|
vis->Style.ColormapNum = 0;
|
||||||
|
vis->foggy = foggy;
|
||||||
|
|
||||||
if (fixedlightlev >= 0)
|
if (fixedlightlev >= 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,7 +21,7 @@ namespace swrenderer
|
||||||
class RenderParticle
|
class RenderParticle
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static void Project(particle_t *, const sector_t *sector, int shade, WaterFakeSide fakeside);
|
static void Project(particle_t *, const sector_t *sector, int shade, WaterFakeSide fakeside, bool foggy);
|
||||||
static void Render(vissprite_t *);
|
static void Render(vissprite_t *);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -136,7 +136,7 @@ namespace swrenderer
|
||||||
}
|
}
|
||||||
|
|
||||||
// [RH] set foggy flag
|
// [RH] set foggy flag
|
||||||
foggy = (level.fadeto || basecolormap->Fade || (level.flags & LEVEL_HASFADETABLE));
|
bool foggy = (level.fadeto || basecolormap->Fade || (level.flags & LEVEL_HASFADETABLE));
|
||||||
|
|
||||||
// get light level
|
// get light level
|
||||||
lightnum = ((floorlight + ceilinglight) >> 1) + R_ActualExtraLight(foggy);
|
lightnum = ((floorlight + ceilinglight) >> 1) + R_ActualExtraLight(foggy);
|
||||||
|
@ -478,7 +478,7 @@ namespace swrenderer
|
||||||
vis->Style.BaseColormap = (r_fullbrightignoresectorcolor) ? &FullNormalLight : mybasecolormap;
|
vis->Style.BaseColormap = (r_fullbrightignoresectorcolor) ? &FullNormalLight : mybasecolormap;
|
||||||
vis->Style.ColormapNum = fixedlightlev >> COLORMAPSHIFT;
|
vis->Style.ColormapNum = fixedlightlev >> COLORMAPSHIFT;
|
||||||
}
|
}
|
||||||
else if (!foggy && pspr->GetState()->GetFullbright())
|
else if (!vis->foggy && pspr->GetState()->GetFullbright())
|
||||||
{ // full bright
|
{ // full bright
|
||||||
vis->Style.BaseColormap = (r_fullbrightignoresectorcolor) ? &FullNormalLight : mybasecolormap; // [RH] use basecolormap
|
vis->Style.BaseColormap = (r_fullbrightignoresectorcolor) ? &FullNormalLight : mybasecolormap; // [RH] use basecolormap
|
||||||
vis->Style.ColormapNum = 0;
|
vis->Style.ColormapNum = 0;
|
||||||
|
@ -535,7 +535,7 @@ namespace swrenderer
|
||||||
// [SP] If emulating GZDoom fullbright, disable acceleration
|
// [SP] If emulating GZDoom fullbright, disable acceleration
|
||||||
if (r_fullbrightignoresectorcolor && fixedlightlev >= 0)
|
if (r_fullbrightignoresectorcolor && fixedlightlev >= 0)
|
||||||
mybasecolormap = &FullNormalLight;
|
mybasecolormap = &FullNormalLight;
|
||||||
if (r_fullbrightignoresectorcolor && !foggy && pspr->GetState()->GetFullbright())
|
if (r_fullbrightignoresectorcolor && !vis->foggy && pspr->GetState()->GetFullbright())
|
||||||
mybasecolormap = &FullNormalLight;
|
mybasecolormap = &FullNormalLight;
|
||||||
colormap_to_use = mybasecolormap;
|
colormap_to_use = mybasecolormap;
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,7 @@ EXTERN_CVAR(Bool, r_fullbrightignoresectorcolor)
|
||||||
|
|
||||||
namespace swrenderer
|
namespace swrenderer
|
||||||
{
|
{
|
||||||
void RenderSprite::Project(AActor *thing, const DVector3 &pos, FTexture *tex, const DVector2 &spriteScale, int renderflags, WaterFakeSide fakeside, F3DFloor *fakefloor, F3DFloor *fakeceiling, sector_t *current_sector, int spriteshade)
|
void RenderSprite::Project(AActor *thing, const DVector3 &pos, FTexture *tex, const DVector2 &spriteScale, int renderflags, WaterFakeSide fakeside, F3DFloor *fakefloor, F3DFloor *fakeceiling, sector_t *current_sector, int spriteshade, bool foggy)
|
||||||
{
|
{
|
||||||
// transform the origin point
|
// transform the origin point
|
||||||
double tr_x = pos.X - ViewPos.X;
|
double tr_x = pos.X - ViewPos.X;
|
||||||
|
@ -209,6 +209,8 @@ namespace swrenderer
|
||||||
vis->bIsVoxel = false;
|
vis->bIsVoxel = false;
|
||||||
vis->bWallSprite = false;
|
vis->bWallSprite = false;
|
||||||
|
|
||||||
|
vis->foggy = foggy;
|
||||||
|
|
||||||
// The software renderer cannot invert the source without inverting the overlay
|
// The software renderer cannot invert the source without inverting the overlay
|
||||||
// too. That means if the source is inverted, we need to do the reverse of what
|
// too. That means if the source is inverted, we need to do the reverse of what
|
||||||
// the invert overlay flag says to do.
|
// the invert overlay flag says to do.
|
||||||
|
@ -261,7 +263,7 @@ namespace swrenderer
|
||||||
vis->Style.BaseColormap = mybasecolormap;
|
vis->Style.BaseColormap = mybasecolormap;
|
||||||
vis->Style.ColormapNum = fixedlightlev >> COLORMAPSHIFT;
|
vis->Style.ColormapNum = fixedlightlev >> COLORMAPSHIFT;
|
||||||
}
|
}
|
||||||
else if (!foggy && ((renderflags & RF_FULLBRIGHT) || (thing->flags5 & MF5_BRIGHT)))
|
else if (!vis->foggy && ((renderflags & RF_FULLBRIGHT) || (thing->flags5 & MF5_BRIGHT)))
|
||||||
{ // full bright
|
{ // full bright
|
||||||
vis->Style.BaseColormap = (r_fullbrightignoresectorcolor) ? &FullNormalLight : mybasecolormap;
|
vis->Style.BaseColormap = (r_fullbrightignoresectorcolor) ? &FullNormalLight : mybasecolormap;
|
||||||
vis->Style.ColormapNum = 0;
|
vis->Style.ColormapNum = 0;
|
||||||
|
|
|
@ -20,7 +20,7 @@ namespace swrenderer
|
||||||
class RenderSprite
|
class RenderSprite
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static void Project(AActor *thing, const DVector3 &pos, FTexture *tex, const DVector2 &spriteScale, int renderflags, WaterFakeSide fakeside, F3DFloor *fakefloor, F3DFloor *fakeceiling, sector_t *current_sector, int spriteshade);
|
static void Project(AActor *thing, const DVector3 &pos, FTexture *tex, const DVector2 &spriteScale, int renderflags, WaterFakeSide fakeside, F3DFloor *fakefloor, F3DFloor *fakeceiling, sector_t *current_sector, int spriteshade, bool foggy);
|
||||||
static void Render(vissprite_t *vis, const short *mfloorclip, const short *mceilingclip);
|
static void Render(vissprite_t *vis, const short *mfloorclip, const short *mceilingclip);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,6 +86,8 @@ namespace swrenderer
|
||||||
visstyle_t Style;
|
visstyle_t Style;
|
||||||
int CurrentPortalUniq; // [ZZ] to identify the portal that this thing is in. used for clipping.
|
int CurrentPortalUniq; // [ZZ] to identify the portal that this thing is in. used for clipping.
|
||||||
|
|
||||||
|
bool foggy;
|
||||||
|
|
||||||
vissprite_t() {}
|
vissprite_t() {}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,7 @@ EXTERN_CVAR(Bool, r_fullbrightignoresectorcolor)
|
||||||
|
|
||||||
namespace swrenderer
|
namespace swrenderer
|
||||||
{
|
{
|
||||||
void RenderVoxel::Project(AActor *thing, DVector3 pos, FVoxelDef *voxel, const DVector2 &spriteScale, int renderflags, WaterFakeSide fakeside, F3DFloor *fakefloor, F3DFloor *fakeceiling, sector_t *current_sector, int spriteshade)
|
void RenderVoxel::Project(AActor *thing, DVector3 pos, FVoxelDef *voxel, const DVector2 &spriteScale, int renderflags, WaterFakeSide fakeside, F3DFloor *fakefloor, F3DFloor *fakeceiling, sector_t *current_sector, int spriteshade, bool foggy)
|
||||||
{
|
{
|
||||||
// transform the origin point
|
// transform the origin point
|
||||||
double tr_x = pos.X - ViewPos.X;
|
double tr_x = pos.X - ViewPos.X;
|
||||||
|
@ -155,6 +155,8 @@ namespace swrenderer
|
||||||
vis->voxel = voxel->Voxel;
|
vis->voxel = voxel->Voxel;
|
||||||
vis->bIsVoxel = true;
|
vis->bIsVoxel = true;
|
||||||
vis->bWallSprite = false;
|
vis->bWallSprite = false;
|
||||||
|
vis->foggy = foggy;
|
||||||
|
|
||||||
RenderTranslucentPass::DrewAVoxel = true;
|
RenderTranslucentPass::DrewAVoxel = true;
|
||||||
|
|
||||||
// The software renderer cannot invert the source without inverting the overlay
|
// The software renderer cannot invert the source without inverting the overlay
|
||||||
|
@ -209,7 +211,7 @@ namespace swrenderer
|
||||||
vis->Style.BaseColormap = mybasecolormap;
|
vis->Style.BaseColormap = mybasecolormap;
|
||||||
vis->Style.ColormapNum = fixedlightlev >> COLORMAPSHIFT;
|
vis->Style.ColormapNum = fixedlightlev >> COLORMAPSHIFT;
|
||||||
}
|
}
|
||||||
else if (!foggy && ((renderflags & RF_FULLBRIGHT) || (thing->flags5 & MF5_BRIGHT)))
|
else if (!vis->foggy && ((renderflags & RF_FULLBRIGHT) || (thing->flags5 & MF5_BRIGHT)))
|
||||||
{ // full bright
|
{ // full bright
|
||||||
vis->Style.BaseColormap = (r_fullbrightignoresectorcolor) ? &FullNormalLight : mybasecolormap;
|
vis->Style.BaseColormap = (r_fullbrightignoresectorcolor) ? &FullNormalLight : mybasecolormap;
|
||||||
vis->Style.ColormapNum = 0;
|
vis->Style.ColormapNum = 0;
|
||||||
|
|
|
@ -55,7 +55,7 @@ namespace swrenderer
|
||||||
class RenderVoxel
|
class RenderVoxel
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static void Project(AActor *thing, DVector3 pos, FVoxelDef *voxel, const DVector2 &spriteScale, int renderflags, WaterFakeSide fakeside, F3DFloor *fakefloor, F3DFloor *fakeceiling, sector_t *current_sector, int spriteshade);
|
static void Project(AActor *thing, DVector3 pos, FVoxelDef *voxel, const DVector2 &spriteScale, int renderflags, WaterFakeSide fakeside, F3DFloor *fakefloor, F3DFloor *fakeceiling, sector_t *current_sector, int spriteshade, bool foggy);
|
||||||
static void Render(vissprite_t *sprite, int minZ, int maxZ, short *cliptop, short *clipbottom);
|
static void Render(vissprite_t *sprite, int minZ, int maxZ, short *cliptop, short *clipbottom);
|
||||||
|
|
||||||
static void Deinit();
|
static void Deinit();
|
||||||
|
|
|
@ -62,7 +62,7 @@ EXTERN_CVAR(Bool, r_fullbrightignoresectorcolor);
|
||||||
|
|
||||||
namespace swrenderer
|
namespace swrenderer
|
||||||
{
|
{
|
||||||
void RenderWallSprite::Project(AActor *thing, const DVector3 &pos, FTextureID picnum, const DVector2 &scale, int renderflags, int spriteshade)
|
void RenderWallSprite::Project(AActor *thing, const DVector3 &pos, FTextureID picnum, const DVector2 &scale, int renderflags, int spriteshade, bool foggy)
|
||||||
{
|
{
|
||||||
FWallCoords wallc;
|
FWallCoords wallc;
|
||||||
double x1, x2;
|
double x1, x2;
|
||||||
|
@ -136,6 +136,7 @@ namespace swrenderer
|
||||||
r_SpriteVisibility / MAX(tz, MINZ), spriteshade);
|
r_SpriteVisibility / MAX(tz, MINZ), spriteshade);
|
||||||
vis->Style.BaseColormap = basecolormap;
|
vis->Style.BaseColormap = basecolormap;
|
||||||
vis->wallc = wallc;
|
vis->wallc = wallc;
|
||||||
|
vis->foggy = foggy;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderWallSprite::Render(vissprite_t *spr, const short *mfloorclip, const short *mceilingclip)
|
void RenderWallSprite::Render(vissprite_t *spr, const short *mfloorclip, const short *mceilingclip)
|
||||||
|
@ -174,7 +175,7 @@ namespace swrenderer
|
||||||
rereadcolormap = false;
|
rereadcolormap = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
int shade = LIGHT2SHADE(spr->sector->lightlevel + R_ActualExtraLight(foggy));
|
int shade = LIGHT2SHADE(spr->sector->lightlevel + R_ActualExtraLight(spr->foggy));
|
||||||
double GlobVis = r_WallVisibility;
|
double GlobVis = r_WallVisibility;
|
||||||
float lightleft = float(GlobVis / spr->wallc.sz1);
|
float lightleft = float(GlobVis / spr->wallc.sz1);
|
||||||
float lightstep = float((GlobVis / spr->wallc.sz2 - lightleft) / (spr->wallc.sx2 - spr->wallc.sx1));
|
float lightstep = float((GlobVis / spr->wallc.sz2 - lightleft) / (spr->wallc.sx2 - spr->wallc.sx1));
|
||||||
|
@ -183,7 +184,7 @@ namespace swrenderer
|
||||||
R_SetColorMapLight(usecolormap, 0, FIXEDLIGHT2SHADE(fixedlightlev));
|
R_SetColorMapLight(usecolormap, 0, FIXEDLIGHT2SHADE(fixedlightlev));
|
||||||
else if (fixedcolormap != NULL)
|
else if (fixedcolormap != NULL)
|
||||||
R_SetColorMapLight(fixedcolormap, 0, 0);
|
R_SetColorMapLight(fixedcolormap, 0, 0);
|
||||||
else if (!foggy && (spr->renderflags & RF_FULLBRIGHT))
|
else if (!spr->foggy && (spr->renderflags & RF_FULLBRIGHT))
|
||||||
R_SetColorMapLight((r_fullbrightignoresectorcolor) ? &FullNormalLight : usecolormap, 0, 0);
|
R_SetColorMapLight((r_fullbrightignoresectorcolor) ? &FullNormalLight : usecolormap, 0, 0);
|
||||||
else
|
else
|
||||||
calclighting = true;
|
calclighting = true;
|
||||||
|
|
|
@ -20,7 +20,7 @@ namespace swrenderer
|
||||||
class RenderWallSprite
|
class RenderWallSprite
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static void Project(AActor *thing, const DVector3 &pos, FTextureID picnum, const DVector2 &scale, int renderflags, int spriteshade);
|
static void Project(AActor *thing, const DVector3 &pos, FTextureID picnum, const DVector2 &scale, int renderflags, int spriteshade, bool foggy);
|
||||||
static void Render(vissprite_t *spr, const short *mfloorclip, const short *mceilingclip);
|
static void Render(vissprite_t *spr, const short *mfloorclip, const short *mceilingclip);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Reference in a new issue