diff --git a/engine/client/cl_efx.c b/engine/client/cl_efx.c index f3edde15..b0d6b3c5 100644 --- a/engine/client/cl_efx.c +++ b/engine/client/cl_efx.c @@ -184,6 +184,26 @@ void CL_FreeParticle( particle_t *p ) cl_free_particles = p; } +/* +================ +CL_AllocParticleFast + +unconditionally give new particle pointer from cl_free_particles +================ +*/ +particle_t *CL_AllocParticleFast( void ) +{ + particle_t *p = NULL; + + if( cl_free_particles ) + { + p = cl_free_particles; + cl_free_particles = p->next; + } + + return p; +} + /* ================ R_AllocParticle diff --git a/engine/client/ref_common.h b/engine/client/ref_common.h index 69387ea6..82125dc9 100644 --- a/engine/client/ref_common.h +++ b/engine/client/ref_common.h @@ -13,7 +13,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */ #pragma once -#ifndef REF_COMMON_H +#if !defined REF_COMMON_H && !defined REF_DLL #define REF_COMMON_H #include "ref_api.h" diff --git a/engine/common/common.h b/engine/common/common.h index a4893a49..a73561a0 100644 --- a/engine/common/common.h +++ b/engine/common/common.h @@ -478,6 +478,70 @@ typedef struct host_parm_s extern host_parm_t host; extern sysinfo_t SI; +#define CMD_SERVERDLL BIT( 0 ) // added by server.dll +#define CMD_CLIENTDLL BIT( 1 ) // added by client.dll +#define CMD_GAMEUIDLL BIT( 2 ) // added by GameUI.dll +#define CMD_LOCALONLY BIT( 3 ) // restricted from server commands +#define CMD_REFDLL BIT( 4 ) // added by ref.dll + +typedef void (*xcommand_t)( void ); + +// +// cmd.c +// +void Cbuf_Init( void ); +void Cbuf_Clear( void ); +void Cbuf_AddText( const char *text ); +void Cbuf_InsertText( const char *text ); +void Cbuf_ExecStuffCmds( void ); +void Cbuf_Execute (void); +int Cmd_Argc( void ); +const char *Cmd_Args( void ); +const char *Cmd_Argv( int arg ); +void Cmd_Init( void ); +void Cmd_Unlink( int group ); +void Cmd_AddCommand( const char *cmd_name, xcommand_t function, const char *cmd_desc ); +void Cmd_AddRestrictedCommand( const char *cmd_name, xcommand_t function, const char *cmd_desc ); +void Cmd_AddServerCommand( const char *cmd_name, xcommand_t function ); +int Cmd_AddClientCommand( const char *cmd_name, xcommand_t function ); +int Cmd_AddGameUICommand( const char *cmd_name, xcommand_t function ); +void Cmd_RemoveCommand( const char *cmd_name ); +qboolean Cmd_Exists( const char *cmd_name ); +void Cmd_LookupCmds( char *buffer, void *ptr, setpair_t callback ); +qboolean Cmd_GetMapList( const char *s, char *completedname, int length ); +qboolean Cmd_GetDemoList( const char *s, char *completedname, int length ); +qboolean Cmd_GetMovieList( const char *s, char *completedname, int length ); +void Cmd_TokenizeString( char *text ); +void Cmd_ExecuteString( char *text ); +void Cmd_ForwardToServer( void ); + +// +// zone.c +// +void Memory_Init( void ); +void *_Mem_Realloc( byte *poolptr, void *memptr, size_t size, qboolean clear, const char *filename, int fileline ); +void *_Mem_Alloc( byte *poolptr, size_t size, qboolean clear, const char *filename, int fileline ); +byte *_Mem_AllocPool( const char *name, const char *filename, int fileline ); +void _Mem_FreePool( byte **poolptr, const char *filename, int fileline ); +void _Mem_EmptyPool( byte *poolptr, const char *filename, int fileline ); +void _Mem_Free( void *data, const char *filename, int fileline ); +void _Mem_Check( const char *filename, int fileline ); +qboolean Mem_IsAllocatedExt( byte *poolptr, void *data ); +void Mem_PrintList( size_t minallocationsize ); +void Mem_PrintStats( void ); + +#ifndef REF_DLL +#define Mem_Malloc( pool, size ) _Mem_Alloc( pool, size, false, __FILE__, __LINE__ ) +#define Mem_Calloc( pool, size ) _Mem_Alloc( pool, size, true, __FILE__, __LINE__ ) +#define Mem_Realloc( pool, ptr, size ) _Mem_Realloc( pool, ptr, size, true, __FILE__, __LINE__ ) +#define Mem_Free( mem ) _Mem_Free( mem, __FILE__, __LINE__ ) +#define Mem_AllocPool( name ) _Mem_AllocPool( name, __FILE__, __LINE__ ) +#define Mem_FreePool( pool ) _Mem_FreePool( pool, __FILE__, __LINE__ ) +#define Mem_EmptyPool( pool ) _Mem_EmptyPool( pool, __FILE__, __LINE__ ) +#define Mem_IsAllocated( mem ) Mem_IsAllocatedExt( NULL, mem ) +#define Mem_Check() _Mem_Check( __FILE__, __LINE__ ) +#endif + // // filesystem.c // diff --git a/engine/common/crtlib.h b/engine/common/crtlib.h index 97faacd4..8fe45748 100644 --- a/engine/common/crtlib.h +++ b/engine/common/crtlib.h @@ -33,43 +33,6 @@ enum TIME_FILENAME, }; -#define CMD_SERVERDLL BIT( 0 ) // added by server.dll -#define CMD_CLIENTDLL BIT( 1 ) // added by client.dll -#define CMD_GAMEUIDLL BIT( 2 ) // added by GameUI.dll -#define CMD_LOCALONLY BIT( 3 ) // restricted from server commands -#define CMD_REFDLL BIT( 4 ) // added by ref.dll - -typedef void (*xcommand_t)( void ); - -// -// cmd.c -// -void Cbuf_Init( void ); -void Cbuf_Clear( void ); -void Cbuf_AddText( const char *text ); -void Cbuf_InsertText( const char *text ); -void Cbuf_ExecStuffCmds( void ); -void Cbuf_Execute (void); -int Cmd_Argc( void ); -const char *Cmd_Args( void ); -const char *Cmd_Argv( int arg ); -void Cmd_Init( void ); -void Cmd_Unlink( int group ); -void Cmd_AddCommand( const char *cmd_name, xcommand_t function, const char *cmd_desc ); -void Cmd_AddRestrictedCommand( const char *cmd_name, xcommand_t function, const char *cmd_desc ); -void Cmd_AddServerCommand( const char *cmd_name, xcommand_t function ); -int Cmd_AddClientCommand( const char *cmd_name, xcommand_t function ); -int Cmd_AddGameUICommand( const char *cmd_name, xcommand_t function ); -void Cmd_RemoveCommand( const char *cmd_name ); -qboolean Cmd_Exists( const char *cmd_name ); -void Cmd_LookupCmds( char *buffer, void *ptr, setpair_t callback ); -qboolean Cmd_GetMapList( const char *s, char *completedname, int length ); -qboolean Cmd_GetDemoList( const char *s, char *completedname, int length ); -qboolean Cmd_GetMovieList( const char *s, char *completedname, int length ); -void Cmd_TokenizeString( char *text ); -void Cmd_ExecuteString( char *text ); -void Cmd_ForwardToServer( void ); - // // crtlib.c // @@ -118,31 +81,5 @@ void COM_ReplaceExtension( char *path, const char *extension ); void COM_ExtractFilePath( const char *path, char *dest ); const char *COM_FileWithoutPath( const char *in ); void COM_StripExtension( char *path ); - - -// -// zone.c -// -void Memory_Init( void ); -void *_Mem_Realloc( byte *poolptr, void *memptr, size_t size, qboolean clear, const char *filename, int fileline ); -void *_Mem_Alloc( byte *poolptr, size_t size, qboolean clear, const char *filename, int fileline ); -byte *_Mem_AllocPool( const char *name, const char *filename, int fileline ); -void _Mem_FreePool( byte **poolptr, const char *filename, int fileline ); -void _Mem_EmptyPool( byte *poolptr, const char *filename, int fileline ); -void _Mem_Free( void *data, const char *filename, int fileline ); -void _Mem_Check( const char *filename, int fileline ); -qboolean Mem_IsAllocatedExt( byte *poolptr, void *data ); -void Mem_PrintList( size_t minallocationsize ); -void Mem_PrintStats( void ); - -#define Mem_Malloc( pool, size ) _Mem_Alloc( pool, size, false, __FILE__, __LINE__ ) -#define Mem_Calloc( pool, size ) _Mem_Alloc( pool, size, true, __FILE__, __LINE__ ) -#define Mem_Realloc( pool, ptr, size ) _Mem_Realloc( pool, ptr, size, true, __FILE__, __LINE__ ) -#define Mem_Free( mem ) _Mem_Free( mem, __FILE__, __LINE__ ) -#define Mem_AllocPool( name ) _Mem_AllocPool( name, __FILE__, __LINE__ ) -#define Mem_FreePool( pool ) _Mem_FreePool( pool, __FILE__, __LINE__ ) -#define Mem_EmptyPool( pool ) _Mem_EmptyPool( pool, __FILE__, __LINE__ ) -#define Mem_IsAllocated( mem ) Mem_IsAllocatedExt( NULL, mem ) -#define Mem_Check() _Mem_Check( __FILE__, __LINE__ ) #endif//STDLIB_H diff --git a/engine/common/system.h b/engine/common/system.h index 2a9853ae..f231df49 100644 --- a/engine/common/system.h +++ b/engine/common/system.h @@ -52,7 +52,9 @@ extern "C" { #include "const.h" #include "crtlib.h" +#ifndef REF_DLL #define ASSERT( exp ) if(!( exp )) Sys_Error( "assert failed at %s:%i\n", __FILE__, __LINE__ ) +#endif /* ======================================================================== diff --git a/engine/ref_api.h b/engine/ref_api.h index ee5e0c82..9d3c096b 100644 --- a/engine/ref_api.h +++ b/engine/ref_api.h @@ -72,6 +72,8 @@ typedef struct ref_globals_s float time; // cl.time float oldtime; // cl.oldtime + double realtime; // host.realtime + double frametime; // host.frametime int parsecount; // cl.parsecount int parsecountmod; // cl.parsecountmod @@ -151,10 +153,11 @@ typedef struct ref_api_s int (*CL_GetRenderParm)( int parm, int arg ); // generic // cvar handlers - convar_t *(*pfnRegisterVariable)( const char *szName, const char *szValue, int flags, const char *description ); + convar_t *(*Cvar_Get)( const char *szName, const char *szValue, int flags, const char *description ); convar_t *(*pfnGetCvarPointer)( const char *name ); float (*pfnGetCvarFloat)( const char *szName ); const char *(*pfnGetCvarString)( const char *szName ); + void (*Cvar_SetValue)( const char *name, float value ); // command handlers int (*Cmd_AddCommand)( const char *cmd_name, void (*function)(void), const char *description ); @@ -207,6 +210,7 @@ typedef struct ref_api_s void (*CL_DrawEFX)( float time, qboolean fTrans ); void (*CL_ThinkParticle)( double frametime, particle_t *p ); void (*R_FreeDeadParticles)( particle_t **ppparticles ); + particle_t *(*CL_AllocParticleFast)( void ); // unconditionally give new particle pointer from cl_free_particles efrag_t* (*GetEfragsFreeList)( void ); // clgame.free_efrags void (*SetEfragsFreeList)( efrag_t* ); // clgame.free_efrags color24 *(*GetTracerColors)( int num ); @@ -230,6 +234,7 @@ typedef struct ref_api_s uint (*COM_HashKey)( const char *strings, uint hashSize ); void (*Host_Error)( const char *fmt, ... ); int (*CL_FxBlend)( cl_entity_t *e ); + void (*COM_SetRandomSeed)( int lSeed ); float (*COM_RandomFloat)( float rmin, float rmax ); int (*COM_RandomLong)( int rmin, int rmax ); struct screenfade_s *(*GetScreenFade)( void ); @@ -237,6 +242,7 @@ typedef struct ref_api_s void (*GetPredictedOrigin)( vec3_t v ); byte *(*CL_GetPaletteColor)(int color); // clgame.palette[color] void (*CL_GetScreenInfo)( int *width, int *height ); // clgame.scrInfo, ptrs may be NULL + void (*SetLocalLightLevel)( int level ); // cl.local.light_level // studio interface player_info_t *(*pfnPlayerInfo)( int index ); @@ -260,6 +266,7 @@ typedef struct ref_api_s // use Mem_Free instead // void (*COM_FreeFile)( void *buffer ); int (*FS_FileExists)( const char *filename, int gamedironly ); + void (*FS_AllowDirectPaths)( qboolean enable ); // GL int (*GL_SetAttribute)( int attr, int value ); @@ -308,6 +315,12 @@ typedef struct ref_api_s // imagelib void (*Image_AddCmdFlags)( uint flags ); // used to check if hardware dxt is supported + qboolean (*Image_CustomPalette)( void ); + qboolean (*Image_Process)( rgbdata_t **pix, int width, int height, uint flags, float bumpscale ); + rgbdata_t *(*FS_LoadImage)( const char *filename, const byte *buffer, size_t size ); + qboolean (*FS_SaveImage)( const char *filename, rgbdata_t *pix ); + rgbdata_t *(*FS_CopyImage)( rgbdata_t *in ); + void (*FS_FreeImage)( rgbdata_t *pack ); // client exports void (*pfnDrawNormalTriangles)( void ); diff --git a/ref_gl/gl_alias.c b/ref_gl/gl_alias.c index 1e49d784..cb7b6769 100644 --- a/ref_gl/gl_alias.c +++ b/ref_gl/gl_alias.c @@ -434,7 +434,7 @@ rgbdata_t *Mod_CreateSkinData( model_t *mod, byte *data, int width, int height ) skin.palette = (byte *)gEngfuncs.CL_GetPaletteColor( 0 ); skin.size = width * height; - if( !Image_CustomPalette() ) + if( !gEngfuncs.Image_CustomPalette() ) { for( i = 0; i < skin.width * skin.height; i++ ) { @@ -476,7 +476,7 @@ rgbdata_t *Mod_CreateSkinData( model_t *mod, byte *data, int width, int height ) } // make an copy - return FS_CopyImage( &skin ); + return gEngfuncs.FS_CopyImage( &skin ); } void *Mod_LoadSingleSkin( daliasskintype_t *pskintype, int skinnum, int size ) @@ -489,14 +489,14 @@ void *Mod_LoadSingleSkin( daliasskintype_t *pskintype, int skinnum, int size ) Q_snprintf( name, sizeof( name ), "%s:frame%i", loadmodel->name, skinnum ); Q_snprintf( lumaname, sizeof( lumaname ), "%s:luma%i", loadmodel->name, skinnum ); Q_snprintf( checkname, sizeof( checkname ), "%s_%i.tga", loadmodel->name, skinnum ); - if( !gEngfuncs.FS_FileExists( checkname, false ) || ( pic = FS_LoadImage( checkname, NULL, 0 )) == NULL ) + if( !gEngfuncs.FS_FileExists( checkname, false ) || ( pic = gEngfuncs.FS_LoadImage( checkname, NULL, 0 )) == NULL ) pic = Mod_CreateSkinData( loadmodel, (byte *)(pskintype + 1), m_pAliasHeader->skinwidth, m_pAliasHeader->skinheight ); m_pAliasHeader->gl_texturenum[skinnum][0] = m_pAliasHeader->gl_texturenum[skinnum][1] = m_pAliasHeader->gl_texturenum[skinnum][2] = m_pAliasHeader->gl_texturenum[skinnum][3] = GL_LoadTextureInternal( name, pic, 0 ); - FS_FreeImage( pic ); + gEngfuncs.FS_FreeImage( pic ); if( R_GetTexture( m_pAliasHeader->gl_texturenum[skinnum][0] )->flags & TF_HAS_LUMA ) { @@ -505,7 +505,7 @@ void *Mod_LoadSingleSkin( daliasskintype_t *pskintype, int skinnum, int size ) m_pAliasHeader->fb_texturenum[skinnum][1] = m_pAliasHeader->fb_texturenum[skinnum][2] = m_pAliasHeader->fb_texturenum[skinnum][3] = GL_LoadTextureInternal( lumaname, pic, TF_MAKELUMA ); - FS_FreeImage( pic ); + gEngfuncs.FS_FreeImage( pic ); } return ((byte *)(pskintype + 1) + size); @@ -518,6 +518,7 @@ void *Mod_LoadGroupSkin( daliasskintype_t *pskintype, int skinnum, int size ) string name, lumaname; rgbdata_t *pic; int i, j; + model_t *loadmodel = gEngfuncs.Mod_GetCurrentLoadingModel(); // animating skin group. yuck. pskintype++; @@ -530,14 +531,14 @@ void *Mod_LoadGroupSkin( daliasskintype_t *pskintype, int skinnum, int size ) Q_snprintf( name, sizeof( name ), "%s_%i_%i", loadmodel->name, skinnum, i ); pic = Mod_CreateSkinData( loadmodel, (byte *)(pskintype), m_pAliasHeader->skinwidth, m_pAliasHeader->skinheight ); m_pAliasHeader->gl_texturenum[skinnum][i & 3] = GL_LoadTextureInternal( name, pic, 0 ); - FS_FreeImage( pic ); + gEngfuncs.FS_FreeImage( pic ); if( R_GetTexture( m_pAliasHeader->gl_texturenum[skinnum][i & 3] )->flags & TF_HAS_LUMA ) { Q_snprintf( lumaname, sizeof( lumaname ), "%s_%i_%i_luma", loadmodel->name, skinnum, i ); pic = Mod_CreateSkinData( NULL, (byte *)(pskintype), m_pAliasHeader->skinwidth, m_pAliasHeader->skinheight ); m_pAliasHeader->fb_texturenum[skinnum][i & 3] = GL_LoadTextureInternal( lumaname, pic, TF_MAKELUMA ); - FS_FreeImage( pic ); + gEngfuncs.FS_FreeImage( pic ); } pskintype = (daliasskintype_t *)((byte *)(pskintype) + size); @@ -725,7 +726,7 @@ void Mod_LoadAliasModel( model_t *mod, const void *buffer, qboolean *loaded ) GL_MakeAliasModelDisplayLists( mod ); // move the complete, relocatable alias model to the cache - loadmodel->cache.data = m_pAliasHeader; + gEngfuncs.Mod_GetCurrentLoadingModel()->cache.data = m_pAliasHeader; if( loaded ) *loaded = true; // done } @@ -817,7 +818,7 @@ void R_AliasDynamicLight( cl_entity_t *ent, alight_t *plight ) msurface_t *psurf = NULL; pmtrace_t trace; - if( FBitSet( host.features, ENGINE_WRITE_LARGE_COORD )) + if( FBitSet( gEngfuncs.CL_GetRenderParm( PARM_FEATURES, 0 ), ENGINE_WRITE_LARGE_COORD )) { vecEnd[0] = origin[0] - mv->skyvec_x * 65536.0f; vecEnd[1] = origin[1] - mv->skyvec_y * 65536.0f; @@ -838,9 +839,9 @@ void R_AliasDynamicLight( cl_entity_t *ent, alight_t *plight ) { VectorSet( lightDir, mv->skyvec_x, mv->skyvec_y, mv->skyvec_z ); - light.r = LightToTexGamma( bound( 0, mv->skycolor_r, 255 )); - light.g = LightToTexGamma( bound( 0, mv->skycolor_g, 255 )); - light.b = LightToTexGamma( bound( 0, mv->skycolor_b, 255 )); + light.r = gEngfuncs.LightToTexGamma( bound( 0, mv->skycolor_r, 255 )); + light.g = gEngfuncs.LightToTexGamma( bound( 0, mv->skycolor_g, 255 )); + light.b = gEngfuncs.LightToTexGamma( bound( 0, mv->skycolor_b, 255 )); } } @@ -901,8 +902,10 @@ void R_AliasDynamicLight( cl_entity_t *ent, alight_t *plight ) // scale lightdir by light intentsity VectorScale( lightDir, total, lightDir ); - for( lnum = 0, dl = cl_dlights; lnum < MAX_DLIGHTS; lnum++, dl++ ) + for( lnum = 0; lnum < MAX_DLIGHTS; lnum++ ) { + dl = gEngfuncs.GetDynamicLight( lnum ); + if( dl->die < g_alias.time || !r_dynamic->value ) continue; @@ -921,9 +924,9 @@ void R_AliasDynamicLight( cl_entity_t *ent, alight_t *plight ) VectorAdd( lightDir, dist, lightDir ); - finalLight[0] += LightToTexGamma( dl->color.r ) * ( add / 256.0f ) * 2.0f; - finalLight[1] += LightToTexGamma( dl->color.g ) * ( add / 256.0f ) * 2.0f; - finalLight[2] += LightToTexGamma( dl->color.b ) * ( add / 256.0f ) * 2.0f; + finalLight[0] += gEngfuncs.LightToTexGamma( dl->color.r ) * ( add / 256.0f ) * 2.0f; + finalLight[1] += gEngfuncs.LightToTexGamma( dl->color.g ) * ( add / 256.0f ) * 2.0f; + finalLight[2] += gEngfuncs.LightToTexGamma( dl->color.b ) * ( add / 256.0f ) * 2.0f; } } @@ -1356,7 +1359,7 @@ static void R_AliasSetupTimings( void ) else { // menu stuff - g_alias.time = host.realtime; + g_alias.time = gpGlobals->realtime; } m_fDoRemap = false; @@ -1389,7 +1392,7 @@ void R_DrawAliasModel( cl_entity_t *e ) // // locate the proper data // - m_pAliasHeader = (aliashdr_t *)Mod_AliasExtradata( RI.currententity->model ); + m_pAliasHeader = (aliashdr_t *)gEngfuncs.Mod_Extradata( mod_alias, RI.currententity->model ); if( !m_pAliasHeader ) return; // init time @@ -1400,7 +1403,7 @@ void R_DrawAliasModel( cl_entity_t *e ) R_AliasLerpMovement( e ); - if( !FBitSet( host.features, ENGINE_COMPENSATE_QUAKE_BUG )) + if( !FBitSet( gEngfuncs.CL_GetRenderParm( PARM_FEATURES, 0 ), ENGINE_COMPENSATE_QUAKE_BUG )) e->angles[PITCH] = -e->angles[PITCH]; // stupid quake bug // don't rotate clients, only aim diff --git a/ref_gl/gl_backend.c b/ref_gl/gl_backend.c index f692ed0d..5ac9c205 100644 --- a/ref_gl/gl_backend.c +++ b/ref_gl/gl_backend.c @@ -477,7 +477,7 @@ qboolean VID_ScreenShot( const char *filename, int shot_type ) case VID_SCREENSHOT: break; case VID_SNAPSHOT: - FS_AllowDirectPaths( true ); + gEngfuncs.FS_AllowDirectPaths( true ); break; case VID_LEVELSHOT: flags |= IMAGE_RESAMPLE; @@ -504,13 +504,13 @@ qboolean VID_ScreenShot( const char *filename, int shot_type ) break; } - Image_Process( &r_shot, width, height, flags, 0.0f ); + gEngfuncs.Image_Process( &r_shot, width, height, flags, 0.0f ); // write image - result = FS_SaveImage( filename, r_shot ); - host.write_to_clipboard = false; // disable write to clipboard - FS_AllowDirectPaths( false ); // always reset after store screenshot - FS_FreeImage( r_shot ); + result = gEngfuncs.FS_SaveImage( filename, r_shot ); + // REFTODO: host.write_to_clipboard = false; // disable write to clipboard + gEngfuncs.FS_AllowDirectPaths( false ); // always reset after store screenshot + gEngfuncs.FS_FreeImage( r_shot ); return result; } @@ -573,7 +573,7 @@ qboolean VID_CubemapShot( const char *base, uint size, const float *vieworg, qbo r_side->size = r_side->width * r_side->height * 3; r_side->buffer = temp; - if( flags ) Image_Process( &r_side, 0, 0, flags, 0.0f ); + if( flags ) gEngfuncs.Image_Process( &r_side, 0, 0, flags, 0.0f ); memcpy( buffer + (size * size * 3 * i), r_side->buffer, size * size * 3 ); } @@ -594,9 +594,9 @@ qboolean VID_CubemapShot( const char *base, uint size, const float *vieworg, qbo COM_DefaultExtension( basename, ".tga" ); // write image as 6 sides - result = FS_SaveImage( basename, r_shot ); - FS_FreeImage( r_shot ); - FS_FreeImage( r_side ); + result = gEngfuncs.FS_SaveImage( basename, r_shot ); + gEngfuncs.FS_FreeImage( r_shot ); + gEngfuncs.FS_FreeImage( r_side ); return result; } @@ -659,7 +659,7 @@ rebuild_page: if( i == MAX_TEXTURES && gl_showtextures->value != 1 ) { // bad case, rewind to one and try again - Cvar_SetValue( "r_showtextures", max( 1, gl_showtextures->value - 1 )); + gEngfuncs.Cvar_SetValue( "r_showtextures", max( 1, gl_showtextures->value - 1 )); if( ++numTries < 2 ) goto rebuild_page; // to prevent infinite loop } @@ -805,7 +805,7 @@ void R_ShowTree( void ) R_ShowTree_r( WORLDMODEL->nodes, x, y, tr.max_recursion * 3.5f, 1 ); - Con_NPrintf( 0, "max recursion %d\n", tr.max_recursion ); + gEngfuncs.Con_NPrintf( 0, "max recursion %d\n", tr.max_recursion ); } /* @@ -824,10 +824,10 @@ void SCR_TimeRefresh_f( void ) if( gEngfuncs.CL_GetConnState() != ref_ca_active ) return; - start = Sys_DoubleTime(); + start = gEngfuncs.pfnTime(); // run without page flipping like GoldSrc - if( Cmd_Argc() == 1 ) + if( gEngfuncs.Cmd_Argc() == 1 ) { pglDrawBuffer( GL_FRONT ); for( i = 0; i < 128; i++ ) @@ -849,7 +849,7 @@ void SCR_TimeRefresh_f( void ) } } - stop = Sys_DoubleTime (); + stop = gEngfuncs.pfnTime (); time = (stop - start); gEngfuncs.Con_Printf( "%f seconds (%f fps)\n", time, 128 / time ); } diff --git a/ref_gl/gl_beams.c b/ref_gl/gl_beams.c index 6952509d..22cf3b18 100644 --- a/ref_gl/gl_beams.c +++ b/ref_gl/gl_beams.c @@ -52,7 +52,7 @@ static void FracNoise( float *noise, int divs ) if( divs < 2 ) return; // noise is normalized to +/- scale - noise[div2] = ( noise[0] + noise[divs] ) * 0.5f + divs * COM_RandomFloat( -0.125f, 0.125f ); + noise[div2] = ( noise[0] + noise[divs] ) * 0.5f + divs * gEngfuncs.COM_RandomFloat( -0.125f, 0.125f ); if( div2 > 1 ) { @@ -596,17 +596,14 @@ void R_DrawBeamFollow( BEAM *pbeam, float frametime ) VectorSubtract( particles->org, pbeam->source, delta ); div = VectorLength( delta ); - if( div >= 32 && cl_free_particles ) + if( div >= 32 ) { - pnew = cl_free_particles; - cl_free_particles = pnew->next; + pnew = gEngfuncs.CL_AllocParticleFast(); } } - else if( cl_free_particles ) + else { - pnew = cl_free_particles; - cl_free_particles = pnew->next; - div = 0; + pnew = gEngfuncs.CL_AllocParticleFast(); } } diff --git a/ref_gl/gl_image.c b/ref_gl/gl_image.c index a6a3e3d1..5030e193 100644 --- a/ref_gl/gl_image.c +++ b/ref_gl/gl_image.c @@ -298,17 +298,17 @@ void R_SetTextureParameters( void ) if( GL_Support( GL_ANISOTROPY_EXT )) { if( gl_texture_anisotropy->value > glConfig.max_texture_anisotropy ) - Cvar_SetValue( "gl_anisotropy", glConfig.max_texture_anisotropy ); + gEngfuncs.Cvar_SetValue( "gl_anisotropy", glConfig.max_texture_anisotropy ); else if( gl_texture_anisotropy->value < 1.0f ) - Cvar_SetValue( "gl_anisotropy", 1.0f ); + gEngfuncs.Cvar_SetValue( "gl_anisotropy", 1.0f ); } if( GL_Support( GL_TEXTURE_LOD_BIAS )) { if( gl_texture_lodbias->value < -glConfig.max_texture_lod_bias ) - Cvar_SetValue( "gl_texture_lodbias", -glConfig.max_texture_lod_bias ); + gEngfuncs.Cvar_SetValue( "gl_texture_lodbias", -glConfig.max_texture_lod_bias ); else if( gl_texture_lodbias->value > glConfig.max_texture_lod_bias ) - Cvar_SetValue( "gl_texture_lodbias", glConfig.max_texture_lod_bias ); + gEngfuncs.Cvar_SetValue( "gl_texture_lodbias", glConfig.max_texture_lod_bias ); } ClearBits( gl_texture_anisotropy->flags, FCVAR_CHANGED ); @@ -1248,14 +1248,14 @@ static void GL_ProcessImage( gl_texture_t *tex, rgbdata_t *pic ) } if( !FBitSet( tex->flags, TF_IMG_UPLOADED ) && FBitSet( tex->flags, TF_KEEP_SOURCE )) - tex->original = FS_CopyImage( pic ); // because current pic will be expanded to rgba + tex->original = gEngfuncs.FS_CopyImage( pic ); // because current pic will be expanded to rgba // we need to expand image into RGBA buffer if( pic->type == PF_INDEXED_24 || pic->type == PF_INDEXED_32 ) img_flags |= IMAGE_FORCE_RGBA; // processing image before uploading (force to rgba, make luma etc) - if( pic->buffer ) Image_Process( &pic, 0, 0, img_flags, gl_emboss_scale->value ); + if( pic->buffer ) gEngfuncs.Image_Process( &pic, 0, 0, img_flags, gl_emboss_scale->value ); if( FBitSet( tex->flags, TF_LUMINANCE )) ClearBits( pic->flags, IMAGE_HAS_COLOR ); @@ -1382,7 +1382,7 @@ static void GL_DeleteTexture( gl_texture_t *tex ) // release source if( tex->original ) - FS_FreeImage( tex->original ); + gEngfuncs.FS_FreeImage( tex->original ); pglDeleteTextures( 1, &tex->texnum ); memset( tex, 0, sizeof( *tex )); @@ -1448,7 +1448,7 @@ int GL_LoadTexture( const char *name, const byte *buf, size_t size, int flags ) // set some image flags Image_SetForceFlags( picFlags ); - pic = FS_LoadImage( name, buf, size ); + pic = gEngfuncs.FS_LoadImage( name, buf, size ); if( !pic ) return 0; // couldn't loading image // allocate the new one @@ -1458,12 +1458,12 @@ int GL_LoadTexture( const char *name, const byte *buf, size_t size, int flags ) if( !GL_UploadTexture( tex, pic )) { memset( tex, 0, sizeof( gl_texture_t )); - FS_FreeImage( pic ); // release source texture + gEngfuncs.FS_FreeImage( pic ); // release source texture return 0; } GL_ApplyTextureParams( tex ); // update texture filter, wrap etc - FS_FreeImage( pic ); // release source texture + gEngfuncs.FS_FreeImage( pic ); // release source texture // NOTE: always return texnum as index in array or engine will stop work !!! return tex - gl_textures; @@ -1516,7 +1516,7 @@ int GL_LoadTextureArray( const char **names, int flags ) { size_t srcsize, dstsize, mipsize; - src = FS_LoadImage( names[i], NULL, 0 ); + src = gEngfuncs.FS_LoadImage( names[i], NULL, 0 ); if( !src ) break; // coldn't find layer if( pic ) @@ -1543,7 +1543,7 @@ int GL_LoadTextureArray( const char **names, int flags ) // but allow to rescale raw images if( ImageRAW( pic->type ) && ImageRAW( src->type ) && ( pic->width != src->width || pic->height != src->height )) - Image_Process( &src, pic->width, pic->height, IMAGE_RESAMPLE, 0.0f ); + gEngfuncs.Image_Process( &src, pic->width, pic->height, IMAGE_RESAMPLE, 0.0f ); if( pic->size != src->size ) { @@ -1574,7 +1574,7 @@ int GL_LoadTextureArray( const char **names, int flags ) srcsize += mipsize; } - FS_FreeImage( src ); + gEngfuncs.FS_FreeImage( src ); // increase layers pic->depth++; @@ -1584,7 +1584,7 @@ int GL_LoadTextureArray( const char **names, int flags ) if( !pic || ( pic->depth != numLayers )) { gEngfuncs.Con_Printf( S_ERROR "GL_LoadTextureArray: not all layers were loaded. Texture array is not created\n" ); - if( pic ) FS_FreeImage( pic ); + if( pic ) gEngfuncs.FS_FreeImage( pic ); return 0; } @@ -1599,12 +1599,12 @@ int GL_LoadTextureArray( const char **names, int flags ) if( !GL_UploadTexture( tex, pic )) { memset( tex, 0, sizeof( gl_texture_t )); - FS_FreeImage( pic ); // release source texture + gEngfuncs.FS_FreeImage( pic ); // release source texture return 0; } GL_ApplyTextureParams( tex ); // update texture filter, wrap etc - FS_FreeImage( pic ); // release source texture + gEngfuncs.FS_FreeImage( pic ); // release source texture // NOTE: always return texnum as index in array or engine will stop work !!! return tex - gl_textures; @@ -1817,13 +1817,13 @@ void GL_ProcessTexture( int texnum, float gamma, int topColor, int bottomColor ) } // all the operations makes over the image copy not an original - pic = FS_CopyImage( image->original ); - Image_Process( &pic, topColor, bottomColor, flags, 0.0f ); + pic = gEngfuncs.FS_CopyImage( image->original ); + gEngfuncs.Image_Process( &pic, topColor, bottomColor, flags, 0.0f ); GL_UploadTexture( image, pic ); GL_ApplyTextureParams( image ); // update texture filter, wrap etc - FS_FreeImage( pic ); + gEngfuncs.FS_FreeImage( pic ); } /* diff --git a/ref_gl/gl_local.h b/ref_gl/gl_local.h index 7b3c655e..78470af5 100644 --- a/ref_gl/gl_local.h +++ b/ref_gl/gl_local.h @@ -35,13 +35,6 @@ GNU General Public License for more details. #include "cvar.h" #define offsetof(s,m) (size_t)&(((s *)0)->m) -void CL_DrawEFX(double, double); -void *GL_GetProcAddress(char *); -void GL_CheckForErrors(); -void CL_ExtraUpdate(); -void Cbuf_Execute(); -#define Cvar_SetValue(...) -#define FS_FreeImage(...) #define ASSERT(x) #define Assert(x) @@ -278,15 +271,9 @@ extern ref_instance_t RI; extern gl_globals_t tr; extern float gldepthmin, gldepthmax; -extern dlight_t cl_dlights[MAX_DLIGHTS]; -extern dlight_t cl_elights[MAX_ELIGHTS]; #define r_numEntities (tr.draw_list->num_solid_entities + tr.draw_list->num_trans_entities) #define r_numStatics (r_stats.c_client_ents) -extern struct beam_s *cl_active_beams; -extern struct beam_s *cl_free_beams; -extern struct particle_s *cl_free_particles; - // // gl_backend.c // @@ -755,9 +742,6 @@ extern convar_t *tracerred; extern convar_t *tracergreen; extern convar_t *tracerblue; extern convar_t *traceralpha; -extern convar_t *tracerspeed; -extern convar_t *tracerlength; -extern convar_t *traceroffset; extern convar_t *cl_lightstyle_lerping; @@ -766,40 +750,12 @@ extern convar_t *cl_lightstyle_lerping; // #include "crtlib.h" -FORCEINLINE float COM_RandomFloat( float rmin, float rmax ) -{ - return gEngfuncs.COM_RandomFloat( rmin, rmax ); -} - -FORCEINLINE int COM_RandomLong( int rmin, int rmax ) -{ - return gEngfuncs.COM_RandomLong( rmin, rmax ); -} - -FORCEINLINE byte *_Mem_AllocPool( const char *name, const char *filename, int fileline ) -{ - return gEngfuncs._Mem_AllocPool( name, filename, fileline ); -} - -FORCEINLINE void _Mem_FreePool( byte **poolptr, const char *filename, int fileline ) -{ - gEngfuncs._Mem_FreePool( poolptr, filename, fileline ); -} - -FORCEINLINE void *_Mem_Alloc( byte *poolptr, size_t size, qboolean clear, const char *filename, int fileline ) -{ - return gEngfuncs._Mem_Alloc( poolptr, size, clear, filename, fileline ); -} - - -FORCEINLINE void *_Mem_Realloc( byte *poolptr, void *memptr, size_t size, qboolean clear, const char *filename, int fileline ) -{ - return gEngfuncs._Mem_Realloc( poolptr, memptr, size, clear, filename, fileline ); -} - -FORCEINLINE void _Mem_Free( void *data, const char *filename, int fileline ) -{ - gEngfuncs._Mem_Free( data, filename, fileline ); -} +#define Mem_Malloc( pool, size ) gEngfuncs._Mem_Alloc( pool, size, false, __FILE__, __LINE__ ) +#define Mem_Calloc( pool, size ) gEngfuncs._Mem_Alloc( pool, size, true, __FILE__, __LINE__ ) +#define Mem_Realloc( pool, ptr, size ) gEngfuncs._Mem_Realloc( pool, ptr, size, true, __FILE__, __LINE__ ) +#define Mem_Free( mem ) gEngfuncs._Mem_Free( mem, __FILE__, __LINE__ ) +#define Mem_AllocPool( name ) gEngfuncs._Mem_AllocPool( name, __FILE__, __LINE__ ) +#define Mem_FreePool( pool ) gEngfuncs._Mem_FreePool( pool, __FILE__, __LINE__ ) +#define Mem_EmptyPool( pool ) gEngfuncs._Mem_EmptyPool( pool, __FILE__, __LINE__ ) #endif // GL_LOCAL_H diff --git a/ref_gl/gl_opengl.c b/ref_gl/gl_opengl.c index 0d789c8d..3e4731b4 100644 --- a/ref_gl/gl_opengl.c +++ b/ref_gl/gl_opengl.c @@ -37,9 +37,19 @@ convar_t *r_lockfrustum; convar_t *r_traceglow; convar_t *r_dynamic; convar_t *r_lightmap; +convar_t *r_showhull; convar_t *gl_round_down; convar_t *r_vbo; convar_t *r_vbo_dlightmode; +convar_t *gl_showtextures; + +convar_t *vid_brightness; +convar_t *vid_gamma; +convar_t *cl_draw_particles; +convar_t *tracerred; +convar_t *tracergreen; +convar_t *tracerblue; +convar_t *traceralpha; byte *r_temppool; @@ -321,7 +331,7 @@ void GL_CheckExtension( const char *name, const dllfunc_t *funcs, const char *cv if( cvarname ) { // system config disable extensions - parm = Cvar_Get( cvarname, "1", FCVAR_GLCONFIG, va( CVAR_GLCONFIG_DESCRIPTION, name )); + parm = gEngfuncs.Cvar_Get( cvarname, "1", FCVAR_GLCONFIG, va( CVAR_GLCONFIG_DESCRIPTION, name )); } if(( parm && !CVAR_TO_BOOL( parm )) || ( !CVAR_TO_BOOL( gl_extensions ) && r_ext != GL_OPENGL_110 )) @@ -473,7 +483,7 @@ void R_RenderInfo_f( void ) } gEngfuncs.Con_Printf( "\n" ); - gEngfuncs.Con_Printf( "MODE: %ix%i\n", vidState.width, vidState.height ); + gEngfuncs.Con_Printf( "MODE: %ix%i\n", gpGlobals->width, gpGlobals->height ); gEngfuncs.Con_Printf( "\n" ); gEngfuncs.Con_Printf( "VERTICAL SYNC: %s\n", gl_vsync->value ? "enabled" : "disabled" ); gEngfuncs.Con_Printf( "Color %d bits, Alpha %d bits, Depth %d bits, Stencil %d bits\n", glConfig.color_bits, @@ -719,7 +729,7 @@ void GL_InitExtensions( void ) // MCD has buffering issues #ifdef _WIN32 if( Q_strstr( glConfig.renderer_string, "gdi" )) - Cvar_SetValue( "gl_finish", 1 ); + gEngfuncs.Cvar_SetValue( "gl_finish", 1 ); #endif tr.framecount = tr.visframecount = 1; @@ -742,46 +752,47 @@ GL_InitCommands */ void GL_InitCommands( void ) { - r_speeds = Cvar_Get( "r_speeds", "0", FCVAR_ARCHIVE, "shows renderer speeds" ); - r_fullbright = Cvar_Get( "r_fullbright", "0", FCVAR_CHEAT, "disable lightmaps, get fullbright for entities" ); - r_norefresh = Cvar_Get( "r_norefresh", "0", 0, "disable 3D rendering (use with caution)" ); - r_showtree = Cvar_Get( "r_showtree", "0", FCVAR_ARCHIVE, "build the graph of visible BSP tree" ); - r_lighting_extended = Cvar_Get( "r_lighting_extended", "1", FCVAR_ARCHIVE, "allow to get lighting from world and bmodels" ); - r_lighting_modulate = Cvar_Get( "r_lighting_modulate", "0.6", FCVAR_ARCHIVE, "lightstyles modulate scale" ); - r_lighting_ambient = Cvar_Get( "r_lighting_ambient", "0.3", FCVAR_ARCHIVE, "map ambient lighting scale" ); - r_novis = Cvar_Get( "r_novis", "0", 0, "ignore vis information (perfomance test)" ); - r_nocull = Cvar_Get( "r_nocull", "0", 0, "ignore frustrum culling (perfomance test)" ); - r_detailtextures = Cvar_Get( "r_detailtextures", "1", FCVAR_ARCHIVE, "enable detail textures support, use '2' for autogenerate detail.txt" ); - r_lockpvs = Cvar_Get( "r_lockpvs", "0", FCVAR_CHEAT, "lockpvs area at current point (pvs test)" ); - r_lockfrustum = Cvar_Get( "r_lockfrustum", "0", FCVAR_CHEAT, "lock frustrum area at current point (cull test)" ); - r_dynamic = Cvar_Get( "r_dynamic", "1", FCVAR_ARCHIVE, "allow dynamic lighting (dlights, lightstyles)" ); - r_traceglow = Cvar_Get( "r_traceglow", "1", FCVAR_ARCHIVE, "cull flares behind models" ); - r_lightmap = Cvar_Get( "r_lightmap", "0", FCVAR_CHEAT, "lightmap debugging tool" ); - r_drawentities = Cvar_Get( "r_drawentities", "1", FCVAR_CHEAT, "render entities" ); + r_speeds = gEngfuncs.Cvar_Get( "r_speeds", "0", FCVAR_ARCHIVE, "shows renderer speeds" ); + r_fullbright = gEngfuncs.Cvar_Get( "r_fullbright", "0", FCVAR_CHEAT, "disable lightmaps, get fullbright for entities" ); + r_norefresh = gEngfuncs.Cvar_Get( "r_norefresh", "0", 0, "disable 3D rendering (use with caution)" ); + r_showtree = gEngfuncs.Cvar_Get( "r_showtree", "0", FCVAR_ARCHIVE, "build the graph of visible BSP tree" ); + r_lighting_extended = gEngfuncs.Cvar_Get( "r_lighting_extended", "1", FCVAR_ARCHIVE, "allow to get lighting from world and bmodels" ); + r_lighting_modulate = gEngfuncs.Cvar_Get( "r_lighting_modulate", "0.6", FCVAR_ARCHIVE, "lightstyles modulate scale" ); + r_lighting_ambient = gEngfuncs.Cvar_Get( "r_lighting_ambient", "0.3", FCVAR_ARCHIVE, "map ambient lighting scale" ); + r_novis = gEngfuncs.Cvar_Get( "r_novis", "0", 0, "ignore vis information (perfomance test)" ); + r_nocull = gEngfuncs.Cvar_Get( "r_nocull", "0", 0, "ignore frustrum culling (perfomance test)" ); + r_detailtextures = gEngfuncs.Cvar_Get( "r_detailtextures", "1", FCVAR_ARCHIVE, "enable detail textures support, use '2' for autogenerate detail.txt" ); + r_lockpvs = gEngfuncs.Cvar_Get( "r_lockpvs", "0", FCVAR_CHEAT, "lockpvs area at current point (pvs test)" ); + r_lockfrustum = gEngfuncs.Cvar_Get( "r_lockfrustum", "0", FCVAR_CHEAT, "lock frustrum area at current point (cull test)" ); + r_dynamic = gEngfuncs.Cvar_Get( "r_dynamic", "1", FCVAR_ARCHIVE, "allow dynamic lighting (dlights, lightstyles)" ); + r_traceglow = gEngfuncs.Cvar_Get( "r_traceglow", "1", FCVAR_ARCHIVE, "cull flares behind models" ); + r_lightmap = gEngfuncs.Cvar_Get( "r_lightmap", "0", FCVAR_CHEAT, "lightmap debugging tool" ); + r_drawentities = gEngfuncs.Cvar_Get( "r_drawentities", "1", FCVAR_CHEAT, "render entities" ); r_decals = gEngfuncs.pfnGetCvarPointer( "r_decals" ); + r_showhull = gEngfuncs.pfnGetCvarPointer( "r_showhull" ); - gl_extensions = Cvar_Get( "gl_allow_extensions", "1", FCVAR_GLCONFIG, "allow gl_extensions" ); - gl_texture_nearest = Cvar_Get( "gl_texture_nearest", "0", FCVAR_ARCHIVE, "disable texture filter" ); - gl_lightmap_nearest = Cvar_Get( "gl_lightmap_nearest", "0", FCVAR_ARCHIVE, "disable lightmap filter" ); - gl_check_errors = Cvar_Get( "gl_check_errors", "1", FCVAR_ARCHIVE, "ignore video engine errors" ); + gl_extensions = gEngfuncs.Cvar_Get( "gl_allow_extensions", "1", FCVAR_GLCONFIG, "allow gl_extensions" ); + gl_texture_nearest = gEngfuncs.Cvar_Get( "gl_texture_nearest", "0", FCVAR_ARCHIVE, "disable texture filter" ); + gl_lightmap_nearest = gEngfuncs.Cvar_Get( "gl_lightmap_nearest", "0", FCVAR_ARCHIVE, "disable lightmap filter" ); + gl_check_errors = gEngfuncs.Cvar_Get( "gl_check_errors", "1", FCVAR_ARCHIVE, "ignore video engine errors" ); gl_vsync = gEngfuncs.pfnGetCvarPointer( "gl_vsync" ); - gl_detailscale = Cvar_Get( "gl_detailscale", "4.0", FCVAR_ARCHIVE, "default scale applies while auto-generate list of detail textures" ); - gl_texture_anisotropy = Cvar_Get( "gl_anisotropy", "8", FCVAR_ARCHIVE, "textures anisotropic filter" ); - gl_texture_lodbias = Cvar_Get( "gl_texture_lodbias", "0.0", FCVAR_ARCHIVE, "LOD bias for mipmapped textures (perfomance|quality)" ); - gl_keeptjunctions = Cvar_Get( "gl_keeptjunctions", "1", FCVAR_ARCHIVE, "removing tjuncs causes blinking pixels" ); - gl_emboss_scale = Cvar_Get( "gl_emboss_scale", "0", FCVAR_ARCHIVE|FCVAR_LATCH, "fake bumpmapping scale" ); + gl_detailscale = gEngfuncs.Cvar_Get( "gl_detailscale", "4.0", FCVAR_ARCHIVE, "default scale applies while auto-generate list of detail textures" ); + gl_texture_anisotropy = gEngfuncs.Cvar_Get( "gl_anisotropy", "8", FCVAR_ARCHIVE, "textures anisotropic filter" ); + gl_texture_lodbias = gEngfuncs.Cvar_Get( "gl_texture_lodbias", "0.0", FCVAR_ARCHIVE, "LOD bias for mipmapped textures (perfomance|quality)" ); + gl_keeptjunctions = gEngfuncs.Cvar_Get( "gl_keeptjunctions", "1", FCVAR_ARCHIVE, "removing tjuncs causes blinking pixels" ); + gl_emboss_scale = gEngfuncs.Cvar_Get( "gl_emboss_scale", "0", FCVAR_ARCHIVE|FCVAR_LATCH, "fake bumpmapping scale" ); gl_showtextures = gEngfuncs.pfnGetCvarPointer( "r_showtextures" ); - gl_finish = Cvar_Get( "gl_finish", "0", FCVAR_ARCHIVE, "use glFinish instead of glFlush" ); - gl_nosort = Cvar_Get( "gl_nosort", "0", FCVAR_ARCHIVE, "disable sorting of translucent surfaces" ); - gl_clear = Cvar_Get( "gl_clear", "0", FCVAR_ARCHIVE, "clearing screen after each frame" ); - gl_test = Cvar_Get( "gl_test", "0", 0, "engine developer cvar for quick testing new features" ); - gl_wireframe = Cvar_Get( "gl_wireframe", "0", FCVAR_ARCHIVE|FCVAR_SPONLY, "show wireframe overlay" ); - gl_wgl_msaa_samples = Cvar_Get( "gl_wgl_msaa_samples", "0", FCVAR_GLCONFIG, "samples number for multisample anti-aliasing" ); - gl_msaa = Cvar_Get( "gl_msaa", "1", FCVAR_ARCHIVE, "enable or disable multisample anti-aliasing" ); - gl_stencilbits = Cvar_Get( "gl_stencilbits", "8", FCVAR_GLCONFIG, "pixelformat stencil bits (0 - auto)" ); - gl_round_down = Cvar_Get( "gl_round_down", "2", FCVAR_RENDERINFO, "round texture sizes to nearest POT value" ); + gl_finish = gEngfuncs.Cvar_Get( "gl_finish", "0", FCVAR_ARCHIVE, "use glFinish instead of glFlush" ); + gl_nosort = gEngfuncs.Cvar_Get( "gl_nosort", "0", FCVAR_ARCHIVE, "disable sorting of translucent surfaces" ); + gl_clear = gEngfuncs.Cvar_Get( "gl_clear", "0", FCVAR_ARCHIVE, "clearing screen after each frame" ); + gl_test = gEngfuncs.Cvar_Get( "gl_test", "0", 0, "engine developer cvar for quick testing new features" ); + gl_wireframe = gEngfuncs.Cvar_Get( "gl_wireframe", "0", FCVAR_ARCHIVE|FCVAR_SPONLY, "show wireframe overlay" ); + gl_wgl_msaa_samples = gEngfuncs.Cvar_Get( "gl_wgl_msaa_samples", "0", FCVAR_GLCONFIG, "samples number for multisample anti-aliasing" ); + gl_msaa = gEngfuncs.Cvar_Get( "gl_msaa", "1", FCVAR_ARCHIVE, "enable or disable multisample anti-aliasing" ); + gl_stencilbits = gEngfuncs.Cvar_Get( "gl_stencilbits", "8", FCVAR_GLCONFIG, "pixelformat stencil bits (0 - auto)" ); + gl_round_down = gEngfuncs.Cvar_Get( "gl_round_down", "2", FCVAR_RENDERINFO, "round texture sizes to nearest POT value" ); // these cvar not used by engine but some mods requires this - gl_polyoffset = Cvar_Get( "gl_polyoffset", "2.0", FCVAR_ARCHIVE, "polygon offset for decals" ); + gl_polyoffset = gEngfuncs.Cvar_Get( "gl_polyoffset", "2.0", FCVAR_ARCHIVE, "polygon offset for decals" ); // make sure gl_vsync is checked after vid_restart SetBits( gl_vsync->flags, FCVAR_CHANGED ); @@ -789,6 +800,11 @@ void GL_InitCommands( void ) vid_gamma = gEngfuncs.pfnGetCvarPointer( "gamma" ); vid_brightness = gEngfuncs.pfnGetCvarPointer( "brightness" ); + tracerred = gEngfuncs.pfnGetCvarPointer( "tracerred" ); + tracergreen = gEngfuncs.pfnGetCvarPointer( "tracergreen" ); + tracerblue = gEngfuncs.pfnGetCvarPointer( "tracerblue" ); + traceralpha = gEngfuncs.pfnGetCvarPointer( "traceralpha" ); + gEngfuncs.Cmd_AddCommand( "r_info", R_RenderInfo_f, "display renderer info" ); gEngfuncs.Cmd_AddCommand( "timerefresh", SCR_TimeRefresh_f, "turn quickly and print rendering statistcs" ); @@ -839,8 +855,8 @@ static void R_CheckVBO( void ) def = "0"; } - r_vbo = Cvar_Get( "r_vbo", def, flags, "draw world using VBO" ); - r_vbo_dlightmode = Cvar_Get( "r_vbo_dlightmode", dlightmode, FCVAR_ARCHIVE, "vbo dlight rendering mode(0-1)" ); + r_vbo = gEngfuncs.Cvar_Get( "r_vbo", def, flags, "draw world using VBO" ); + r_vbo_dlightmode = gEngfuncs.Cvar_Get( "r_vbo_dlightmode", dlightmode, FCVAR_ARCHIVE, "vbo dlight rendering mode(0-1)" ); // check if enabled manually if( CVAR_TO_BOOL(r_vbo) ) diff --git a/ref_gl/gl_rlight.c b/ref_gl/gl_rlight.c index 0613f250..38ee1235 100644 --- a/ref_gl/gl_rlight.c +++ b/ref_gl/gl_rlight.c @@ -152,13 +152,14 @@ void R_PushDlights( void ) int i; tr.dlightframecount = tr.framecount; - l = cl_dlights; RI.currententity = gEngfuncs.GetEntityByIndex( 0 ); RI.currentmodel = RI.currententity->model; for( i = 0; i < MAX_DLIGHTS; i++, l++ ) { + l = gEngfuncs.GetDynamicLight( i ); + if( l->die < gpGlobals->time || !l->radius ) continue; @@ -179,8 +180,10 @@ int R_CountDlights( void ) dlight_t *l; int i, numDlights = 0; - for( i = 0, l = cl_dlights; i < MAX_DLIGHTS; i++, l++ ) + for( i = 0; i < MAX_DLIGHTS; i++ ) { + l = gEngfuncs.GetDynamicLight( i ); + if( l->die < gpGlobals->time || !l->radius ) continue; @@ -347,9 +350,9 @@ static qboolean R_RecursiveLightPoint( model_t *model, mnode_t *node, float p1f, } else { - cv->r += LightToTexGamma( lm->r ) * scale; - cv->g += LightToTexGamma( lm->g ) * scale; - cv->b += LightToTexGamma( lm->b ) * scale; + cv->r += gEngfuncs.LightToTexGamma( lm->r ) * scale; + cv->g += gEngfuncs.LightToTexGamma( lm->g ) * scale; + cv->b += gEngfuncs.LightToTexGamma( lm->b ) * scale; } lm += size; // skip to next lightmap diff --git a/ref_gl/gl_rmain.c b/ref_gl/gl_rmain.c index 5e505017..ac6d79ac 100644 --- a/ref_gl/gl_rmain.c +++ b/ref_gl/gl_rmain.c @@ -852,7 +852,7 @@ void R_DrawEntitiesOnList( void ) if( !RI.onlyClientDraw ) { - CL_DrawEFX( tr.frametime, false ); + gEngfuncs.CL_DrawEFX( tr.frametime, false ); } GL_CheckForErrors(); @@ -910,7 +910,7 @@ void R_DrawEntitiesOnList( void ) if( !RI.onlyClientDraw ) { R_AllowFog( false ); - CL_DrawEFX( tr.frametime, true ); + gEngfuncs.CL_DrawEFX( tr.frametime, true ); R_AllowFog( true ); } @@ -920,7 +920,7 @@ void R_DrawEntitiesOnList( void ) if( !RI.onlyClientDraw ) R_DrawViewModel(); - CL_ExtraUpdate(); + gEngfuncs.CL_ExtraUpdate(); GL_CheckForErrors(); } @@ -959,7 +959,7 @@ void R_RenderScene( void ) R_DrawWorld(); R_CheckFog(); - CL_ExtraUpdate (); // don't let sound get messed up if going slow + gEngfuncs.CL_ExtraUpdate (); // don't let sound get messed up if going slow R_DrawEntitiesOnList(); @@ -1048,7 +1048,7 @@ void R_BeginFrame( qboolean clearScene ) // swapinterval stuff GL_UpdateSwapInterval(); - CL_ExtraUpdate (); + gEngfuncs.CL_ExtraUpdate (); } /* diff --git a/ref_gl/gl_rmisc.c b/ref_gl/gl_rmisc.c index 6065d016..9690e027 100644 --- a/ref_gl/gl_rmisc.c +++ b/ref_gl/gl_rmisc.c @@ -147,7 +147,7 @@ void R_NewMap( void ) sf->fadeReset += gpGlobals->time; sf->fadeEnd += sf->fadeReset; - Cvar_SetValue( "v_dark", 0.0f ); + gEngfuncs.Cvar_SetValue( "v_dark", 0.0f ); } // clear out efrags in case the level hasn't been reloaded diff --git a/ref_gl/gl_rpart.c b/ref_gl/gl_rpart.c index 4f4b4f1a..ca7f0a81 100644 --- a/ref_gl/gl_rpart.c +++ b/ref_gl/gl_rpart.c @@ -278,7 +278,7 @@ void CL_DrawParticlesExternal( const ref_viewpass_t *rvp, qboolean trans_pass, f memcpy( RI.visbytes, tr.visbytes, gpGlobals->visbytes ); tr.frametime = frametime; - CL_DrawEFX( frametime, trans_pass ); + gEngfuncs.CL_DrawEFX( frametime, trans_pass ); // restore internal state memcpy( &RI, &oldRI, sizeof( ref_instance_t )); diff --git a/ref_gl/gl_rsurf.c b/ref_gl/gl_rsurf.c index f8fd9c44..c73f527d 100644 --- a/ref_gl/gl_rsurf.c +++ b/ref_gl/gl_rsurf.c @@ -537,7 +537,7 @@ void R_AddDynamicLights( msurface_t *surf ) if( !FBitSet( surf->dlightbits, BIT( lnum ))) continue; // not lit by this light - dl = &cl_dlights[lnum]; + dl = gEngfuncs.GetDynamicLight( lnum ); // transform light origin to local bmodel space if( !tr.modelviewIdentity ) @@ -581,9 +581,9 @@ void R_AddDynamicLights( msurface_t *surf ) if( dist < minlight ) { - bl[0] += ((int)((rad - dist) * 256) * LightToTexGamma( dl->color.r )) / 256; - bl[1] += ((int)((rad - dist) * 256) * LightToTexGamma( dl->color.g )) / 256; - bl[2] += ((int)((rad - dist) * 256) * LightToTexGamma( dl->color.b )) / 256; + bl[0] += ((int)((rad - dist) * 256) * gEngfuncs.LightToTexGamma( dl->color.r )) / 256; + bl[1] += ((int)((rad - dist) * 256) * gEngfuncs.LightToTexGamma( dl->color.g )) / 256; + bl[2] += ((int)((rad - dist) * 256) * gEngfuncs.LightToTexGamma( dl->color.b )) / 256; } } } @@ -740,9 +740,9 @@ static void R_BuildLightMap( msurface_t *surf, byte *dest, int stride, qboolean for( i = 0, bl = r_blocklights; i < size; i++, bl += 3, lm++ ) { - bl[0] += LightToTexGamma( lm->r ) * scale; - bl[1] += LightToTexGamma( lm->g ) * scale; - bl[2] += LightToTexGamma( lm->b ) * scale; + bl[0] += gEngfuncs.LightToTexGamma( lm->r ) * scale; + bl[1] += gEngfuncs.LightToTexGamma( lm->g ) * scale; + bl[2] += gEngfuncs.LightToTexGamma( lm->b ) * scale; } } @@ -1567,8 +1567,10 @@ void R_DrawBrushModel( cl_entity_t *e ) else VectorSubtract( RI.cullorigin, e->origin, tr.modelorg ); // calculate dynamic lighting for bmodel - for( k = 0, l = cl_dlights; k < MAX_DLIGHTS; k++, l++ ) + for( k = 0; k < MAX_DLIGHTS; k++ ) { + l = gEngfuncs.GetDynamicLight( k ); + if( l->die < gpGlobals->time || !l->radius ) continue; @@ -3322,15 +3324,15 @@ void R_DrawWorld( void ) R_ClearSkyBox (); - start = Sys_DoubleTime(); + start = gEngfuncs.pfnTime(); if( RI.drawOrtho ) R_DrawWorldTopView( WORLDMODEL->nodes, RI.frustum.clipFlags ); else R_RecursiveWorldNode( WORLDMODEL->nodes, RI.frustum.clipFlags ); - end = Sys_DoubleTime(); + end = gEngfuncs.pfnTime(); r_stats.t_world_node = end - start; - start = Sys_DoubleTime(); + start = gEngfuncs.pfnTime(); R_DrawVBO( !CVAR_TO_BOOL(r_fullbright) && !!WORLDMODEL->lightdata, true ); R_DrawTextureChains(); @@ -3347,7 +3349,7 @@ void R_DrawWorld( void ) R_DrawSkyBox(); } - end = Sys_DoubleTime(); + end = gEngfuncs.pfnTime(); r_stats.t_world_draw = end - start; tr.num_draw_decals = 0; @@ -3557,7 +3559,7 @@ void GL_BuildLightmaps( void ) memset( &RI, 0, sizeof( RI )); // update the lightmap blocksize - if( FBitSet( host.features, ENGINE_LARGE_LIGHTMAPS )) + if( FBitSet( gEngfuncs.CL_GetRenderParm( PARM_FEATURES, 0 ), ENGINE_LARGE_LIGHTMAPS )) tr.block_size = BLOCK_SIZE_MAX; else tr.block_size = BLOCK_SIZE_DEFAULT; @@ -3625,15 +3627,15 @@ void GL_InitRandomTable( void ) int tu, tv; // make random predictable - COM_SetRandomSeed( 255 ); + gEngfuncs.COM_SetRandomSeed( 255 ); for( tu = 0; tu < MOD_FRAMES; tu++ ) { for( tv = 0; tv < MOD_FRAMES; tv++ ) { - rtable[tu][tv] = COM_RandomLong( 0, 0x7FFF ); + rtable[tu][tv] = gEngfuncs.COM_RandomLong( 0, 0x7FFF ); } } - COM_SetRandomSeed( 0 ); + gEngfuncs.COM_SetRandomSeed( 0 ); } diff --git a/ref_gl/gl_sprite.c b/ref_gl/gl_sprite.c index abcc5c09..38fce688 100644 --- a/ref_gl/gl_sprite.c +++ b/ref_gl/gl_sprite.c @@ -41,8 +41,8 @@ R_SpriteInit */ void R_SpriteInit( void ) { - r_sprite_lerping = Cvar_Get( "r_sprite_lerping", "1", FCVAR_ARCHIVE, "enables sprite animation lerping" ); - r_sprite_lighting = Cvar_Get( "r_sprite_lighting", "1", FCVAR_ARCHIVE, "enables sprite lighting (blood etc)" ); + r_sprite_lerping = gEngfuncs.Cvar_Get( "r_sprite_lerping", "1", FCVAR_ARCHIVE, "enables sprite animation lerping" ); + r_sprite_lighting = gEngfuncs.Cvar_Get( "r_sprite_lighting", "1", FCVAR_ARCHIVE, "enables sprite lighting (blood etc)" ); } /* @@ -162,9 +162,9 @@ void Mod_LoadSpriteModel( model_t *mod, const void *buffer, qboolean *loaded, ui { rgbdata_t *pal; - pal = FS_LoadImage( "#id.pal", (byte *)&i, 768 ); + pal = gEngfuncs.FS_LoadImage( "#id.pal", (byte *)&i, 768 ); pframetype = (dframetype_t *)(buffer + sizeof( dsprite_q1_t )); // pinq1 + 1 - FS_FreeImage( pal ); // palette installed, no reason to keep this data + gEngfuncs.FS_FreeImage( pal ); // palette installed, no reason to keep this data } else if( *numi == 256 ) { @@ -175,18 +175,18 @@ void Mod_LoadSpriteModel( model_t *mod, const void *buffer, qboolean *loaded, ui switch( psprite->texFormat ) { case SPR_INDEXALPHA: - pal = FS_LoadImage( "#gradient.pal", src, 768 ); + pal = gEngfuncs.FS_LoadImage( "#gradient.pal", src, 768 ); break; case SPR_ALPHTEST: - pal = FS_LoadImage( "#masked.pal", src, 768 ); + pal = gEngfuncs.FS_LoadImage( "#masked.pal", src, 768 ); break; default: - pal = FS_LoadImage( "#normal.pal", src, 768 ); + pal = gEngfuncs.FS_LoadImage( "#normal.pal", src, 768 ); break; } pframetype = (dframetype_t *)(src + 768); - FS_FreeImage( pal ); // palette installed, no reason to keep this data + gEngfuncs.FS_FreeImage( pal ); // palette installed, no reason to keep this data } else { @@ -245,7 +245,7 @@ void Mod_LoadMapSprite( model_t *mod, const void *buffer, size_t size, qboolean if( loaded ) *loaded = false; Q_snprintf( texname, sizeof( texname ), "#%s", mod->name ); Image_SetForceFlags( IL_OVERVIEW ); - pix = FS_LoadImage( texname, buffer, size ); + pix = gEngfuncs.FS_LoadImage( texname, buffer, size ); Image_ClearForceFlags(); if( !pix ) return; // bad image or something else @@ -264,7 +264,7 @@ void Mod_LoadMapSprite( model_t *mod, const void *buffer, size_t size, qboolean if( h < MAPSPRITE_SIZE ) h = MAPSPRITE_SIZE; // resample image if needed - Image_Process( &pix, w, h, IMAGE_FORCE_RGBA|IMAGE_RESAMPLE, 0.0f ); + gEngfuncs.Image_Process( &pix, w, h, IMAGE_FORCE_RGBA|IMAGE_RESAMPLE, 0.0f ); w = h = MAPSPRITE_SIZE; @@ -338,7 +338,7 @@ void Mod_LoadMapSprite( model_t *mod, const void *buffer, size_t size, qboolean } } - FS_FreeImage( pix ); + gEngfuncs.FS_FreeImage( pix ); Mem_Free( temp.buffer ); if( loaded ) *loaded = true; diff --git a/ref_gl/gl_studio.c b/ref_gl/gl_studio.c index db9113f1..9c10e11e 100644 --- a/ref_gl/gl_studio.c +++ b/ref_gl/gl_studio.c @@ -139,9 +139,9 @@ R_StudioInit */ void R_StudioInit( void ) { - cl_himodels = Cvar_Get( "cl_himodels", "1", FCVAR_ARCHIVE, "draw high-resolution player models in multiplayer" ); - r_studio_sort_textures = Cvar_Get( "r_studio_sort_textures", "0", FCVAR_ARCHIVE, "change draw order for additive meshes" ); - r_drawviewmodel = Cvar_Get( "r_drawviewmodel", "1", 0, "draw firstperson weapon model" ); + cl_himodels = gEngfuncs.Cvar_Get( "cl_himodels", "1", FCVAR_ARCHIVE, "draw high-resolution player models in multiplayer" ); + r_studio_sort_textures = gEngfuncs.Cvar_Get( "r_studio_sort_textures", "0", FCVAR_ARCHIVE, "change draw order for additive meshes" ); + r_drawviewmodel = gEngfuncs.Cvar_Get( "r_drawviewmodel", "1", 0, "draw firstperson weapon model" ); Matrix3x4_LoadIdentity( g_studio.rotationmatrix ); Cvar_RegisterVariable( &r_glowshellfreq ); @@ -172,8 +172,8 @@ static void R_StudioSetupTimings( void ) else { // menu stuff - g_studio.time = host.realtime; - g_studio.frametime = host.frametime; + g_studio.time = gpGlobals->realtime; + g_studio.frametime = gpGlobals->frametime; } } @@ -600,12 +600,12 @@ void R_StudioSetUpTransform( cl_entity_t *e ) VectorCopy( e->angles, angles ); // interpolate monsters position (moved into UpdateEntityFields by user request) - if( e->curstate.movetype == MOVETYPE_STEP && !FBitSet( host.features, ENGINE_COMPUTE_STUDIO_LERP )) + if( e->curstate.movetype == MOVETYPE_STEP && !FBitSet( gEngfuncs.CL_GetRenderParm( PARM_FEATURES, 0 ), ENGINE_COMPUTE_STUDIO_LERP )) { R_StudioLerpMovement( e, g_studio.time, origin, angles ); } - if( !FBitSet( host.features, ENGINE_COMPENSATE_QUAKE_BUG )) + if( !FBitSet( gEngfuncs.CL_GetRenderParm( PARM_FEATURES, 0 ), ENGINE_COMPENSATE_QUAKE_BUG )) angles[PITCH] = -angles[PITCH]; // stupid quake bug // don't rotate clients, only aim @@ -718,21 +718,21 @@ void R_StudioFxTransform( cl_entity_t *ent, matrix3x4 transform ) { case kRenderFxDistort: case kRenderFxHologram: - if( !COM_RandomLong( 0, 49 )) + if( !gEngfuncs.COM_RandomLong( 0, 49 )) { - int axis = COM_RandomLong( 0, 1 ); + int axis = gEngfuncs.COM_RandomLong( 0, 1 ); if( axis == 1 ) axis = 2; // choose between x & z - VectorScale( transform[axis], COM_RandomFloat( 1.0f, 1.484f ), transform[axis] ); + VectorScale( transform[axis], gEngfuncs.COM_RandomFloat( 1.0f, 1.484f ), transform[axis] ); } - else if( !COM_RandomLong( 0, 49 )) + else if( !gEngfuncs.COM_RandomLong( 0, 49 )) { float offset; - int axis = COM_RandomLong( 0, 1 ); + int axis = gEngfuncs.COM_RandomLong( 0, 1 ); if( axis == 1 ) axis = 2; // choose between x & z - offset = COM_RandomFloat( -10.0f, 10.0f ); - transform[COM_RandomLong( 0, 2 )][3] += offset; + offset = gEngfuncs.COM_RandomFloat( -10.0f, 10.0f ); + transform[gEngfuncs.COM_RandomLong( 0, 2 )][3] += offset; } break; case kRenderFxExplode: @@ -1400,7 +1400,7 @@ void R_StudioDynamicLight( cl_entity_t *ent, alight_t *plight ) msurface_t *psurf = NULL; pmtrace_t trace; - if( FBitSet( host.features, ENGINE_WRITE_LARGE_COORD )) + if( FBitSet( gEngfuncs.CL_GetRenderParm( PARM_FEATURES, 0 ), ENGINE_WRITE_LARGE_COORD )) { vecEnd[0] = origin[0] - mv->skyvec_x * 65536.0f; vecEnd[1] = origin[1] - mv->skyvec_y * 65536.0f; @@ -1421,9 +1421,9 @@ void R_StudioDynamicLight( cl_entity_t *ent, alight_t *plight ) { VectorSet( lightDir, mv->skyvec_x, mv->skyvec_y, mv->skyvec_z ); - light.r = LightToTexGamma( bound( 0, mv->skycolor_r, 255 )); - light.g = LightToTexGamma( bound( 0, mv->skycolor_g, 255 )); - light.b = LightToTexGamma( bound( 0, mv->skycolor_b, 255 )); + light.r = gEngfuncs.LightToTexGamma( bound( 0, mv->skycolor_r, 255 )); + light.g = gEngfuncs.LightToTexGamma( bound( 0, mv->skycolor_g, 255 )); + light.b = gEngfuncs.LightToTexGamma( bound( 0, mv->skycolor_b, 255 )); } } @@ -1484,8 +1484,10 @@ void R_StudioDynamicLight( cl_entity_t *ent, alight_t *plight ) // scale lightdir by light intentsity VectorScale( lightDir, total, lightDir ); - for( lnum = 0, dl = cl_dlights; lnum < MAX_DLIGHTS; lnum++, dl++ ) + for( lnum = 0; lnum < MAX_DLIGHTS; lnum++ ) { + dl = gEngfuncs.GetDynamicLight( lnum ); + if( dl->die < g_studio.time || !r_dynamic->value ) continue; @@ -1504,9 +1506,9 @@ void R_StudioDynamicLight( cl_entity_t *ent, alight_t *plight ) VectorAdd( lightDir, dist, lightDir ); - finalLight[0] += LightToTexGamma( dl->color.r ) * ( add / 256.0f ) * 2.0f; - finalLight[1] += LightToTexGamma( dl->color.g ) * ( add / 256.0f ) * 2.0f; - finalLight[2] += LightToTexGamma( dl->color.b ) * ( add / 256.0f ) * 2.0f; + finalLight[0] += gEngfuncs.LightToTexGamma( dl->color.r ) * ( add / 256.0f ) * 2.0f; + finalLight[1] += gEngfuncs.LightToTexGamma( dl->color.g ) * ( add / 256.0f ) * 2.0f; + finalLight[2] += gEngfuncs.LightToTexGamma( dl->color.b ) * ( add / 256.0f ) * 2.0f; } } @@ -1565,8 +1567,10 @@ void R_StudioEntityLight( alight_t *lightinfo ) dist2 = 1000000.0f; k = 0; - for( lnum = 0, el = cl_elights; lnum < MAX_ELIGHTS; lnum++, el++ ) + for( lnum = 0; lnum < MAX_ELIGHTS; lnum++ ) { + el = gEngfuncs.GetEntityLight( lnum ); + if( el->die < g_studio.time || el->radius <= 0.0f ) continue; @@ -1604,9 +1608,9 @@ void R_StudioEntityLight( alight_t *lightinfo ) if( k != -1 ) { - g_studio.locallightcolor[k].r = LightToTexGamma( el->color.r ); - g_studio.locallightcolor[k].g = LightToTexGamma( el->color.g ); - g_studio.locallightcolor[k].b = LightToTexGamma( el->color.b ); + g_studio.locallightcolor[k].r = gEngfuncs.LightToTexGamma( el->color.r ); + g_studio.locallightcolor[k].g = gEngfuncs.LightToTexGamma( el->color.g ); + g_studio.locallightcolor[k].b = gEngfuncs.LightToTexGamma( el->color.b ); g_studio.locallightR2[k] = r2; g_studio.locallight[k] = el; lstrength[k] = minstrength; @@ -3401,7 +3405,7 @@ void R_GatherPlayerLight( void ) tr.ignore_lightgamma = true; c = R_LightPoint( view->origin ); tr.ignore_lightgamma = false; - cl.local.light_level = (c.r + c.g + c.b) / 3; + gEngfuncs.SetLocalLightLevel( ( c.r + c.g + c.b ) / 3 ); } /* @@ -3543,7 +3547,7 @@ static void R_StudioLoadTexture( model_t *mod, studiohdr_t *phdr, mstudiotexture Image_SetMDLPointer((byte *)phdr + ptexture->index); size = sizeof( mstudiotexture_t ) + ptexture->width * ptexture->height + 768; - if( FBitSet( host.features, ENGINE_LOAD_DELUXEDATA ) && FBitSet( ptexture->flags, STUDIO_NF_MASKED )) + if( FBitSet( gEngfuncs.CL_GetRenderParm( PARM_FEATURES, 0 ), ENGINE_LOAD_DELUXEDATA ) && FBitSet( ptexture->flags, STUDIO_NF_MASKED )) flags |= TF_KEEP_SOURCE; // Paranoia2 texture alpha-tracing // build the texname @@ -3613,13 +3617,18 @@ static model_t *pfnModelHandle( int modelindex ) return gEngfuncs.pfnGetModelByIndex( modelindex ); } +static void *pfnMod_StudioExtradata( mode_t *mod ) +{ + return gEngfuncs.Mod_Extradata( mod_studio, mod ); +} + static engine_studio_api_t gStudioAPI = { Mod_Calloc, Mod_CacheCheck, Mod_LoadCacheFile, pfnMod_ForName, - Mod_StudioExtradata, + pfnMod_StudioExtradata, pfnModelHandle, pfnGetCurrentEntity, pfnPlayerInfo, @@ -3685,7 +3694,7 @@ void CL_InitStudioAPI( void ) cl_righthand = Cvar_FindVar( "cl_righthand" ); if( cl_righthand == NULL ) - cl_righthand = Cvar_Get( "cl_righthand", "0", FCVAR_ARCHIVE, "flip viewmodel (left to right)" ); + cl_righthand = gEngfuncs.Cvar_Get( "cl_righthand", "0", FCVAR_ARCHIVE, "flip viewmodel (left to right)" ); // Xash will be used internal StudioModelRenderer if( !clgame.dllFuncs.pfnGetStudioModelInterface ) diff --git a/ref_gl/gl_warp.c b/ref_gl/gl_warp.c index 7093f34d..6e93a237 100644 --- a/ref_gl/gl_warp.c +++ b/ref_gl/gl_warp.c @@ -668,19 +668,19 @@ void R_InitSkyClouds( mip_t *mt, texture_t *tx, qboolean custom_palette ) int size = (int)sizeof( mip_t ) + ((mt->width * mt->height * 85)>>6); if( custom_palette ) size += sizeof( short ) + 768; - r_sky = FS_LoadImage( texname, (byte *)mt, size ); + r_sky = gEngfuncs.FS_LoadImage( texname, (byte *)mt, size ); } else { // okay, loading it from wad - r_sky = FS_LoadImage( texname, NULL, 0 ); + r_sky = gEngfuncs.FS_LoadImage( texname, NULL, 0 ); } // make sure what sky image is valid if( !r_sky || !r_sky->palette || r_sky->type != PF_INDEXED_32 || r_sky->height == 0 ) { gEngfuncs.Con_Reportf( S_ERROR "R_InitSky: unable to load sky texture %s\n", tx->name ); - if( r_sky ) FS_FreeImage( r_sky ); + if( r_sky ) gEngfuncs.FS_FreeImage( r_sky ); return; } @@ -744,7 +744,7 @@ void R_InitSkyClouds( mip_t *mt, texture_t *tx, qboolean custom_palette ) tr.alphaskyTexture = GL_LoadTextureInternal( "alpha_sky", &r_temp, TF_NOMIPMAP ); // clean up - FS_FreeImage( r_sky ); + gEngfuncs.FS_FreeImage( r_sky ); Mem_Free( trans ); } diff --git a/ref_gl/wscript b/ref_gl/wscript index b91061a1..8bed8fa4 100644 --- a/ref_gl/wscript +++ b/ref_gl/wscript @@ -30,10 +30,12 @@ def build(bld): name = get_subproject_name(bld) bld.env = bld.all_envs[name] - libs = [] + libs = [ 'M' ] source = bld.path.ant_glob(['*.c']) + source += [ '../engine/common/mathlib.c', '../engine/common/crtlib.c', '../engine/common/matrixlib.c' ] + includes = ['.', '../engine', '../engine/common',