diff --git a/engine/client/cl_frame.c b/engine/client/cl_frame.c index 60d23be7..1a314e69 100644 --- a/engine/client/cl_frame.c +++ b/engine/client/cl_frame.c @@ -1360,7 +1360,7 @@ void CL_EmitEntities( void ) return; // animate lightestyles - ref.dllFuncs.CL_RunLightStyles (); + ref.dllFuncs.CL_RunLightStyles( CL_GetLightStyle( 0 )); // decay dynamic lights CL_DecayLights (); diff --git a/engine/ref_api.h b/engine/ref_api.h index 5432df4b..870b1ab8 100644 --- a/engine/ref_api.h +++ b/engine/ref_api.h @@ -54,6 +54,7 @@ GNU General Public License for more details. // 9. Removed gamma functions. Renderer is supposed to get them through PARM_GET_*_PTR. // Move hulls rendering back to engine // Removed lightstyle, dynamic and entity light functions. Renderer is supposed to get them through PARM_GET_*_PTR. +// CL_RunLightStyles now accepts lightstyles array. #define REF_API_VERSION 9 #define TF_SKY (TF_SKYSIDE|TF_NOMIPMAP|TF_ALLOW_NEAREST) @@ -541,7 +542,7 @@ typedef struct ref_interface_s // bmodel void (*R_SetSkyCloudsTextures)( int solidskyTexture, int alphaskyTexture ); void (*GL_SubdivideSurface)( model_t *mod, msurface_t *fa ); - void (*CL_RunLightStyles)( void ); + void (*CL_RunLightStyles)( lightstyle_t *ls ); // sprites void (*R_GetSpriteParms)( int *frameWidth, int *frameHeight, int *numFrames, int currentFrame, const model_t *pSprite ); diff --git a/ref/gl/gl_local.h b/ref/gl/gl_local.h index fbe7ee8c..c8d1694a 100644 --- a/ref/gl/gl_local.h +++ b/ref/gl/gl_local.h @@ -257,7 +257,6 @@ typedef struct movevars_t *movevars; color24 *palette; cl_entity_t *viewent; - lightstyle_t *lightstyles; dlight_t *dlights; dlight_t *elights; byte *texgammatable; @@ -388,9 +387,8 @@ void R_TextureReplacementReport( const char *modelname, int gl_texturenum, const // // gl_rlight.c // -void CL_RunLightStyles( void ); +void CL_RunLightStyles( lightstyle_t *ls ); void R_PushDlights( void ); -void R_AnimateLight( void ); void R_GetLightSpot( vec3_t lightspot ); void R_MarkLights( dlight_t *light, int bit, mnode_t *node ); colorVec R_LightVec( const vec3_t start, const vec3_t end, vec3_t lightspot, vec3_t lightvec ); diff --git a/ref/gl/gl_opengl.c b/ref/gl/gl_opengl.c index fdfff9f0..a632364b 100644 --- a/ref/gl/gl_opengl.c +++ b/ref/gl/gl_opengl.c @@ -1304,7 +1304,6 @@ qboolean R_Init( void ) tr.lightgammatable = (uint *)ENGINE_GET_PARM( PARM_GET_LIGHTGAMMATABLE_PTR ); tr.screengammatable = (uint *)ENGINE_GET_PARM( PARM_GET_SCREENGAMMATABLE_PTR ); tr.lineargammatable = (uint *)ENGINE_GET_PARM( PARM_GET_LINEARGAMMATABLE_PTR ); - tr.lightstyles = (lightstyle_t *)ENGINE_GET_PARM( PARM_GET_LIGHTSTYLES_PTR ); tr.dlights = (dlight_t *)ENGINE_GET_PARM( PARM_GET_DLIGHTS_PTR ); tr.elights = (dlight_t *)ENGINE_GET_PARM( PARM_GET_ELIGHTS_PTR ); diff --git a/ref/gl/gl_rlight.c b/ref/gl/gl_rlight.c index a60a6540..8ba5da3e 100644 --- a/ref/gl/gl_rlight.c +++ b/ref/gl/gl_rlight.c @@ -32,7 +32,7 @@ CL_RunLightStyles ================== */ -void CL_RunLightStyles( void ) +void CL_RunLightStyles( lightstyle_t *ls ) { int i; float frametime = (gp_cl->time - gp_cl->oldtime); @@ -53,40 +53,41 @@ void CL_RunLightStyles( void ) { int k, flight, clight; float l, lerpfrac, backlerp; - lightstyle_t *ls = &tr.lightstyles[i]; if( !gp_cl->paused && frametime <= 0.1f ) - ls->time += frametime; // evaluate local time + ls[i].time += frametime; // evaluate local time - flight = (int)Q_floor( ls->time * 10 ); - clight = (int)Q_ceil( ls->time * 10 ); - lerpfrac = ( ls->time * 10 ) - flight; - backlerp = 1.0f - lerpfrac; - - if( !ls->length ) + if( !ls[i].length ) { tr.lightstylevalue[i] = 256; continue; } - else if( ls->length == 1 ) + else if( ls[i].length == 1 ) { // single length style so don't bother interpolating - tr.lightstylevalue[i] = ( ls->pattern[0] - 'a' ) * 22; + tr.lightstylevalue[i] = ( ls[i].map[0] ) * 22; continue; } - else if( !ls->interp || !cl_lightstyle_lerping->flags ) + + flight = (int)Q_floor( ls[i].time * 10 ); + + if( !ls[i].interp || !cl_lightstyle_lerping->value ) { - tr.lightstylevalue[i] = ( ls->pattern[flight%ls->length] - 'a' ) * 22; + tr.lightstylevalue[i] = ls[i].map[flight%ls[i].length] * 22; continue; } + clight = (int)Q_ceil( ls[i].time * 10 ); + lerpfrac = ( ls[i].time * 10 ) - flight; + backlerp = 1.0f - lerpfrac; + // interpolate animating light // frame just gone - k = ls->map[flight % ls->length]; + k = ls[i].map[flight % ls[i].length]; l = (float)( k * 22.0f ) * backlerp; // upcoming frame - k = ls->map[clight % ls->length]; + k = ls[i].map[clight % ls[i].length]; l += (float)( k * 22.0f ) * lerpfrac; tr.lightstylevalue[i] = (int)l; diff --git a/ref/gl/gl_rsurf.c b/ref/gl/gl_rsurf.c index 045756f3..06db6bd8 100644 --- a/ref/gl/gl_rsurf.c +++ b/ref/gl/gl_rsurf.c @@ -3779,7 +3779,7 @@ void GL_RebuildLightmaps( void ) gl_lms.current_lightmap_texture = 0; // setup all the lightstyles - CL_RunLightStyles(); + CL_RunLightStyles((lightstyle_t *)ENGINE_GET_PARM( PARM_GET_LIGHTSTYLES_PTR )); LM_InitBlock(); @@ -3843,7 +3843,7 @@ void GL_BuildLightmaps( void ) R_InitDlightTexture(); // setup all the lightstyles - CL_RunLightStyles(); + CL_RunLightStyles((lightstyle_t *)ENGINE_GET_PARM( PARM_GET_LIGHTSTYLES_PTR )); LM_InitBlock(); diff --git a/ref/null/r_context.c b/ref/null/r_context.c index e3a9e2b7..4fb193df 100644 --- a/ref/null/r_context.c +++ b/ref/null/r_context.c @@ -177,6 +177,11 @@ static void GL_SubdivideSurface( model_t *mod, msurface_t *fa ) ; } +static void CL_RunLightStyles( lightstyle_t *ls ) +{ + +} + static void R_GetSpriteParms( int *frameWidth, int *frameHeight, int *numFrames, int currentFrame, const model_t *pSprite ) { if( frameWidth ) @@ -501,7 +506,7 @@ static const ref_interface_t gReffuncs = .R_SetSkyCloudsTextures = R_SetSkyCloudsTextures, .GL_SubdivideSurface = GL_SubdivideSurface, - .CL_RunLightStyles = R_SimpleStub, + .CL_RunLightStyles = CL_RunLightStyles, .R_GetSpriteParms = R_GetSpriteParms, .R_GetSpriteTexture = R_GetSpriteTexture, diff --git a/ref/soft/r_light.c b/ref/soft/r_light.c index 917bbcfe..f32945b6 100644 --- a/ref/soft/r_light.c +++ b/ref/soft/r_light.c @@ -35,7 +35,7 @@ CL_RunLightStyles ================== */ -void CL_RunLightStyles( void ) +void CL_RunLightStyles( lightstyle_t *ls ) { int i; float frametime = (gp_cl->time - gp_cl->oldtime); @@ -56,40 +56,41 @@ void CL_RunLightStyles( void ) { int k, flight, clight; float l, lerpfrac, backlerp; - lightstyle_t *ls = &tr.lightstyles[i]; if( !gp_cl->paused && frametime <= 0.1f ) - ls->time += frametime; // evaluate local time + ls[i].time += frametime; // evaluate local time - flight = (int)Q_floor( ls->time * 10 ); - clight = (int)Q_ceil( ls->time * 10 ); - lerpfrac = ( ls->time * 10 ) - flight; - backlerp = 1.0f - lerpfrac; - - if( !ls->length ) + if( !ls[i].length ) { tr.lightstylevalue[i] = 256; continue; } - else if( ls->length == 1 ) + else if( ls[i].length == 1 ) { // single length style so don't bother interpolating - tr.lightstylevalue[i] = ( ls->pattern[0] - 'a' ) * 22; + tr.lightstylevalue[i] = ( ls[i].map[0] ) * 22; continue; } - else if( !ls->interp || !cl_lightstyle_lerping->flags ) + + flight = (int)Q_floor( ls[i].time * 10 ); + + if( !ls[i].interp || !cl_lightstyle_lerping->value ) { - tr.lightstylevalue[i] = ( ls->pattern[flight%ls->length] - 'a' ) * 22; + tr.lightstylevalue[i] = ls[i].map[flight%ls[i].length] * 22; continue; } + clight = (int)Q_ceil( ls[i].time * 10 ); + lerpfrac = ( ls[i].time * 10 ) - flight; + backlerp = 1.0f - lerpfrac; + // interpolate animating light // frame just gone - k = ls->map[flight % ls->length]; + k = ls[i].map[flight % ls[i].length]; l = (float)( k * 22.0f ) * backlerp; // upcoming frame - k = ls->map[clight % ls->length]; + k = ls[i].map[clight % ls[i].length]; l += (float)( k * 22.0f ) * lerpfrac; tr.lightstylevalue[i] = (int)l; diff --git a/ref/soft/r_local.h b/ref/soft/r_local.h index 1c138854..e2ca6b17 100644 --- a/ref/soft/r_local.h +++ b/ref/soft/r_local.h @@ -454,9 +454,8 @@ int R_TexMemory( void ); // // gl_rlight.c // -void CL_RunLightStyles( void ); +void CL_RunLightStyles( lightstyle_t *ls ); void R_PushDlights( void ); -void R_AnimateLight( void ); void R_GetLightSpot( vec3_t lightspot ); void R_MarkLights( dlight_t *light, int bit, mnode_t *node ); colorVec R_LightVec( const vec3_t start, const vec3_t end, vec3_t lightspot, vec3_t lightvec ); diff --git a/ref/soft/r_main.c b/ref/soft/r_main.c index 73ae8fe5..b0a6e9c0 100644 --- a/ref/soft/r_main.c +++ b/ref/soft/r_main.c @@ -1901,7 +1901,6 @@ qboolean GAME_EXPORT R_Init( void ) tr.lightgammatable = (uint *)ENGINE_GET_PARM( PARM_GET_LIGHTGAMMATABLE_PTR ); tr.screengammatable = (uint *)ENGINE_GET_PARM( PARM_GET_SCREENGAMMATABLE_PTR ); tr.lineargammatable = (uint *)ENGINE_GET_PARM( PARM_GET_LINEARGAMMATABLE_PTR ); - tr.lightstyles = (lightstyle_t *)ENGINE_GET_PARM( PARM_GET_LIGHTSTYLES_PTR ); tr.dlights = (dlight_t *)ENGINE_GET_PARM( PARM_GET_DLIGHTS_PTR ); tr.elights = (dlight_t *)ENGINE_GET_PARM( PARM_GET_ELIGHTS_PTR );