mirror of
https://github.com/FWGS/xash3d-fwgs
synced 2025-01-11 10:55:12 +01:00
ref: replace model (un)loading by Mod_ProcessRenderData
This commit is contained in:
parent
8339096ad8
commit
297ca08e81
@ -1310,9 +1310,7 @@ void CL_EmitEntities( void )
|
||||
// set client ideal pitch when mlook is disabled
|
||||
CL_SetIdealPitch ();
|
||||
|
||||
// clear the scene befor start new frame
|
||||
if( clgame.drawFuncs.R_ClearScene != NULL )
|
||||
clgame.drawFuncs.R_ClearScene();
|
||||
ref.dllFuncs.R_ClearScene ();
|
||||
|
||||
// link all the visible clients first
|
||||
CL_LinkPlayers ( &cl.frames[cl.parsecountmod] );
|
||||
|
@ -1135,20 +1135,12 @@ void CL_InitEdicts( void )
|
||||
clgame.remap_info = (remap_info_t **)Mem_Calloc( clgame.mempool, sizeof( remap_info_t* ) * clgame.maxRemapInfos );
|
||||
}
|
||||
|
||||
if( clgame.drawFuncs.R_ProcessEntData != NULL )
|
||||
{
|
||||
// let the client.dll free custom data
|
||||
clgame.drawFuncs.R_ProcessEntData( true );
|
||||
}
|
||||
ref.dllFuncs.R_ProcessEntData( true );
|
||||
}
|
||||
|
||||
void CL_FreeEdicts( void )
|
||||
{
|
||||
if( clgame.drawFuncs.R_ProcessEntData != NULL )
|
||||
{
|
||||
// let the client.dll free custom data
|
||||
clgame.drawFuncs.R_ProcessEntData( false );
|
||||
}
|
||||
ref.dllFuncs.R_ProcessEntData( false );
|
||||
|
||||
if( clgame.entities )
|
||||
Mem_Free( clgame.entities );
|
||||
@ -1236,7 +1228,11 @@ static qboolean CL_LoadHudSprite( const char *szSpriteName, model_t *m_pSprite,
|
||||
|
||||
if( type == SPR_MAPSPRITE )
|
||||
ref.dllFuncs.Mod_LoadMapSprite( m_pSprite, buf, size, &loaded );
|
||||
else Mod_LoadSpriteModel( m_pSprite, buf, &loaded, texFlags );
|
||||
else
|
||||
{
|
||||
Mod_LoadSpriteModel( m_pSprite, buf, &loaded, texFlags );
|
||||
ref.dllFuncs.Mod_ProcessRenderData( m_pSprite, true, buf );
|
||||
}
|
||||
|
||||
Mem_Free( buf );
|
||||
|
||||
|
@ -1554,9 +1554,6 @@ void CL_RegisterResources( sizebuf_t *msg )
|
||||
|
||||
CL_SetupOverviewParams();
|
||||
|
||||
if( clgame.drawFuncs.R_NewMap != NULL )
|
||||
clgame.drawFuncs.R_NewMap();
|
||||
|
||||
// release unused SpriteTextures
|
||||
for( i = 1, mod = clgame.sprites; i < MAX_CLIENT_SPRITES; i++, mod++ )
|
||||
{
|
||||
@ -3138,9 +3135,6 @@ void CL_LegacyPrecache_f( void )
|
||||
|
||||
CL_SetupOverviewParams();
|
||||
|
||||
if( clgame.drawFuncs.R_NewMap != NULL )
|
||||
clgame.drawFuncs.R_NewMap();
|
||||
|
||||
// release unused SpriteTextures
|
||||
for( i = 1, mod = clgame.sprites; i < MAX_CLIENT_SPRITES; i++, mod++ )
|
||||
{
|
||||
|
@ -99,17 +99,13 @@ void Mod_LoadSpriteModel( model_t *mod, const void *buffer, qboolean *loaded, ui
|
||||
mod->mins[2] = -pinhl->bounds[1] * 0.5f;
|
||||
mod->maxs[2] = pinhl->bounds[1] * 0.5f;
|
||||
}
|
||||
if( loaded ) *loaded = true; // done
|
||||
|
||||
if( Host_IsDedicated() )
|
||||
{
|
||||
// skip frames loading
|
||||
if( loaded ) *loaded = true; // done
|
||||
|
||||
psprite->numframes = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
// continue loading frames
|
||||
#ifndef XASH_DEDICATED
|
||||
ref.dllFuncs.Mod_LoadModel( mod_sprite, mod, buffer, loaded, texFlags );
|
||||
#endif
|
||||
}
|
||||
|
@ -88,11 +88,7 @@ static void Mod_FreeUserData( model_t *mod )
|
||||
#ifndef XASH_DEDICATED
|
||||
else
|
||||
{
|
||||
if( clgame.drawFuncs.Mod_ProcessUserData != NULL )
|
||||
{
|
||||
// let the client.dll free custom data
|
||||
clgame.drawFuncs.Mod_ProcessUserData( mod, false, NULL );
|
||||
}
|
||||
ref.dllFuncs.Mod_ProcessRenderData( mod, false, NULL );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -111,9 +107,6 @@ void Mod_FreeModel( model_t *mod )
|
||||
if( mod->type != mod_brush || mod->name[0] != '*' )
|
||||
{
|
||||
Mod_FreeUserData( mod );
|
||||
#ifndef XASH_DEDICATED
|
||||
ref.dllFuncs.Mod_UnloadTextures( mod );
|
||||
#endif
|
||||
Mem_FreePool( &mod->mempool );
|
||||
}
|
||||
|
||||
@ -295,8 +288,8 @@ model_t *Mod_LoadModel( model_t *mod, qboolean crash )
|
||||
Mod_LoadSpriteModel( mod, buf, &loaded, 0 );
|
||||
break;
|
||||
case IDALIASHEADER:
|
||||
// REFTODO: move alias loader to engine
|
||||
ref.dllFuncs.Mod_LoadModel( mod_alias, mod, buf, &loaded, 0 );
|
||||
// REFTODO: move server-related code here
|
||||
loaded = true;
|
||||
break;
|
||||
case Q1BSP_VERSION:
|
||||
case HLBSP_VERSION:
|
||||
@ -310,18 +303,7 @@ model_t *Mod_LoadModel( model_t *mod, qboolean crash )
|
||||
else Con_Printf( S_ERROR "%s has unknown format\n", tempname );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if( !loaded )
|
||||
{
|
||||
Mod_FreeModel( mod );
|
||||
Mem_Free( buf );
|
||||
|
||||
if( crash ) Host_Error( "Could not load model %s\n", tempname );
|
||||
else Con_Printf( S_ERROR "Could not load model %s\n", tempname );
|
||||
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
if( loaded )
|
||||
{
|
||||
if( world.loading )
|
||||
SetBits( mod->flags, MODEL_WORLD ); // mark worldmodel
|
||||
@ -337,15 +319,22 @@ model_t *Mod_LoadModel( model_t *mod, qboolean crash )
|
||||
#ifndef XASH_DEDICATED
|
||||
else
|
||||
{
|
||||
if( clgame.drawFuncs.Mod_ProcessUserData != NULL )
|
||||
{
|
||||
// let the client.dll load custom data
|
||||
clgame.drawFuncs.Mod_ProcessUserData( mod, true, buf );
|
||||
}
|
||||
loaded = ref.dllFuncs.Mod_ProcessRenderData( mod, true, buf );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
if( !loaded )
|
||||
{
|
||||
Mod_FreeModel( mod );
|
||||
Mem_Free( buf );
|
||||
|
||||
if( crash ) Host_Error( "Could not load model %s\n", tempname );
|
||||
else Con_Printf( S_ERROR "Could not load model %s\n", tempname );
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
p = &mod_crcinfo[mod - mod_known];
|
||||
mod->needload = NL_PRESENT;
|
||||
|
||||
|
@ -460,6 +460,7 @@ typedef struct ref_interface_s
|
||||
|
||||
qboolean (*R_AddEntity)( struct cl_entity_s *clent, int type );
|
||||
void (*CL_AddCustomBeam)( cl_entity_t *pEnvBeam );
|
||||
void (*R_ProcessEntData)( qboolean allocate );
|
||||
|
||||
// view info
|
||||
qboolean (*IsNormalPass)( void );
|
||||
@ -518,9 +519,8 @@ typedef struct ref_interface_s
|
||||
|
||||
// model management
|
||||
// flags ignored for everything except spritemodels
|
||||
void (*Mod_LoadModel)( modtype_t desiredType, model_t *mod, const byte *buf, qboolean *loaded, int flags );
|
||||
void (*Mod_LoadMapSprite)( struct model_s *mod, const void *buffer, size_t size, qboolean *loaded );
|
||||
void (*Mod_UnloadTextures)( model_t *mod );
|
||||
qboolean (*Mod_ProcessRenderData)( model_t *mod, qboolean create, const byte *buffer );
|
||||
void (*Mod_StudioLoadTextures)( model_t *mod, void *data );
|
||||
|
||||
// efx implementation
|
||||
|
@ -164,6 +164,42 @@ static void Mod_LoadModel( modtype_t desiredType, model_t *mod, const byte *buf,
|
||||
}
|
||||
}
|
||||
|
||||
qboolean Mod_ProcessRenderData( model_t *mod, qboolean create, const byte *buf )
|
||||
{
|
||||
qboolean loaded = true;
|
||||
|
||||
if( create )
|
||||
{
|
||||
|
||||
|
||||
switch( mod->type )
|
||||
{
|
||||
case mod_studio:
|
||||
// Mod_LoadStudioModel( mod, buf, loaded );
|
||||
break;
|
||||
case mod_sprite:
|
||||
Mod_LoadSpriteModel( mod, buf, &loaded, mod->numtexinfo );
|
||||
break;
|
||||
case mod_alias:
|
||||
Mod_LoadAliasModel( mod, buf, &loaded );
|
||||
break;
|
||||
case mod_brush:
|
||||
// Mod_LoadBrushModel( mod, buf, loaded );
|
||||
break;
|
||||
|
||||
default: gEngfuncs.Host_Error( "Mod_LoadModel: unsupported type %d\n", mod->type );
|
||||
}
|
||||
}
|
||||
|
||||
if( loaded && gEngfuncs.drawFuncs->Mod_ProcessUserData )
|
||||
gEngfuncs.drawFuncs->Mod_ProcessUserData( mod, create, buf );
|
||||
|
||||
if( !create )
|
||||
Mod_UnloadTextures( mod );
|
||||
|
||||
return loaded;
|
||||
}
|
||||
|
||||
static int GL_RenderGetParm( int parm, int arg )
|
||||
{
|
||||
gl_texture_t *glt;
|
||||
@ -339,6 +375,12 @@ void Mod_UnloadTextures( model_t *mod )
|
||||
}
|
||||
}
|
||||
|
||||
void R_ProcessEntData( qboolean allocate )
|
||||
{
|
||||
if( gEngfuncs.drawFuncs->R_ProcessEntData )
|
||||
gEngfuncs.drawFuncs->R_ProcessEntData( allocate );
|
||||
}
|
||||
|
||||
ref_interface_t gReffuncs =
|
||||
{
|
||||
R_Init,
|
||||
@ -363,6 +405,7 @@ ref_interface_t gReffuncs =
|
||||
|
||||
R_AddEntity,
|
||||
CL_AddCustomBeam,
|
||||
R_ProcessEntData,
|
||||
|
||||
IsNormalPass,
|
||||
|
||||
@ -407,9 +450,8 @@ ref_interface_t gReffuncs =
|
||||
|
||||
R_GetSpriteParms,
|
||||
|
||||
Mod_LoadModel,
|
||||
Mod_LoadMapSprite,
|
||||
Mod_UnloadTextures,
|
||||
Mod_ProcessRenderData,
|
||||
Mod_StudioLoadTextures,
|
||||
|
||||
CL_DrawParticles,
|
||||
|
@ -223,6 +223,11 @@ void R_ClearScene( void )
|
||||
tr.draw_list->num_solid_entities = 0;
|
||||
tr.draw_list->num_trans_entities = 0;
|
||||
tr.draw_list->num_beam_entities = 0;
|
||||
|
||||
// clear the scene befor start new frame
|
||||
if( gEngfuncs.drawFuncs->R_ClearScene != NULL )
|
||||
gEngfuncs.drawFuncs->R_ClearScene();
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -178,4 +178,8 @@ void R_NewMap( void )
|
||||
|
||||
GL_BuildLightmaps ();
|
||||
R_GenerateVBO();
|
||||
|
||||
if( gEngfuncs.drawFuncs->R_NewMap != NULL )
|
||||
gEngfuncs.drawFuncs->R_NewMap();
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user