04 Jan 2014
This commit is contained in:
parent
a80249ae70
commit
65c9bbd10f
|
@ -23,5 +23,6 @@ GNU General Public License for more details.
|
|||
#define ENGINE_TRANSFORM_TRACE_AABB (1<<3) // transform trace bbox into local space of rotating bmodels
|
||||
#define ENGINE_LARGE_LIGHTMAPS (1<<4) // change lightmap sizes from 128x128 to 256x256
|
||||
#define ENGINE_COMPENSATE_QUAKE_BUG (1<<5) // compensate stupid quake bug (inverse pitch) for mods where this bug is fixed
|
||||
#define ENGINE_DISABLE_HDTEXTURES (1<<6) // disable support of HD-textures in case custom renderer have separate way to load them
|
||||
|
||||
#endif//FEATURES_H
|
|
@ -27,7 +27,7 @@ GNU General Public License for more details.
|
|||
// move misc functions at end of the interface
|
||||
// added new export for clearing studio decals
|
||||
|
||||
#define CL_RENDER_INTERFACE_VERSION 34
|
||||
#define CL_RENDER_INTERFACE_VERSION 35
|
||||
#define MAX_STUDIO_DECALS 4096 // + unused space of BSP decals
|
||||
|
||||
#define SURF_INFO( surf, mod ) ((mextrasurf_t *)mod->cache.data + (surf - mod->surfaces))
|
||||
|
@ -41,25 +41,25 @@ GNU General Public License for more details.
|
|||
#define PARM_TEX_SKYBOX 5 // second arg as skybox ordering num
|
||||
#define PARM_TEX_SKYTEXNUM 6 // skytexturenum for quake sky
|
||||
#define PARM_TEX_LIGHTMAP 7 // second arg as number 0 - 128
|
||||
#define PARM_SKY_SPHERE 8 // sky is quake sphere ?
|
||||
#define PARM_WORLD_VERSION 9 // return the version of bsp
|
||||
#define PARM_WORLD_LOADING 10 // usefully in callback GL_LoadTexture to determine world or external bmodel
|
||||
#define PARM_WIDESCREEN 11
|
||||
#define PARM_FULLSCREEN 12
|
||||
#define PARM_SCREEN_WIDTH 13
|
||||
#define PARM_SCREEN_HEIGHT 14
|
||||
#define PARM_MAP_HAS_MIRRORS 15 // current map has mirorrs
|
||||
#define PARM_CLIENT_INGAME 16
|
||||
#define PARM_MAX_ENTITIES 17
|
||||
#define PARM_TEX_TARGET 18
|
||||
#define PARM_TEX_TEXNUM 19
|
||||
#define PARM_TEX_FLAGS 20
|
||||
#define PARM_FEATURES 21 // same as movevars->features
|
||||
#define PARM_ACTIVE_TMU 22 // for debug
|
||||
#define PARM_TEX_CACHEFRAME 23 // compare with worldmodel->needload
|
||||
#define PARM_MAP_HAS_DELUXE 24 // map has deluxedata
|
||||
#define PARM_TEX_TYPE 25
|
||||
#define PARM_CACHEFRAME 26
|
||||
#define PARM_TEX_TARGET 8
|
||||
#define PARM_TEX_TEXNUM 9
|
||||
#define PARM_TEX_FLAGS 10
|
||||
#define PARM_TEX_TYPE 11
|
||||
#define PARM_TEX_CACHEFRAME 12 // compare with worldmodel->needload
|
||||
// reserved
|
||||
#define PARM_WORLD_VERSION 16 // return the version of bsp
|
||||
#define PARM_SKY_SPHERE 17 // sky is quake sphere ?
|
||||
#define PARM_MAP_HAS_MIRRORS 18 // current map has mirorrs
|
||||
#define PARM_MAP_HAS_DELUXE 19 // map has deluxedata
|
||||
#define PARM_MAX_ENTITIES 20
|
||||
#define PARM_WIDESCREEN 21
|
||||
#define PARM_FULLSCREEN 22
|
||||
#define PARM_SCREEN_WIDTH 23
|
||||
#define PARM_SCREEN_HEIGHT 24
|
||||
#define PARM_CLIENT_INGAME 25
|
||||
#define PARM_FEATURES 26 // same as movevars->features
|
||||
#define PARM_ACTIVE_TMU 27 // for debug
|
||||
#define PARM_CACHEFRAME 28
|
||||
|
||||
enum
|
||||
{
|
||||
|
@ -114,22 +114,15 @@ typedef enum
|
|||
TF_TEXTURE_1D = (1<<18), // this is GL_TEXTURE_1D
|
||||
TF_BORDER = (1<<19), // zero clamp for projected textures
|
||||
TF_TEXTURE_3D = (1<<20), // this is GL_TEXTURE_3D
|
||||
TF_FLOAT = (1<<21), // use GL_FLOAT instead of GL_UNSIGNED_BYTE
|
||||
TF_STATIC = (1<<21), // a marker for purge mechanism
|
||||
TF_TEXTURE_RECTANGLE= (1<<22), // this is GL_TEXTURE_RECTANGLE
|
||||
TF_ALPHA_BORDER = (1<<23), // clamp to (0,0,0,255)
|
||||
TF_ALPHA_BORDER = (1<<23), // clamp to (0,0,0,255) (probably no difference)
|
||||
TF_IMAGE_PROGRAM = (1<<24), // enable image program support like in Doom3
|
||||
TF_STATIC = (1<<25), // a marker for purge mechanism
|
||||
} texFlags_t;
|
||||
|
||||
typedef struct beam_s BEAM;
|
||||
typedef struct particle_s particle_t;
|
||||
|
||||
typedef struct wadlist_s
|
||||
{
|
||||
char wadnames[256][32];
|
||||
int count;
|
||||
} wadlist_t;
|
||||
|
||||
// 12 bytes here
|
||||
typedef struct modelstate_s
|
||||
{
|
||||
|
@ -180,10 +173,10 @@ typedef struct render_api_s
|
|||
int (*GL_FindTexture)( const char *name );
|
||||
const char* (*GL_TextureName)( unsigned int texnum );
|
||||
const byte* (*GL_TextureData)( unsigned int texnum ); // may be NULL
|
||||
int (*GL_LoadTexture)( const char *name, const byte *buf, size_t size, int flags, void *filter );
|
||||
int (*GL_LoadTexture)( const char *name, const byte *buf, size_t size, int flags );
|
||||
int (*GL_CreateTexture)( const char *name, int width, int height, const void *buffer, int flags );
|
||||
void (*GL_SetTextureType)( unsigned int texnum, unsigned int type );
|
||||
void (*GL_TextureUpdateCache)( unsigned int texnum );
|
||||
void (*GL_TextureCacheFrame)( unsigned int texnum );
|
||||
void (*GL_FreeTexture)( unsigned int texnum );
|
||||
|
||||
// Decals manipulating (draw & remove)
|
||||
|
@ -192,10 +185,8 @@ typedef struct render_api_s
|
|||
void (*R_EntityRemoveDecals)( struct model_s *mod ); // remove all the decals from specified entity (BSP only)
|
||||
|
||||
// AVIkit support
|
||||
void *(*AVI_LoadVideo)( const char *filename, int load_audio, int ignore_hwgamma );
|
||||
void *(*AVI_LoadVideo)( const char *filename, int ignore_hwgamma );
|
||||
int (*AVI_GetVideoInfo)( void *Avi, long *xres, long *yres, float *duration );
|
||||
int (*AVI_GetAudioInfo)( void *Avi, void *snd_info );
|
||||
long (*AVI_GetAudioChunk)( void *Avi, char *audiodata, long offset, long length );
|
||||
long (*AVI_GetVideoFrameNumber)( void *Avi, float time );
|
||||
byte *(*AVI_GetVideoFrame)( void *Avi, long frame );
|
||||
void (*AVI_UploadRawFrame)( int texture, int cols, int rows, int width, int height, const byte *data );
|
||||
|
@ -225,17 +216,14 @@ typedef struct render_api_s
|
|||
void (*TessPolygon)( struct msurface_s *surf, struct model_s *mod, float tessSize );
|
||||
struct mstudiotex_s *( *StudioGetTexture )( struct cl_entity_s *e );
|
||||
const struct ref_overview_s *( *GetOverviewParms )( void );
|
||||
void (*R_InitQuakeSky)( struct mip_s *mt, struct texture_s *tx );
|
||||
void *(*R_FindTexFilter)( const char *texname ); // only for internal use by imagelib. No acess to private fields
|
||||
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
|
||||
wadlist_t *(*COM_GetWadsList)( void ); // returns a wadlist for the given map
|
||||
// static allocations
|
||||
void *(*pfnMemAlloc)( size_t cb, const char *filename, const int fileline );
|
||||
void (*pfnMemFree)( void *mem, const char *filename, const int fileline );
|
||||
// find in files
|
||||
char **(*pfnGetFilesList)( const char *pattern, int *numFiles, int gamedironly );
|
||||
// ONLY ADD NEW FUNCTIONS TO THE END OF THIS STRUCT. INTERFACE VERSION IS FROZEN AT 31
|
||||
// ONLY ADD NEW FUNCTIONS TO THE END OF THIS STRUCT. INTERFACE VERSION IS FROZEN AT 35
|
||||
} render_api_t;
|
||||
|
||||
// render callbacks
|
||||
|
@ -258,8 +246,6 @@ typedef struct render_interface_s
|
|||
qboolean (*R_SpeedsMessage)( char *out, size_t size );
|
||||
// replace with built-in R_DrawCubemapView for make skyshots or envshots
|
||||
qboolean (*R_DrawCubemapView)( const float *origin, const float *angles, int size );
|
||||
// custom texture loader for worldmodel and bsp-models (as a part of implementation Quake3 shader system)
|
||||
qboolean (*GL_LoadTextures)( const void *in, model_t *out, int *sky1, int *sky2 );
|
||||
} render_interface_t;
|
||||
|
||||
#endif//RENDER_API_H
|
|
@ -2670,7 +2670,7 @@ int CL_DecalIndex( int id )
|
|||
{
|
||||
qboolean load_external = false;
|
||||
|
||||
if( mod_allow_materials != NULL && mod_allow_materials->integer )
|
||||
if( Mod_AllowMaterials( ))
|
||||
{
|
||||
char decalname[64];
|
||||
int gl_texturenum = 0;
|
||||
|
|
|
@ -901,9 +901,6 @@ void GL_GenerateMipmaps( byte *buffer, rgbdata_t *pic, gltexture_t *tex, GLenum
|
|||
return;
|
||||
}
|
||||
|
||||
if( tex->flags & TF_FLOAT )
|
||||
dataType = GL_FLOAT;
|
||||
|
||||
mipLevel = 0;
|
||||
w = tex->width;
|
||||
h = tex->height;
|
||||
|
@ -1081,9 +1078,6 @@ static void GL_UploadTexture( rgbdata_t *pic, gltexture_t *tex, qboolean subImag
|
|||
tex->target = glTarget = GL_TEXTURE_3D;
|
||||
}
|
||||
|
||||
if( tex->flags & TF_FLOAT )
|
||||
dataType = GL_FLOAT;
|
||||
|
||||
pglBindTexture( tex->target, tex->texnum );
|
||||
|
||||
buf = pic->buffer;
|
||||
|
@ -1393,9 +1387,6 @@ int GL_CreateTexture( const char *name, int width, int height, const void *buffe
|
|||
r_empty.size = r_empty.width * r_empty.height * r_empty.depth * 4;
|
||||
}
|
||||
|
||||
if( flags & TF_FLOAT )
|
||||
r_empty.size *= 4;
|
||||
|
||||
texture = GL_LoadTextureInternal( name, &r_empty, flags, false );
|
||||
|
||||
if( flags & TF_DEPTHMAP )
|
||||
|
|
|
@ -346,7 +346,6 @@ void R_ClearScene( void );
|
|||
void R_LoadIdentity( void );
|
||||
void R_RenderScene( const ref_params_t *fd );
|
||||
void R_DrawCubemapView( const vec3_t origin, const vec3_t angles, int size );
|
||||
qboolean GL_LoadTextures( const void *in, model_t *out );
|
||||
void R_TranslateForEntity( cl_entity_t *e );
|
||||
void R_RotateForEntity( cl_entity_t *e );
|
||||
int R_ComputeFxBlend( cl_entity_t *e );
|
||||
|
|
|
@ -1389,33 +1389,6 @@ void R_DrawCubemapView( const vec3_t origin, const vec3_t angles, int size )
|
|||
r_oldviewleaf = r_viewleaf = NULL; // force markleafs next frame
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
GL_LoadTextures
|
||||
|
||||
override standart function
|
||||
for extended RenderAPI
|
||||
===============
|
||||
*/
|
||||
qboolean GL_LoadTextures( const void *in, model_t *out )
|
||||
{
|
||||
qboolean result = false;
|
||||
|
||||
if( clgame.drawFuncs.GL_LoadTextures != NULL )
|
||||
{
|
||||
world.use_worldpool = true;
|
||||
|
||||
result = clgame.drawFuncs.GL_LoadTextures( in, out, &tr.solidskyTexture, &tr.alphaskyTexture );
|
||||
|
||||
if( result && tr.solidskyTexture && tr.alphaskyTexture )
|
||||
world.sky_sphere = true;
|
||||
|
||||
world.use_worldpool = false;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static int GL_RenderGetParm( int parm, int arg )
|
||||
{
|
||||
gltexture_t *glt;
|
||||
|
@ -1448,8 +1421,6 @@ static int GL_RenderGetParm( int parm, int arg )
|
|||
if( cls.state != ca_active )
|
||||
return bmodel_version;
|
||||
return world.version;
|
||||
case PARM_WORLD_LOADING:
|
||||
return world.loading;
|
||||
case PARM_WIDESCREEN:
|
||||
return glState.wideScreen;
|
||||
case PARM_FULLSCREEN:
|
||||
|
@ -1616,6 +1587,11 @@ static const byte *GL_TextureData( unsigned int texnum )
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static int GL_LoadTextureNoFilter( const char *name, const byte *buf, size_t size, int flags )
|
||||
{
|
||||
return GL_LoadTexture( name, buf, size, flags, NULL );
|
||||
}
|
||||
|
||||
static const ref_overview_t *GL_GetOverviewParms( void )
|
||||
{
|
||||
return &clgame.overView;
|
||||
|
@ -1672,7 +1648,7 @@ static render_api_t gRenderAPI =
|
|||
GL_FindTexture,
|
||||
GL_TextureName,
|
||||
GL_TextureData,
|
||||
GL_LoadTexture,
|
||||
GL_LoadTextureNoFilter,
|
||||
GL_CreateTexture,
|
||||
GL_SetTextureType,
|
||||
GL_TextureUpdateCache,
|
||||
|
@ -1680,10 +1656,8 @@ static render_api_t gRenderAPI =
|
|||
DrawSingleDecal,
|
||||
R_DecalSetupVerts,
|
||||
R_EntityRemoveDecals,
|
||||
AVI_LoadVideo,
|
||||
AVI_LoadVideoNoSound,
|
||||
AVI_GetVideoInfo,
|
||||
AVI_GetAudioInfo,
|
||||
AVI_GetAudioChunk,
|
||||
AVI_GetVideoFrameNumber,
|
||||
AVI_GetVideoFrame,
|
||||
R_UploadStretchRaw,
|
||||
|
@ -1709,11 +1683,8 @@ static render_api_t gRenderAPI =
|
|||
Mod_TesselatePolygon,
|
||||
R_StudioGetTexture,
|
||||
GL_GetOverviewParms,
|
||||
R_InitSky,
|
||||
R_FindTexFilter,
|
||||
S_FadeMusicVolume,
|
||||
COM_SetRandomSeed,
|
||||
Mod_WadList,
|
||||
R_Mem_Alloc,
|
||||
R_Mem_Free,
|
||||
pfnGetFilesList,
|
||||
|
|
|
@ -71,7 +71,7 @@ static dframetype_t *R_SpriteLoadFrame( model_t *mod, void *pin, mspriteframe_t
|
|||
else
|
||||
{
|
||||
// partially HD-textures support
|
||||
if( mod_allow_materials != NULL && mod_allow_materials->integer && !Q_strcmp( group_suffix, "one" ))
|
||||
if( Mod_AllowMaterials() && !Q_strcmp( group_suffix, "one" ))
|
||||
{
|
||||
Q_strncpy( sprname, mod->name, sizeof( sprname ));
|
||||
FS_StripExtension( sprname );
|
||||
|
|
|
@ -3428,7 +3428,7 @@ static void R_StudioLoadTexture( model_t *mod, studiohdr_t *phdr, mstudiotexture
|
|||
filter = R_FindTexFilter( va( "%s.mdl/%s", mdlname, name )); // grab texture filter
|
||||
|
||||
// NOTE: colormaps must have the palette for properly work. Ignore it.
|
||||
if( mod_allow_materials != NULL && mod_allow_materials->integer && !( ptexture->flags & STUDIO_NF_COLORMAP ))
|
||||
if( Mod_AllowMaterials( ) && !( ptexture->flags & STUDIO_NF_COLORMAP ))
|
||||
{
|
||||
int gl_texturenum = 0;
|
||||
|
||||
|
|
|
@ -679,6 +679,11 @@ movie_state_t *AVI_LoadVideo( const char *filename, qboolean load_audio, qboolea
|
|||
return Avi;
|
||||
}
|
||||
|
||||
movie_state_t *AVI_LoadVideoNoSound( const char *filename, qboolean ignore_hwgamma )
|
||||
{
|
||||
return AVI_LoadVideo( filename, false, ignore_hwgamma );
|
||||
}
|
||||
|
||||
void AVI_FreeVideo( movie_state_t *state )
|
||||
{
|
||||
if( !state ) return;
|
||||
|
|
|
@ -48,6 +48,8 @@ extern "C" {
|
|||
#define IsColorString( p ) ( p && *( p ) == '^' && *(( p ) + 1) && *(( p ) + 1) >= '0' && *(( p ) + 1 ) <= '9' )
|
||||
#define ColorIndex( c ) ((( c ) - '0' ) & 7 )
|
||||
|
||||
#define Mod_AllowMaterials() ( mod_allow_materials != NULL && mod_allow_materials->integer && !( host.features & ENGINE_DISABLE_HDTEXTURES ))
|
||||
|
||||
typedef unsigned long dword;
|
||||
typedef unsigned int uint;
|
||||
typedef char string[MAX_STRING];
|
||||
|
@ -747,6 +749,7 @@ qboolean AVI_GetAudioInfo( movie_state_t *Avi, wavdata_t *snd_info );
|
|||
fs_offset_t AVI_GetAudioChunk( movie_state_t *Avi, char *audiodata, long offset, long length );
|
||||
void AVI_OpenVideo( movie_state_t *Avi, const char *filename, qboolean load_audio, qboolean ignore_hwgamma, int quiet );
|
||||
movie_state_t *AVI_LoadVideo( const char *filename, qboolean load_audio, qboolean ignore_hwgamma );
|
||||
movie_state_t *AVI_LoadVideoNoSound( const char *filename, qboolean ignore_hwgamma );
|
||||
void AVI_CloseVideo( movie_state_t *Avi );
|
||||
qboolean AVI_IsActive( movie_state_t *Avi );
|
||||
void AVI_FreeVideo( movie_state_t *Avi );
|
||||
|
|
|
@ -47,6 +47,12 @@ GNU General Public License for more details.
|
|||
#define MODEL_HAS_ORIGIN BIT( 1 )
|
||||
#define MODEL_LIQUID BIT( 2 ) // model has only point hull
|
||||
|
||||
typedef struct wadlist_s
|
||||
{
|
||||
char wadnames[256][32];
|
||||
int count;
|
||||
} wadlist_t;
|
||||
|
||||
typedef struct leaflist_s
|
||||
{
|
||||
int count;
|
||||
|
@ -76,8 +82,6 @@ typedef struct
|
|||
qboolean has_mirrors; // one or more brush models contain reflective textures
|
||||
int lm_sample_size; // defaulting to 16 (BSP31 uses 8)
|
||||
int block_size; // lightmap blocksize
|
||||
qboolean use_worldpool; // Mod_Calloc temporare change from com_studiocache to use loadmodel->mempool
|
||||
|
||||
color24 *deluxedata; // deluxemap data pointer
|
||||
|
||||
vec3_t mins; // real accuracy world bounds
|
||||
|
|
|
@ -533,7 +533,6 @@ void Mod_ClearAll( void )
|
|||
Mod_FreeModel( &cm_models[i] );
|
||||
|
||||
Q_memset( cm_models, 0, sizeof( cm_models ));
|
||||
world.use_worldpool = false; // reset by Host_Error
|
||||
cm_nummodels = 0;
|
||||
}
|
||||
|
||||
|
@ -644,10 +643,6 @@ static void Mod_LoadTextures( const dlump_t *l )
|
|||
|
||||
in = (void *)(mod_base + l->fileofs);
|
||||
|
||||
// texture loading is overrided?
|
||||
if( GL_LoadTextures( in, loadmodel ))
|
||||
return;
|
||||
|
||||
loadmodel->numtextures = in->nummiptex;
|
||||
loadmodel->textures = (texture_t **)Mem_Alloc( loadmodel->mempool, loadmodel->numtextures * sizeof( texture_t* ));
|
||||
|
||||
|
@ -690,7 +685,7 @@ static void Mod_LoadTextures( const dlump_t *l )
|
|||
// check for multi-layered sky texture
|
||||
if( world.loading && !Q_strncmp( mt->name, "sky", 3 ) && mt->width == 256 && mt->height == 128 )
|
||||
{
|
||||
if( mod_allow_materials != NULL && mod_allow_materials->integer )
|
||||
if( Mod_AllowMaterials( ))
|
||||
{
|
||||
// build standard path: "materials/mapname/texname_solid.tga"
|
||||
Q_snprintf( texname, sizeof( texname ), "materials/%s/%s_solid.tga", modelname, mt->name );
|
||||
|
@ -752,7 +747,7 @@ static void Mod_LoadTextures( const dlump_t *l )
|
|||
}
|
||||
else
|
||||
{
|
||||
if( mod_allow_materials != NULL && mod_allow_materials->integer )
|
||||
if( Mod_AllowMaterials( ))
|
||||
{
|
||||
if( mt->name[0] == '*' ) mt->name[0] = '!'; // replace unexpected symbol
|
||||
|
||||
|
@ -3131,15 +3126,9 @@ Mod_Calloc
|
|||
void *Mod_Calloc( int number, size_t size )
|
||||
{
|
||||
cache_user_t *cu;
|
||||
byte *pool;
|
||||
|
||||
// IEngineStudio->Mem_Calloc may be used for loading worldtextures
|
||||
if( world.use_worldpool )
|
||||
pool = loadmodel->mempool;
|
||||
else pool = com_studiocache;
|
||||
|
||||
if( number <= 0 || size <= 0 ) return NULL;
|
||||
cu = (cache_user_t *)Mem_Alloc( pool, sizeof( cache_user_t ) + number * size );
|
||||
cu = (cache_user_t *)Mem_Alloc( com_studiocache, sizeof( cache_user_t ) + number * size );
|
||||
cu->data = (void *)cu; // make sure what cu->data is not NULL
|
||||
|
||||
return cu;
|
||||
|
|
Reference in New Issue