]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - gl_rsurf.c
added DP_QC_CVAR_DEFSTRING extension
[xonotic/darkplaces.git] / gl_rsurf.c
index 0cc320018e7401d9a4641a6195f9efc7a68f04a7..6f1d9625f74996bfdb24fb1d3aa80ab8e2580497 100644 (file)
@@ -44,16 +44,30 @@ void R_BuildLightMap (const entity_render_t *ent, msurface_t *surface)
        int *bl, scale;
        unsigned char *lightmap, *out, *stain;
        model_t *model = ent->model;
-       static int intblocklights[MAX_LIGHTMAP_SIZE*MAX_LIGHTMAP_SIZE*3]; // LordHavoc: *3 for colored lighting
-       static unsigned char templight[MAX_LIGHTMAP_SIZE*MAX_LIGHTMAP_SIZE*4];
-
-       // update cached lighting info
-       surface->cached_dlight = 0;
+       int *intblocklights;
+       unsigned char *templight;
 
        smax = (surface->lightmapinfo->extents[0]>>4)+1;
        tmax = (surface->lightmapinfo->extents[1]>>4)+1;
        size = smax*tmax;
        size3 = size*3;
+
+       if (cl.buildlightmapmemorysize < size*sizeof(int[3]))
+       {
+               cl.buildlightmapmemorysize = size*sizeof(int[3]);
+               if (cl.buildlightmapmemory)
+                       Mem_Free(cl.buildlightmapmemory);
+               cl.buildlightmapmemory = Mem_Alloc(cls.levelmempool, cl.buildlightmapmemorysize);
+       }
+
+       // these both point at the same buffer, templight is only used for final
+       // processing and can replace the intblocklights data as it goes
+       intblocklights = (int *)cl.buildlightmapmemory;
+       templight = (unsigned char *)cl.buildlightmapmemory;
+
+       // update cached lighting info
+       surface->cached_dlight = 0;
+
        lightmap = surface->lightmapinfo->samples;
 
 // set to full bright if no light data
@@ -1042,8 +1056,8 @@ void R_Q1BSP_DrawLight(entity_render_t *ent, int numsurfaces, const int *surface
                                                tempcenter[0] = (surface->mins[0] + surface->maxs[0]) * 0.5f;
                                                tempcenter[1] = (surface->mins[1] + surface->maxs[1]) * 0.5f;
                                                tempcenter[2] = (surface->mins[2] + surface->maxs[2]) * 0.5f;
-                                               Matrix4x4_Transform(&rsurface_entity->matrix, tempcenter, center);
-                                               R_MeshQueue_AddTransparent(rsurface_texture->currentmaterialflags & MATERIALFLAG_NODEPTHTEST ? r_view.origin : center, R_Q1BSP_DrawLight_TransparentCallback, rsurface_entity, surface - rsurface_model->data_surfaces, r_shadow_rtlight);
+                                               Matrix4x4_Transform(&rsurface_matrix, tempcenter, center);
+                                               R_MeshQueue_AddTransparent(rsurface_texture->currentmaterialflags & MATERIALFLAG_NODEPTHTEST ? r_view.origin : center, R_Q1BSP_DrawLight_TransparentCallback, ent, surface - rsurface_model->data_surfaces, r_shadow_rtlight);
                                        }
                                }
                                else