soft: LIGHTMAPS: Add support for LMSHIFT.

Could be extended to support the LMSHIFT BSPX blob. Currently mostly a
cleanup to make DECOUPLEDLM changes more readable.
This commit is contained in:
Daniel Svensson 2023-08-24 16:53:30 +03:00 committed by Denis Pauk
parent d3f0fde1ae
commit bbf4a9f189
4 changed files with 17 additions and 16 deletions

View File

@ -59,6 +59,7 @@ typedef struct msurface_s
short texturemins[2];
short extents[2];
short lmshift;
mtexinfo_t *texinfo;

View File

@ -141,13 +141,13 @@ RecursiveLightPoint (mnode_t *node, vec3_t start, vec3_t end, vec3_t pointcolor)
if (!surf->samples)
return 0;
ds >>= 4;
dt >>= 4;
ds >>= surf->lmshift;
dt >>= surf->lmshift;
lightmap = surf->samples;
VectorCopy (vec3_origin, pointcolor);
lightmap += 3 * (dt * ((surf->extents[0] >> 4) + 1) + ds);
lightmap += 3 * (dt * ((surf->extents[0] >> surf->lmshift) + 1) + ds);
for (maps = 0 ; maps < MAXLIGHTMAPS && surf->styles[maps] != 255 ;
maps++)
@ -166,8 +166,8 @@ RecursiveLightPoint (mnode_t *node, vec3_t start, vec3_t end, vec3_t pointcolor)
pointcolor[j] += lightmap[j] * scale * (1.0 / 255);
}
lightmap += 3 * ((surf->extents[0] >> 4) + 1) *
((surf->extents[1] >> 4) + 1);
lightmap += 3 * ((surf->extents[0] >> surf->lmshift) + 1) *
((surf->extents[1] >> surf->lmshift) + 1);
}
return 1;
@ -252,8 +252,8 @@ R_AddDynamicLights (drawsurf_t* drawsurf)
mtexinfo_t *tex;
surf = drawsurf->surf;
smax = (surf->extents[0]>>4)+1;
tmax = (surf->extents[1]>>4)+1;
smax = (surf->extents[0] >> surf->lmshift) + 1;
tmax = (surf->extents[1] >> surf->lmshift) + 1;
tex = surf->texinfo;
if (blocklight_max <= blocklights + smax*tmax*3)
@ -318,24 +318,23 @@ R_AddDynamicLights (drawsurf_t* drawsurf)
local[0] -= surf->texturemins[0];
local[1] -= surf->texturemins[1];
for (t = 0 ; t<tmax ; t++)
for (t = 0 ; t < tmax ; t++)
{
int s, td;
td = local[1] - t*16;
td = local[1] - t * (1 << surf->lmshift);
if (td < 0)
td = -td;
for (s=0 ; s<smax ; s++)
{
int sd;
sd = local[0] - s*16;
sd = local[0] - s * (1 << surf->lmshift);
if (sd < 0)
sd = -sd;
if (sd > td)
dist = sd + (td>>1);
dist = sd + (td >> 1);
else
dist = td + (sd>>1);
dist = td + (sd >> 1);
for (i=0; i<3; i++)
{
@ -378,8 +377,8 @@ R_BuildLightMap (drawsurf_t* drawsurf)
surf = drawsurf->surf;
smax = (surf->extents[0]>>4)+1;
tmax = (surf->extents[1]>>4)+1;
smax = (surf->extents[0] >> surf->lmshift) + 1;
tmax = (surf->extents[1] >> surf->lmshift) + 1;
size = smax*tmax*3;
if (blocklight_max <= blocklights + size)

View File

@ -447,6 +447,7 @@ Mod_LoadFaces (model_t *loadmodel, byte *mod_base, lump_t *l)
ri.Sys_Error(ERR_DROP, "%s: bad texinfo number", __func__);
}
out->texinfo = loadmodel->texinfo + ti;
out->lmshift = DEFAULT_LMSHIFT;
CalcSurfaceExtents (loadmodel, out);

View File

@ -197,7 +197,7 @@ R_DrawSurface (drawsurf_t *drawsurf)
blocksize = 16 >> drawsurf->surfmip;
blockdivshift = NUM_MIPS - drawsurf->surfmip;
r_lightwidth = (drawsurf->surf->extents[0]>>4)+1;
r_lightwidth = (drawsurf->surf->extents[0] >> drawsurf->surf->lmshift) + 1;
r_numhblocks = drawsurf->surfwidth >> blockdivshift;
r_numvblocks = drawsurf->surfheight >> blockdivshift;