04 Jan 2014

This commit is contained in:
g-cont 2014-01-04 00:00:00 +04:00 committed by Alibek Omarov
parent a80249ae70
commit 65c9bbd10f
12 changed files with 54 additions and 105 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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