engine: make CL_RunLightStyles accept lightstyles array pointer as an argument. Make necessary changes in renderers.

This commit is contained in:
Alibek Omarov 2024-11-03 00:26:20 +03:00
parent e37feece4d
commit 6153d7f168
10 changed files with 45 additions and 42 deletions

View file

@ -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 ();

View file

@ -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 );

View file

@ -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 );

View file

@ -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 );

View file

@ -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;

View file

@ -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();

View file

@ -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,

View file

@ -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;

View file

@ -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 );

View file

@ -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 );