From 25952511622ecbdc3fb215e17afc3445ace49146 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Fri, 27 Jan 2012 21:48:25 +0900 Subject: [PATCH] Do not update every visible lightmap every frame. This takes nq from ~25fps to 65-72 fps on Unforgiven's start map. --- libs/video/renderer/glsl/glsl_bsp.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/libs/video/renderer/glsl/glsl_bsp.c b/libs/video/renderer/glsl/glsl_bsp.c index 35a31ef38..a53847ed1 100644 --- a/libs/video/renderer/glsl/glsl_bsp.c +++ b/libs/video/renderer/glsl/glsl_bsp.c @@ -317,6 +317,22 @@ R_ClearElements (void) release_elementss (); } +static void +update_lightmap (msurface_t *surf) +{ + int maps; + + for (maps = 0; maps < MAXLIGHTMAPS && surf->styles[maps] != 255; maps++) + if (d_lightstylevalue[surf->styles[maps]] != surf->cached_light[maps]) + goto dynamic; + + if ((surf->dlightframe == r_framecount) || surf->cached_dlight) { +dynamic: + if (r_dynamic->int_val) + R_BuildLightMap (surf); + } +} + static inline void chain_surface (msurface_t *surf, vec_t *transform) { @@ -335,7 +351,7 @@ chain_surface (msurface_t *surf, vec_t *transform) tex = R_TextureAnimation (surf); CHAIN_SURF_F2B (surf, tex->tex_chain); - R_BuildLightMap (surf); + update_lightmap (surf); } if (!(is = surf->instsurf)) is = surf->tinst;