From 12889494e0224385110b59dcf617ae7deaa23a01 Mon Sep 17 00:00:00 2001 From: Crow-bar Date: Fri, 10 Jun 2022 10:49:07 +0300 Subject: [PATCH] ref_gu: reducing the number of calls to CL_GetEntityLight and CL_GetDynamicLight --- ref_gu/gu_alias.c | 4 +--- ref_gu/gu_rlight.c | 8 ++------ ref_gu/gu_rsurf.c | 8 ++------ ref_gu/gu_studio.c | 8 ++------ 4 files changed, 7 insertions(+), 21 deletions(-) diff --git a/ref_gu/gu_alias.c b/ref_gu/gu_alias.c index 69271ba8..0fa0693e 100644 --- a/ref_gu/gu_alias.c +++ b/ref_gu/gu_alias.c @@ -887,10 +887,8 @@ void R_AliasDynamicLight( cl_entity_t *ent, alight_t *plight ) // scale lightdir by light intentsity VectorScale( lightDir, total, lightDir ); - for( lnum = 0; lnum < MAX_DLIGHTS; lnum++ ) + for( lnum = 0, dl = gEngfuncs.GetDynamicLight( 0 ); lnum < MAX_DLIGHTS; lnum++, dl++ ) { - dl = gEngfuncs.GetDynamicLight( lnum ); - if( dl->die < g_alias.time || !r_dynamic->value ) continue; diff --git a/ref_gu/gu_rlight.c b/ref_gu/gu_rlight.c index b212c328..b4ccd2a3 100644 --- a/ref_gu/gu_rlight.c +++ b/ref_gu/gu_rlight.c @@ -155,10 +155,8 @@ void R_PushDlights( void ) RI.currententity = gEngfuncs.GetEntityByIndex( 0 ); RI.currentmodel = RI.currententity->model; - for( i = 0; i < MAX_DLIGHTS; i++, l++ ) + for( i = 0, l = gEngfuncs.GetDynamicLight( 0 ); i < MAX_DLIGHTS; i++, l++ ) { - l = gEngfuncs.GetDynamicLight( i ); - if( l->die < gpGlobals->time || !l->radius ) continue; @@ -179,10 +177,8 @@ int R_CountDlights( void ) dlight_t *l; int i, numDlights = 0; - for( i = 0; i < MAX_DLIGHTS; i++ ) + for( i = 0, l = gEngfuncs.GetDynamicLight( 0 ); i < MAX_DLIGHTS; i++, l++ ) { - l = gEngfuncs.GetDynamicLight( i ); - if( l->die < gpGlobals->time || !l->radius ) continue; diff --git a/ref_gu/gu_rsurf.c b/ref_gu/gu_rsurf.c index 70d7fd03..6b22c484 100644 --- a/ref_gu/gu_rsurf.c +++ b/ref_gu/gu_rsurf.c @@ -558,13 +558,11 @@ void R_AddDynamicLights( msurface_t *surf ) else sample_frac = LM_SAMPLE_SIZE; } - for( lnum = 0; lnum < MAX_DLIGHTS; lnum++ ) + for( lnum = 0, dl = gEngfuncs.GetDynamicLight( 0 ); lnum < MAX_DLIGHTS; lnum++, dl++ ) { if( !FBitSet( surf->dlightbits, BIT( lnum ))) continue; // not lit by this light - dl = gEngfuncs.GetDynamicLight( lnum ); - // transform light origin to local bmodel space if( !tr.modelviewIdentity ) Matrix4x4_VectorITransform( RI.objectMatrix, dl->origin, origin_l ); @@ -1642,10 +1640,8 @@ void R_DrawBrushModel( cl_entity_t *e ) else VectorSubtract( RI.cullorigin, e->origin, tr.modelorg ); // calculate dynamic lighting for bmodel - for( k = 0; k < MAX_DLIGHTS; k++ ) + for( k = 0, l = gEngfuncs.GetDynamicLight( 0 ); k < MAX_DLIGHTS; k++, l++ ) { - l = gEngfuncs.GetDynamicLight( k ); - if( l->die < gpGlobals->time || !l->radius ) continue; diff --git a/ref_gu/gu_studio.c b/ref_gu/gu_studio.c index e49a6b46..3f51e662 100644 --- a/ref_gu/gu_studio.c +++ b/ref_gu/gu_studio.c @@ -1486,10 +1486,8 @@ void R_StudioDynamicLight( cl_entity_t *ent, alight_t *plight ) // scale lightdir by light intentsity VectorScale( lightDir, total, lightDir ); - for( lnum = 0; lnum < MAX_DLIGHTS; lnum++ ) + for( lnum = 0, dl = gEngfuncs.GetDynamicLight( 0 ); lnum < MAX_DLIGHTS; lnum++, dl++ ) { - dl = gEngfuncs.GetDynamicLight( lnum ); - if( dl->die < g_studio.time || !r_dynamic->value ) continue; @@ -1569,10 +1567,8 @@ void R_StudioEntityLight( alight_t *lightinfo ) dist2 = 1000000.0f; k = 0; - for( lnum = 0; lnum < MAX_ELIGHTS; lnum++ ) + for( lnum = 0, el = gEngfuncs.GetEntityLight( 0 ); lnum < MAX_ELIGHTS; lnum++, el++ ) { - el = gEngfuncs.GetEntityLight( lnum ); - if( el->die < g_studio.time || el->radius <= 0.0f ) continue;