ref: implement engine ref API

This commit is contained in:
Alibek Omarov 2019-03-16 04:17:56 +03:00
parent 97aba69ed0
commit 199ebfed48
14 changed files with 420 additions and 83 deletions

View File

@ -87,6 +87,14 @@ short R_LookupColor( byte r, byte g, byte b )
return best; return best;
} }
color24 *R_GetTracerColor( uint idx )
{
if( idx > ARRAYSIZE( gTracerColors ))
return NULL;
return &gTracerColors[idx];
}
/* /*
================ ================
R_GetPackedColor R_GetPackedColor
@ -432,7 +440,7 @@ extract entity number from index
handle user entities handle user entities
============== ==============
*/ */
static cl_entity_t *R_BeamGetEntity( int index ) cl_entity_t *R_BeamGetEntity( int index )
{ {
if( index < 0 ) if( index < 0 )
return clgame.dllFuncs.pfnGetUserEntity( BEAMENT_ENTITY( -index )); return clgame.dllFuncs.pfnGetUserEntity( BEAMENT_ENTITY( -index ));

View File

@ -2083,7 +2083,7 @@ pfnIsNoClipping
============= =============
*/ */
int pfnIsNoClipping( void ) static int pfnIsNoClipping( void )
{ {
return ( cl.frames[cl.parsecountmod].playerstate[cl.playernum].movetype == MOVETYPE_NOCLIP ); return ( cl.frames[cl.parsecountmod].playerstate[cl.playernum].movetype == MOVETYPE_NOCLIP );
} }
@ -2094,7 +2094,7 @@ pfnGetViewModel
============= =============
*/ */
static cl_entity_t* pfnGetViewModel( void ) cl_entity_t* CL_GetViewModel( void )
{ {
return &clgame.viewent; return &clgame.viewent;
} }
@ -2533,7 +2533,7 @@ pfnTraceSurface
============= =============
*/ */
static struct msurface_s *pfnTraceSurface( int ground, float *vstart, float *vend ) struct msurface_s *pfnTraceSurface( int ground, float *vstart, float *vend )
{ {
physent_t *pe; physent_t *pe;
@ -2550,7 +2550,7 @@ pfnGetMovevars
============= =============
*/ */
static movevars_t *pfnGetMoveVars( void ) movevars_t *pfnGetMoveVars( void )
{ {
return &clgame.movevars; return &clgame.movevars;
} }
@ -2645,7 +2645,7 @@ pfnGetScreenFade
============= =============
*/ */
static void pfnGetScreenFade( struct screenfade_s *fade ) void pfnGetScreenFade( struct screenfade_s *fade )
{ {
if( fade ) *fade = clgame.fade; if( fade ) *fade = clgame.fade;
} }
@ -3265,7 +3265,7 @@ Demo_IsPlayingback
================= =================
*/ */
static int Demo_IsPlayingback( void ) int Demo_IsPlayingback( void )
{ {
return cls.demoplayback; return cls.demoplayback;
} }
@ -4020,10 +4020,9 @@ qboolean CL_LoadProgs( const char *name )
CL_InitViewBeams (); CL_InitViewBeams ();
CL_InitTempEnts (); CL_InitTempEnts ();
#if 0 // REFTODO:
if( !R_InitRenderAPI()) // Xash3D extension if( !R_InitRenderAPI()) // Xash3D extension
Con_Reportf( S_WARN "CL_LoadProgs: couldn't get render API\n" ); Con_Reportf( S_WARN "CL_LoadProgs: couldn't get render API\n" );
#endif
if( !Mobile_Init() ) // Xash3D FWGS extension: mobile interface if( !Mobile_Init() ) // Xash3D FWGS extension: mobile interface
Con_Reportf( S_WARN "CL_LoadProgs: couldn't get mobility API\n" ); Con_Reportf( S_WARN "CL_LoadProgs: couldn't get mobility API\n" );

View File

@ -19,18 +19,18 @@ GNU General Public License for more details.
#include "client.h" #include "client.h"
#include "library.h" #include "library.h"
static int R_FatPVS( const vec3_t org, float radius, byte *visbuffer, qboolean merge, qboolean fullvis ) int R_FatPVS( const vec3_t org, float radius, byte *visbuffer, qboolean merge, qboolean fullvis )
{ {
return Mod_FatPVS( org, radius, visbuffer, world.visbytes, merge, fullvis ); return Mod_FatPVS( org, radius, visbuffer, world.visbytes, merge, fullvis );
} }
static lightstyle_t *CL_GetLightStyle( int number ) lightstyle_t *CL_GetLightStyle( int number )
{ {
Assert( number >= 0 && number < MAX_LIGHTSTYLES ); Assert( number >= 0 && number < MAX_LIGHTSTYLES );
return &cl.lightstyles[number]; return &cl.lightstyles[number];
} }
static const ref_overview_t *GL_GetOverviewParms( void ) const ref_overview_t *GL_GetOverviewParms( void )
{ {
return &clgame.overView; return &clgame.overView;
} }

View File

@ -89,6 +89,10 @@ void CL_DecalRemoveAll( int textureIndex );
int CL_DecalIndexFromName( const char *name ); int CL_DecalIndexFromName( const char *name );
int CL_DecalIndex( int id ); int CL_DecalIndex( int id );
// RefAPI
struct particle_s *CL_AllocParticleFast( void );
color24 *R_GetTracerColor( uint idx );
// Beams // Beams
struct beam_s *R_BeamLightning( vec3_t start, vec3_t end, int modelIndex, float life, float width, float amplitude, float brightness, float speed ); struct beam_s *R_BeamLightning( vec3_t start, vec3_t end, int modelIndex, float life, float width, float amplitude, float brightness, float speed );
struct beam_s *R_BeamEnts( int startEnt, int endEnt, int modelIndex, float life, float width, float amplitude, float brightness, float speed, int startFrame, float framerate, float r, float g, float b ); struct beam_s *R_BeamEnts( int startEnt, int endEnt, int modelIndex, float life, float width, float amplitude, float brightness, float speed, int startFrame, float framerate, float r, float g, float b );

View File

@ -848,6 +848,12 @@ void CL_PlayerTrace( float *start, float *end, int traceFlags, int ignore_pe, pm
void CL_PlayerTraceExt( float *start, float *end, int traceFlags, int (*pfnIgnore)( physent_t *pe ), pmtrace_t *tr ); void CL_PlayerTraceExt( float *start, float *end, int traceFlags, int (*pfnIgnore)( physent_t *pe ), pmtrace_t *tr );
void CL_SetTraceHull( int hull ); void CL_SetTraceHull( int hull );
void CL_GetMousePosition( int *mx, int *my ); // TODO: move to input void CL_GetMousePosition( int *mx, int *my ); // TODO: move to input
int Demo_IsPlayingback( void );
cl_entity_t* CL_GetViewModel( void );
void pfnGetScreenFade( struct screenfade_s *fade );
physent_t *pfnGetPhysent( int idx );
struct msurface_s *pfnTraceSurface( int ground, float *vstart, float *vend );
movevars_t *pfnGetMoveVars( void );
_inline cl_entity_t *CL_EDICT_NUM( int n ) _inline cl_entity_t *CL_EDICT_NUM( int n )
{ {
@ -968,7 +974,11 @@ void CL_ClearAllRemaps( void );
// //
// cl_render.c // cl_render.c
// //
qboolean R_InitRenderAPI( void );
int CL_RenderGetParm( int parm, int arg, const qboolean checkRef ); int CL_RenderGetParm( int parm, int arg, const qboolean checkRef );
lightstyle_t *CL_GetLightStyle( int number );
int R_FatPVS( const vec3_t org, float radius, byte *visbuffer, qboolean merge, qboolean fullvis );
const ref_overview_t *GL_GetOverviewParms( void );
// //
// cl_tent.c // cl_tent.c
@ -996,10 +1006,13 @@ void CL_TempEntUpdate( void );
void CL_InitViewBeams( void ); void CL_InitViewBeams( void );
void CL_ClearViewBeams( void ); void CL_ClearViewBeams( void );
void CL_FreeViewBeams( void ); void CL_FreeViewBeams( void );
cl_entity_t *R_BeamGetEntity( int index );
void CL_KillDeadBeams( cl_entity_t *pDeadEntity ); void CL_KillDeadBeams( cl_entity_t *pDeadEntity );
void CL_ParseViewBeam( sizebuf_t *msg, int beamType ); void CL_ParseViewBeam( sizebuf_t *msg, int beamType );
void CL_LoadClientSprites( void ); void CL_LoadClientSprites( void );
void CL_ReadPointFile_f( void ); void CL_ReadPointFile_f( void );
void CL_DrawEFX( float time, qboolean fTrans );
void CL_ThinkParticle( double frametime, particle_t *p );
void CL_ReadLineFile_f( void ); void CL_ReadLineFile_f( void );
void CL_RunLightStyles( void ); void CL_RunLightStyles( void );

View File

@ -43,8 +43,346 @@ static int pfnRefRenderGetParm( int parm, int arg )
return CL_RenderGetParm( parm, arg, false ); // prevent recursion return CL_RenderGetParm( parm, arg, false ); // prevent recursion
} }
static int pfnGetPlayerIndex( void )
{
return cl.playernum + 1;
}
static int pfnGetViewEntIndex( void )
{
return cl.viewentity;
}
static ref_connstate_t pfnCL_GetConnState( void )
{
switch( cls.state )
{
case ca_disconnected: return ref_ca_disconnected;
case ca_connecting: return ref_ca_connecting;
case ca_connected: return ref_ca_connected;
case ca_validate: return ref_ca_validate;
case ca_active: return ref_ca_active;
case ca_cinematic: return ref_ca_cinematic;
default:
ASSERT( 0 );
}
return ref_ca_disconnected;
}
static int pfnGetWaterLevel( void )
{
return cl.local.waterlevel;
}
static int pfnGetLocalHealth( void )
{
return cl.local.health;
}
static void pfnCbuf_SetOpenGLConfigHack( qboolean set )
{
host.apply_opengl_config = set;
}
static world_static_t *pfnGetWorld( void )
{
return &world;
}
static void pfnStudioEvent( const mstudioevent_t *event, const cl_entity_t *e )
{
clgame.dllFuncs.pfnStudioEvent( event, e );
}
static efrag_t* pfnGetEfragsFreeList( void )
{
return clgame.free_efrags;
}
static void pfnSetEfragsFreeList( efrag_t *list )
{
clgame.free_efrags = list;
}
static model_t *pfnGetDefaultSprite( ref_defaultsprite_e spr )
{
switch( spr )
{
case REF_DOT_SPRITE: return cl_sprite_dot;
case REF_CHROME_SPRITE: return cl_sprite_shell;
default: Host_Error( "GetDefaultSprite: unknown sprite %d\n", spr );
}
return NULL;
}
static void *pfnMod_Extradata( int type, model_t *m )
{
switch( type )
{
case mod_alias: return Mod_AliasExtradata( m );
case mod_studio: return Mod_StudioExtradata( m );
case mod_sprite: // fallthrough
case mod_brush: return NULL;
default: Host_Error( "Mod_Extradata: unknown type %d\n", type );
}
return NULL;
}
static model_t *pfnMod_GetCurrentLoadingModel( void )
{
return loadmodel;
}
static void pfnMod_SetCurrentLoadingModel( model_t *m )
{
loadmodel = m;
}
static int pfnCL_NumModels( void )
{
return cl.nummodels;
}
static void pfnGetPredictedOrigin( vec3_t v )
{
VectorCopy( cl.simorg, v );
}
static byte *pfnCL_GetPaletteColor(int color) // clgame.palette[color]
{
return clgame.palette[color];
}
static void pfnCL_GetScreenInfo( int *width, int *height ) // clgame.scrInfo, ptrs may be NULL
{
if( width ) *width = clgame.scrInfo.iWidth;
if( height ) *height = clgame.scrInfo.iHeight;
}
static void pfnSetLocalLightLevel( int level )
{
cl.local.light_level = level;
}
/*
===============
pfnPlayerInfo
===============
*/
static player_info_t *pfnPlayerInfo( int index )
{
if( index == -1 ) // special index for menu
return &gameui.playerinfo;
if( index < 0 || index > cl.maxclients )
return NULL;
return &cl.players[index];
}
/*
===============
pfnGetPlayerState
===============
*/
static entity_state_t *R_StudioGetPlayerState( int index )
{
if( index < 0 || index >= cl.maxclients )
return NULL;
return &cl.frames[cl.parsecountmod].playerstate[index];
}
static int pfnGetStudioModelInterface( int version, struct r_studio_interface_s **ppinterface, struct engine_studio_api_s *pstudio )
{
return clgame.dllFuncs.pfnGetStudioModelInterface( version, ppinterface, pstudio );
}
static byte *pfnImage_GetPool( void )
{
return host.imagepool;
}
static struct bpc_desc_s *pfnImage_GetPFDesc( int idx )
{
return &PFDesc[idx];
}
static void pfnDrawNormalTriangles( void )
{
clgame.dllFuncs.pfnDrawNormalTriangles();
}
static void pfnDrawTransparentTriangles( void )
{
clgame.dllFuncs.pfnDrawTransparentTriangles();
}
static ref_api_t gEngfuncs = static ref_api_t gEngfuncs =
{ {
CL_IsDevOverviewMode,
CL_IsThirdPerson,
Host_IsQuakeCompatible,
pfnGetPlayerIndex,
pfnGetViewEntIndex,
pfnCL_GetConnState,
Demo_IsPlayingback,
pfnGetWaterLevel,
pfnRefRenderGetParm,
CL_GetMaxClients,
pfnGetLocalHealth,
Host_IsLocalGame,
Cvar_Get,
Cvar_FindVarExt,
Cvar_VariableValue,
Cvar_VariableString,
Cvar_SetValue,
Cvar_Set,
Cvar_RegisterVariable,
Cvar_FullSet,
Cmd_AddRefCommand,
Cmd_RemoveCommand,
Cmd_Argc,
Cmd_Argv,
Cmd_Args,
Cbuf_AddText,
Cbuf_InsertText,
Cbuf_Execute,
pfnCbuf_SetOpenGLConfigHack,
Con_Printf,
Con_DPrintf,
Con_Reportf,
Con_NPrintf,
Con_NXPrintf,
CL_CenterPrint,
Con_DrawStringLen,
Con_DrawString,
CL_DrawCenterPrint,
CL_GetLocalPlayer,
CL_GetViewModel,
CL_GetEntityByIndex,
pfnNumberOfEntities,
R_BeamGetEntity,
CL_GetWaterEntity,
CL_AddVisibleEntity,
Mod_SampleSizeForFace,
Mod_BoxVisible,
pfnGetWorld,
Mod_PointInLeaf,
Mod_CreatePolygonsForHull,
R_StudioSlerpBones,
R_StudioCalcBoneQuaternion,
R_StudioCalcBonePosition,
R_StudioGetAnim,
pfnStudioEvent,
CL_DrawEFX,
CL_ThinkParticle,
R_FreeDeadParticles,
CL_AllocParticleFast,
pfnGetEfragsFreeList,
pfnSetEfragsFreeList,
R_GetTracerColor,
CL_AllocElight,
pfnGetDefaultSprite,
Mod_ForName,
pfnMod_Extradata,
CL_ModelHandle,
pfnMod_GetCurrentLoadingModel,
pfnMod_SetCurrentLoadingModel,
pfnCL_NumModels,
CL_GetRemapInfoForEntity,
CL_AllocRemapInfo,
CL_FreeRemapInfo,
CL_UpdateRemapInfo,
CL_ExtraUpdate,
COM_HashKey,
Host_Error,
CL_FxBlend,
COM_SetRandomSeed,
COM_RandomFloat,
COM_RandomLong,
pfnGetScreenFade,
CL_TextMessageGet,
pfnGetPredictedOrigin,
pfnCL_GetPaletteColor,
pfnCL_GetScreenInfo,
pfnSetLocalLightLevel,
pfnPlayerInfo,
R_StudioGetPlayerState,
Mod_CacheCheck,
Mod_LoadCacheFile,
Mod_Calloc,
pfnGetStudioModelInterface,
_Mem_AllocPool,
_Mem_FreePool,
_Mem_Alloc,
_Mem_Realloc,
_Mem_Free,
COM_LoadLibrary,
COM_FreeLibrary,
COM_GetProcAddress,
FS_LoadFile,
COM_ParseFile,
FS_FileExists,
FS_AllowDirectPaths,
NULL,
NULL,
NULL,
NULL,
NULL,
BuildGammaTable,
LightToTexGamma,
CL_GetLightStyle,
CL_GetDynamicLight,
CL_GetEntityLight,
R_FatPVS,
GL_GetOverviewParms,
Sys_DoubleTime,
pfnGetPhysent,
pfnTraceSurface,
PM_TraceLine,
CL_VisTraceLine,
CL_TraceLine,
pfnGetMoveVars,
Image_AddCmdFlags,
Image_SetForceFlags,
Image_ClearForceFlags,
Image_CustomPalette,
Image_Process,
FS_LoadImage,
FS_SaveImage,
FS_CopyImage,
FS_FreeImage,
Image_SetMDLPointer,
pfnImage_GetPool,
pfnImage_GetPFDesc,
pfnDrawNormalTriangles,
pfnDrawTransparentTriangles,
&clgame.drawFuncs
}; };
static void R_UnloadProgs( void ) static void R_UnloadProgs( void )

View File

@ -711,6 +711,16 @@ int Cmd_AddGameUICommand( const char *cmd_name, xcommand_t function )
return Cmd_AddCommandEx( __FUNCTION__, cmd_name, function, "gameui command", CMD_GAMEUIDLL ); return Cmd_AddCommandEx( __FUNCTION__, cmd_name, function, "gameui command", CMD_GAMEUIDLL );
} }
/*
============
Cmd_AddRefCommand
============
*/
int Cmd_AddRefCommand( const char *cmd_name, xcommand_t function, const char *description )
{
return Cmd_AddCommandEx( __FUNCTION__, cmd_name, function, description, CMD_REFDLL );
}
/* /*
============ ============
Cmd_RemoveCommand Cmd_RemoveCommand

View File

@ -505,6 +505,7 @@ void Cmd_AddRestrictedCommand( const char *cmd_name, xcommand_t function, const
void Cmd_AddServerCommand( const char *cmd_name, xcommand_t function ); void Cmd_AddServerCommand( const char *cmd_name, xcommand_t function );
int Cmd_AddClientCommand( 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 ); int Cmd_AddGameUICommand( const char *cmd_name, xcommand_t function );
int Cmd_AddRefCommand( const char *cmd_name, xcommand_t function, const char *description );
void Cmd_RemoveCommand( const char *cmd_name ); void Cmd_RemoveCommand( const char *cmd_name );
qboolean Cmd_Exists( const char *cmd_name ); qboolean Cmd_Exists( const char *cmd_name );
void Cmd_LookupCmds( char *buffer, void *ptr, setpair_t callback ); void Cmd_LookupCmds( char *buffer, void *ptr, setpair_t callback );

View File

@ -164,10 +164,11 @@ typedef struct ref_api_s
// cvar handlers // cvar handlers
convar_t *(*Cvar_Get)( 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 ); convar_t *(*pfnGetCvarPointer)( const char *name, int ignore_flags );
float (*pfnGetCvarFloat)( const char *szName ); float (*pfnGetCvarFloat)( const char *szName );
const char *(*pfnGetCvarString)( const char *szName ); const char *(*pfnGetCvarString)( const char *szName );
void (*Cvar_SetValue)( const char *name, float value ); void (*Cvar_SetValue)( const char *name, float value );
void (*Cvar_Set)( const char *name, const char *value );
void (*Cvar_RegisterVariable)( convar_t *var ); void (*Cvar_RegisterVariable)( convar_t *var );
void (*Cvar_FullSet)( const char *var_name, const char *value, int flags ); void (*Cvar_FullSet)( const char *var_name, const char *value, int flags );
@ -176,6 +177,7 @@ typedef struct ref_api_s
int (*Cmd_RemoveCommand)( const char *cmd_name ); int (*Cmd_RemoveCommand)( const char *cmd_name );
int (*Cmd_Argc)( void ); int (*Cmd_Argc)( void );
const char *(*Cmd_Argv)( int arg ); const char *(*Cmd_Argv)( int arg );
const char *(*Cmd_Args)( void );
// cbuf // cbuf
void (*Cbuf_AddText)( const char *commands ); void (*Cbuf_AddText)( const char *commands );
@ -184,7 +186,6 @@ typedef struct ref_api_s
void (*Cbuf_SetOpenGLConfigHack)( qboolean set ); // host.apply_opengl_config void (*Cbuf_SetOpenGLConfigHack)( qboolean set ); // host.apply_opengl_config
// logging // logging
void (*Con_VPrintf)( const char *fmt, va_list args );
void (*Con_Printf)( const char *fmt, ... ); // typical console allowed messages void (*Con_Printf)( const char *fmt, ... ); // typical console allowed messages
void (*Con_DPrintf)( const char *fmt, ... ); // -dev 1 void (*Con_DPrintf)( const char *fmt, ... ); // -dev 1
void (*Con_Reportf)( const char *fmt, ... ); // -dev 2 void (*Con_Reportf)( const char *fmt, ... ); // -dev 2
@ -227,7 +228,7 @@ typedef struct ref_api_s
particle_t *(*CL_AllocParticleFast)( void ); // unconditionally give new particle pointer from cl_free_particles particle_t *(*CL_AllocParticleFast)( void ); // unconditionally give new particle pointer from cl_free_particles
efrag_t* (*GetEfragsFreeList)( void ); // clgame.free_efrags efrag_t* (*GetEfragsFreeList)( void ); // clgame.free_efrags
void (*SetEfragsFreeList)( efrag_t* ); // clgame.free_efrags void (*SetEfragsFreeList)( efrag_t* ); // clgame.free_efrags
color24 *(*GetTracerColors)( int num ); color24 *(*GetTracerColors)( uint num );
struct dlight_s *(*CL_AllocElight)( int key ); struct dlight_s *(*CL_AllocElight)( int key );
struct model_s *(*GetDefaultSprite)( enum ref_defaultsprite_e spr ); struct model_s *(*GetDefaultSprite)( enum ref_defaultsprite_e spr );
@ -237,7 +238,7 @@ typedef struct ref_api_s
struct model_s *(*pfnGetModelByIndex)( int index ); // CL_ModelHandle struct model_s *(*pfnGetModelByIndex)( int index ); // CL_ModelHandle
struct model_s *(*Mod_GetCurrentLoadingModel)( void ); // loadmodel struct model_s *(*Mod_GetCurrentLoadingModel)( void ); // loadmodel
void (*Mod_SetCurrentLoadingModel)( struct model_s* ); // loadmodel void (*Mod_SetCurrentLoadingModel)( struct model_s* ); // loadmodel
int (*CL_NumModels)( void ); int (*CL_NumModels)( void ); // cl.nummodels
// remap // remap
struct remap_info_s *(*CL_GetRemapInfoForEntity)( cl_entity_t *e ); struct remap_info_s *(*CL_GetRemapInfoForEntity)( cl_entity_t *e );
@ -276,7 +277,7 @@ typedef struct ref_api_s
void (*_Mem_Free)( void *data, const char *filename, int fileline ); void (*_Mem_Free)( void *data, const char *filename, int fileline );
// library management // library management
void *(*COM_LoadLibrary)( const char *name ); void *(*COM_LoadLibrary)( const char *name, int build_ordinals_table, qboolean directpath );
void (*COM_FreeLibrary)( void *handle ); void (*COM_FreeLibrary)( void *handle );
void *(*COM_GetProcAddress)( void *handle, const char *name ); void *(*COM_GetProcAddress)( void *handle, const char *name );
@ -304,26 +305,8 @@ typedef struct ref_api_s
dlight_t* (*GetDynamicLight)( int number ); dlight_t* (*GetDynamicLight)( int number );
dlight_t* (*GetEntityLight)( int number ); dlight_t* (*GetEntityLight)( int number );
int (*R_FatPVS)( const float *org, float radius, byte *visbuffer, qboolean merge, qboolean fullvis ); int (*R_FatPVS)( const float *org, float radius, byte *visbuffer, qboolean merge, qboolean fullvis );
void *(*AVI_LoadVideo)( const char *filename, qboolean load_audio );
int (*AVI_GetVideoInfo)( void *Avi, long *xres, long *yres, float *duration );
long (*AVI_GetVideoFrameNumber)( void *Avi, float time );
byte *(*AVI_GetVideoFrame)( void *Avi, long frame );
void (*AVI_FreeVideo)( void *Avi );
int (*AVI_IsActive)( void *Avi );
void (*AVI_StreamSound)( void *Avi, int entnum, float fvol, float attn, float synctime );
int (*SPR_LoadExt)( const char *szPicName, unsigned int texFlags ); // extended version of SPR_Load
const struct ref_overview_s *( *GetOverviewParms )( void ); const struct ref_overview_s *( *GetOverviewParms )( void );
const char *( *GetFileByIndex )( int fileindex ); double (*pfnTime)( void ); // Sys_DoubleTime
void *(*pfnMemAlloc)( size_t cb, const char *filename, const int fileline );
void (*pfnMemFree)( void *mem, const char *filename, const int fileline );
char **(*pfnGetFilesList)( const char *pattern, int *numFiles, int gamedironly );
unsigned int (*pfnFileBufferCRC32)( const void *buffer, const int length );
int (*COM_CompareFileTime)( const char *filename1, const char *filename2, int *iCompare );
void* ( *pfnGetModel )( int modelindex );
float (*pfnTime)( void ); // Sys_DoubleTime
void (*Cvar_Set)( const char *name, const char *value );
void (*S_FadeMusicVolume)( float fadePercent ); // fade background track (0-100 percents)
void (*SetRandomSeed)( long lSeed ); // set custom seed for RANDOM_FLOAT\RANDOM_LONG for predictable random
// event api // event api
struct physent_s *(*EV_GetPhysent)( int idx ); struct physent_s *(*EV_GetPhysent)( int idx );
@ -350,7 +333,7 @@ typedef struct ref_api_s
// client exports // client exports
void (*pfnDrawNormalTriangles)( void ); void (*pfnDrawNormalTriangles)( void );
void (*pfnDrawTransparentTriangles)( void ); void (*pfnDrawTransparentTriangles)( void );
render_interface_t drawFuncs; render_interface_t *drawFuncs;
} ref_api_t; } ref_api_t;
struct mip_s; struct mip_s;

View File

@ -19,21 +19,6 @@ GNU General Public License for more details.
ref_api_t gEngfuncs; ref_api_t gEngfuncs;
ref_globals_t *gpGlobals; ref_globals_t *gpGlobals;
/*
============
Con_Printf
engine callback wrapper
============
*/
void Con_Printf( const char *fmt, ... )
{
va_list args;
va_start( args, fmt );
gEngfuncs.Con_VPrintf( fmt, args );
va_end( args );
}
static void R_ClearScreen( void ) static void R_ClearScreen( void )
{ {
pglClearColor( 0.0f, 0.0f, 0.0f, 0.0f ); pglClearColor( 0.0f, 0.0f, 0.0f, 0.0f );

View File

@ -387,7 +387,6 @@ void R_SetupRefParams( const struct ref_viewpass_s *rvp );
void R_TranslateForEntity( cl_entity_t *e ); void R_TranslateForEntity( cl_entity_t *e );
void R_RotateForEntity( cl_entity_t *e ); void R_RotateForEntity( cl_entity_t *e );
void R_SetupGL( qboolean set_gl_state ); void R_SetupGL( qboolean set_gl_state );
qboolean R_InitRenderAPI( void );
void R_AllowFog( qboolean allowed ); void R_AllowFog( qboolean allowed );
void R_SetupFrustum( void ); void R_SetupFrustum( void );
void R_FindViewLeaf( void ); void R_FindViewLeaf( void );
@ -470,6 +469,7 @@ player_info_t *pfnPlayerInfo( int index );
void R_GatherPlayerLight( void ); void R_GatherPlayerLight( void );
float R_StudioEstimateFrame( cl_entity_t *e, mstudioseqdesc_t *pseqdesc ); float R_StudioEstimateFrame( cl_entity_t *e, mstudioseqdesc_t *pseqdesc );
void R_StudioLerpMovement( cl_entity_t *e, double time, vec3_t origin, vec3_t angles ); void R_StudioLerpMovement( cl_entity_t *e, double time, vec3_t origin, vec3_t angles );
void R_StudioResetPlayerModels( void );
void CL_InitStudioAPI( void ); void CL_InitStudioAPI( void );
void Mod_StudioLoadTextures( model_t *mod, void *data ); void Mod_StudioLoadTextures( model_t *mod, void *data );
void Mod_StudioUnloadTextures( void *data ); void Mod_StudioUnloadTextures( void *data );

View File

@ -769,20 +769,20 @@ void GL_InitCommands( void )
r_traceglow = gEngfuncs.Cvar_Get( "r_traceglow", "1", FCVAR_ARCHIVE, "cull flares behind models" ); 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_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_drawentities = gEngfuncs.Cvar_Get( "r_drawentities", "1", FCVAR_CHEAT, "render entities" );
r_decals = gEngfuncs.pfnGetCvarPointer( "r_decals" ); r_decals = gEngfuncs.pfnGetCvarPointer( "r_decals", 0 );
r_showhull = gEngfuncs.pfnGetCvarPointer( "r_showhull" ); r_showhull = gEngfuncs.pfnGetCvarPointer( "r_showhull", 0 );
gl_extensions = gEngfuncs.Cvar_Get( "gl_allow_extensions", "1", FCVAR_GLCONFIG, "allow gl_extensions" ); 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_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_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_check_errors = gEngfuncs.Cvar_Get( "gl_check_errors", "1", FCVAR_ARCHIVE, "ignore video engine errors" );
gl_vsync = gEngfuncs.pfnGetCvarPointer( "gl_vsync" ); gl_vsync = gEngfuncs.pfnGetCvarPointer( "gl_vsync", 0 );
gl_detailscale = gEngfuncs.Cvar_Get( "gl_detailscale", "4.0", FCVAR_ARCHIVE, "default scale applies while auto-generate list of detail textures" ); 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_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_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_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_emboss_scale = gEngfuncs.Cvar_Get( "gl_emboss_scale", "0", FCVAR_ARCHIVE|FCVAR_LATCH, "fake bumpmapping scale" );
gl_showtextures = gEngfuncs.pfnGetCvarPointer( "r_showtextures" ); gl_showtextures = gEngfuncs.pfnGetCvarPointer( "r_showtextures", 0 );
gl_finish = gEngfuncs.Cvar_Get( "gl_finish", "0", FCVAR_ARCHIVE, "use glFinish instead of glFlush" ); 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_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_clear = gEngfuncs.Cvar_Get( "gl_clear", "0", FCVAR_ARCHIVE, "clearing screen after each frame" );
@ -798,15 +798,15 @@ void GL_InitCommands( void )
// make sure gl_vsync is checked after vid_restart // make sure gl_vsync is checked after vid_restart
SetBits( gl_vsync->flags, FCVAR_CHANGED ); SetBits( gl_vsync->flags, FCVAR_CHANGED );
vid_gamma = gEngfuncs.pfnGetCvarPointer( "gamma" ); vid_gamma = gEngfuncs.pfnGetCvarPointer( "gamma", 0 );
vid_brightness = gEngfuncs.pfnGetCvarPointer( "brightness" ); vid_brightness = gEngfuncs.pfnGetCvarPointer( "brightness", 0 );
tracerred = gEngfuncs.pfnGetCvarPointer( "tracerred" ); tracerred = gEngfuncs.pfnGetCvarPointer( "tracerred", 0 );
tracergreen = gEngfuncs.pfnGetCvarPointer( "tracergreen" ); tracergreen = gEngfuncs.pfnGetCvarPointer( "tracergreen", 0 );
tracerblue = gEngfuncs.pfnGetCvarPointer( "tracerblue" ); tracerblue = gEngfuncs.pfnGetCvarPointer( "tracerblue", 0 );
traceralpha = gEngfuncs.pfnGetCvarPointer( "traceralpha" ); traceralpha = gEngfuncs.pfnGetCvarPointer( "traceralpha", 0 );
cl_lightstyle_lerping = gEngfuncs.pfnGetCvarPointer( "cl_lightstyle_lerping" ); cl_lightstyle_lerping = gEngfuncs.pfnGetCvarPointer( "cl_lightstyle_lerping", 0 );
gEngfuncs.Cmd_AddCommand( "r_info", R_RenderInfo_f, "display renderer info" ); gEngfuncs.Cmd_AddCommand( "r_info", R_RenderInfo_f, "display renderer info" );
gEngfuncs.Cmd_AddCommand( "timerefresh", SCR_TimeRefresh_f, "turn quickly and print rendering statistcs" ); gEngfuncs.Cmd_AddCommand( "timerefresh", SCR_TimeRefresh_f, "turn quickly and print rendering statistcs" );

View File

@ -110,6 +110,8 @@ void R_NewMap( void )
R_ClearDecals(); // clear all level decals R_ClearDecals(); // clear all level decals
R_StudioResetPlayerModels();
// upload detailtextures // upload detailtextures
if( CVAR_TO_BOOL( r_detailtextures )) if( CVAR_TO_BOOL( r_detailtextures ))
{ {

View File

@ -109,6 +109,9 @@ typedef struct
vec4_t lightpos[MAXSTUDIOVERTS][MAX_LOCALLIGHTS]; vec4_t lightpos[MAXSTUDIOVERTS][MAX_LOCALLIGHTS];
vec3_t lightbonepos[MAXSTUDIOBONES][MAX_LOCALLIGHTS]; vec3_t lightbonepos[MAXSTUDIOBONES][MAX_LOCALLIGHTS];
float locallightR2[MAX_LOCALLIGHTS]; float locallightR2[MAX_LOCALLIGHTS];
// playermodels
player_model_t player_models[MAX_CLIENTS];
} studio_draw_state_t; } studio_draw_state_t;
// studio-related cvars // studio-related cvars
@ -365,16 +368,10 @@ pfnPlayerInfo
*/ */
player_info_t *pfnPlayerInfo( int index ) player_info_t *pfnPlayerInfo( int index )
{ {
#if 0
if( !RI.drawWorld ) if( !RI.drawWorld )
return &gameui.playerinfo; index = -1;
if( index < 0 || index > cl.maxclients )
return NULL;
return &cl.players[index];
#else
return gEngfuncs.pfnPlayerInfo( index ); return gEngfuncs.pfnPlayerInfo( index );
#endif
} }
/* /*
@ -398,14 +395,8 @@ entity_state_t *R_StudioGetPlayerState( int index )
{ {
if( !RI.drawWorld ) if( !RI.drawWorld )
return &RI.currententity->curstate; return &RI.currententity->curstate;
#if 0
if( index < 0 || index >= cl.maxclients )
return NULL;
return &cl.frames[cl.parsecountmod].playerstate[index];
#else
return gEngfuncs.pfnGetPlayerState( index ); return gEngfuncs.pfnGetPlayerState( index );
#endif
} }
/* /*
@ -2398,7 +2389,7 @@ R_StudioSetRemapColors
=============== ===============
*/ */
void R_StudioSetRemapColors( int newTop, int newBottom ) static void R_StudioSetRemapColors( int newTop, int newBottom )
{ {
gEngfuncs.CL_AllocRemapInfo( newTop, newBottom ); gEngfuncs.CL_AllocRemapInfo( newTop, newBottom );
@ -2409,6 +2400,11 @@ void R_StudioSetRemapColors( int newTop, int newBottom )
} }
} }
void R_StudioResetPlayerModels( void )
{
memset( g_studio.player_models, 0, sizeof( g_studio.player_models ));
}
/* /*
=============== ===============
R_StudioSetupPlayerModel R_StudioSetupPlayerModel
@ -2420,9 +2416,7 @@ static model_t *R_StudioSetupPlayerModel( int index )
player_info_t *info = gEngfuncs.pfnPlayerInfo( index ); player_info_t *info = gEngfuncs.pfnPlayerInfo( index );
player_model_t *state; player_model_t *state;
#if 0 state = &g_studio.player_models[index];
state = &cl.player_models[index];
#endif
// g-cont: force for "dev-mode", non-local games and menu preview // g-cont: force for "dev-mode", non-local games and menu preview
if(( gpGlobals->developer || !gEngfuncs.Host_IsLocalGame( ) || !RI.drawWorld ) && info->model[0] ) if(( gpGlobals->developer || !gEngfuncs.Host_IsLocalGame( ) || !RI.drawWorld ) && info->model[0] )
@ -3634,7 +3628,7 @@ static void pfnMod_LoadCacheFile( const char *path, struct cache_user_s *cu )
static cvar_t *pfnGetCvarPointer( const char *name ) static cvar_t *pfnGetCvarPointer( const char *name )
{ {
return (cvar_t*)gEngfuncs.pfnGetCvarPointer( name ); return (cvar_t*)gEngfuncs.pfnGetCvarPointer( name, 0 );
} }
static void *pfnMod_Calloc( int number, size_t size ) static void *pfnMod_Calloc( int number, size_t size )
@ -3711,7 +3705,7 @@ void CL_InitStudioAPI( void )
pStudioDraw = &gStudioDraw; pStudioDraw = &gStudioDraw;
// trying to grab them from client.dll // trying to grab them from client.dll
cl_righthand = gEngfuncs.pfnGetCvarPointer( "cl_righthand" ); cl_righthand = gEngfuncs.pfnGetCvarPointer( "cl_righthand", 0 );
if( cl_righthand == NULL ) if( cl_righthand == NULL )
cl_righthand = gEngfuncs.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)" );