-cvar_t gl_lightmaps = {0, "gl_lightmaps", "0"};
-
-/*
-// FIXME: these arrays are huge!
-int r_q1bsp_maxmarkleafs;
-int r_q1bsp_nummarkleafs;
-mleaf_t *r_q1bsp_maxleaflist[65536];
-int r_q1bsp_maxmarksurfaces;
-int r_q1bsp_nummarksurfaces;
-msurface_t *r_q1bsp_maxsurfacelist[65536];
-
-// FIXME: these arrays are huge!
-int r_q3bsp_maxmarkleafs;
-int r_q3bsp_nummarkleafs;
-q3mleaf_t *r_q3bsp_maxleaflist[65536];
-int r_q3bsp_maxmarksurfaces;
-int r_q3bsp_nummarksurfaces;
-q3msurface_t *r_q3bsp_maxsurfacelist[65536];
-*/
-
-void R_Surf_ClearSurfaceVisible(int num)
-{
- if (r_surf_surfacevisiblelimit < num)
- {
- Mem_Free(r_surf_surfacevisible);
- r_surf_surfacevisiblelimit = num;
- r_surf_surfacevisible = Mem_Alloc(r_surf_mempool, r_surf_surfacevisiblelimit);
- }
- memset(r_surf_surfacevisible, 0, num);
-}
-
-static int dlightdivtable[32768];
-
-static int R_IntAddDynamicLights (const matrix4x4_t *matrix, msurface_t *surf)
-{
- int sdtable[256], lnum, td, maxdist, maxdist2, maxdist3, i, s, t, smax, tmax, smax3, red, green, blue, lit, dist2, impacts, impactt, subtract, k;
- unsigned int *bl;
- float dist, impact[3], local[3];
- dlight_t *light;
-
- lit = false;
-
- smax = (surf->extents[0] >> 4) + 1;
- tmax = (surf->extents[1] >> 4) + 1;
- smax3 = smax * 3;
-
- for (lnum = 0, light = r_dlight;lnum < r_numdlights;lnum++, light++)
- {
- if (!(surf->dlightbits[lnum >> 5] & (1 << (lnum & 31))))
- continue; // not lit by this light
-
- Matrix4x4_Transform(matrix, light->origin, local);
- dist = DotProduct (local, surf->plane->normal) - surf->plane->dist;
-
- // for comparisons to minimum acceptable light
- // compensate for LIGHTOFFSET
- maxdist = (int) light->rtlight.lightmap_cullradius2 + LIGHTOFFSET;
-
- dist2 = dist * dist;
- dist2 += LIGHTOFFSET;
- if (dist2 >= maxdist)
- continue;
-
- if (surf->plane->type < 3)
- {
- VectorCopy(local, impact);
- impact[surf->plane->type] -= dist;
- }
- else
- {
- impact[0] = local[0] - surf->plane->normal[0] * dist;
- impact[1] = local[1] - surf->plane->normal[1] * dist;
- impact[2] = local[2] - surf->plane->normal[2] * dist;
- }
-
- impacts = DotProduct (impact, surf->texinfo->vecs[0]) + surf->texinfo->vecs[0][3] - surf->texturemins[0];
- impactt = DotProduct (impact, surf->texinfo->vecs[1]) + surf->texinfo->vecs[1][3] - surf->texturemins[1];
-
- s = bound(0, impacts, smax * 16) - impacts;
- t = bound(0, impactt, tmax * 16) - impactt;
- i = s * s + t * t + dist2;
- if (i > maxdist)
- continue;
-
- // reduce calculations
- for (s = 0, i = impacts; s < smax; s++, i -= 16)
- sdtable[s] = i * i + dist2;
-
- maxdist3 = maxdist - dist2;
-
- // convert to 8.8 blocklights format
- red = light->rtlight.lightmap_light[0] * (1.0f / 128.0f);
- green = light->rtlight.lightmap_light[1] * (1.0f / 128.0f);
- blue = light->rtlight.lightmap_light[2] * (1.0f / 128.0f);
- subtract = (int) (light->rtlight.lightmap_subtract * 4194304.0f);
- bl = intblocklights;
-
- i = impactt;
- for (t = 0;t < tmax;t++, i -= 16)
- {
- td = i * i;
- // make sure some part of it is visible on this line
- if (td < maxdist3)
- {
- maxdist2 = maxdist - td;
- for (s = 0;s < smax;s++)
- {
- if (sdtable[s] < maxdist2)
- {
- k = dlightdivtable[(sdtable[s] + td) >> 7] - subtract;
- if (k > 0)
- {
- bl[0] += (red * k);
- bl[1] += (green * k);
- bl[2] += (blue * k);
- lit = true;
- }
- }
- bl += 3;
- }
- }
- else // skip line
- bl += smax3;
- }
- }
- return lit;
-}
-
-static int R_FloatAddDynamicLights (const matrix4x4_t *matrix, msurface_t *surf)
-{
- int lnum, s, t, smax, tmax, smax3, lit, impacts, impactt;
- float sdtable[256], *bl, k, dist, dist2, maxdist, maxdist2, maxdist3, td1, td, red, green, blue, impact[3], local[3], subtract;
- dlight_t *light;
-
- lit = false;
-
- smax = (surf->extents[0] >> 4) + 1;
- tmax = (surf->extents[1] >> 4) + 1;
- smax3 = smax * 3;
-
- for (lnum = 0, light = r_dlight;lnum < r_numdlights;lnum++, light++)
- {
- if (!(surf->dlightbits[lnum >> 5] & (1 << (lnum & 31))))
- continue; // not lit by this light
-
- Matrix4x4_Transform(matrix, light->origin, local);
- dist = DotProduct (local, surf->plane->normal) - surf->plane->dist;
-
- // for comparisons to minimum acceptable light
- // compensate for LIGHTOFFSET
- maxdist = (int) light->rtlight.lightmap_cullradius2 + LIGHTOFFSET;
-
- dist2 = dist * dist;
- dist2 += LIGHTOFFSET;
- if (dist2 >= maxdist)
- continue;
-
- if (surf->plane->type < 3)
- {
- VectorCopy(local, impact);
- impact[surf->plane->type] -= dist;
- }
- else
- {
- impact[0] = local[0] - surf->plane->normal[0] * dist;
- impact[1] = local[1] - surf->plane->normal[1] * dist;
- impact[2] = local[2] - surf->plane->normal[2] * dist;
- }
-
- impacts = DotProduct (impact, surf->texinfo->vecs[0]) + surf->texinfo->vecs[0][3] - surf->texturemins[0];
- impactt = DotProduct (impact, surf->texinfo->vecs[1]) + surf->texinfo->vecs[1][3] - surf->texturemins[1];