From 437ba6d7a2f3b0a63b8f48dad5b58387050094b0 Mon Sep 17 00:00:00 2001 From: mittorn Date: Wed, 27 Feb 2019 06:23:03 +0700 Subject: [PATCH] ref:Fix some clgame, world and renderapi usages, import renderapi funcs from engine --- common/ref_api.h | 52 ++++++++++++++++++++++++-- engine/client/ref_common.c | 31 ++++++++++++++++ engine/common/mod_bmodel.c | 13 ++++--- engine/common/mod_local.h | 9 ----- ref_gl/gl_backend.c | 18 ++++----- ref_gl/gl_beams.c | 5 +-- ref_gl/gl_context.c | 1 - ref_gl/gl_dbghulls.c | 1 - ref_gl/gl_decals.c | 8 ++-- ref_gl/gl_draw.c | 4 +- ref_gl/gl_frustum.c | 1 - ref_gl/gl_image.c | 1 - ref_gl/gl_local.h | 13 +++++++ ref_gl/gl_refrag.c | 1 - ref_gl/gl_rmain.c | 75 +++++++++++++------------------------- ref_gl/gl_rmisc.c | 1 - ref_gl/gl_rpart.c | 2 +- ref_gl/gl_rsurf.c | 37 +++++++++---------- ref_gl/gl_sprite.c | 1 - ref_gl/gl_triapi.c | 8 ++-- ref_gl/gl_vgui.c | 4 +- ref_gl/gl_warp.c | 18 ++++----- 22 files changed, 177 insertions(+), 127 deletions(-) diff --git a/common/ref_api.h b/common/ref_api.h index 3be645ba..9d707387 100644 --- a/common/ref_api.h +++ b/common/ref_api.h @@ -26,7 +26,6 @@ GNU General Public License for more details. #include "com_model.h" #include "studio.h" #include "r_efx.h" -#include "cvar.h" #define REF_API_VERSION 1 @@ -59,6 +58,12 @@ GNU General Public License for more details. #define FWORLD_WATERALPHA BIT( 2 ) #define FWORLD_HAS_DELUXEMAP BIT( 3 ) +typedef struct +{ + msurface_t *surf; + int cull; +} sortedface_t; + typedef struct ref_globals_s { qboolean developer; @@ -80,6 +85,14 @@ typedef struct ref_globals_s model_t *currentmodel; float fov_x, fov_y; + + // todo: fill this without engine help + // move to local + + // translucent sorted array + sortedface_t *draw_surfaces; // used for sorting translucent surfaces + int max_surfaces; // max surfaces per submodel (for all models) + size_t visbytes; // cluster size } ref_globals_t; enum @@ -118,8 +131,8 @@ typedef struct ref_api_s int (*GetViewEntIndex)( void ); // cl.viewentity // cvar handlers - convar_t *(*pfnRegisterVariable)( const char *szName, const char *szValue, int flags, const char *description ); - convar_t *(*pfnGetCvarPointer)( const char *name ); + cvar_t *(*pfnRegisterVariable)( const char *szName, const char *szValue, int flags, const char *description ); + cvar_t *(*pfnGetCvarPointer)( const char *name ); float (*pfnGetCvarFloat)( const char *szName ); const char *(*pfnGetCvarString)( const char *szName ); @@ -208,6 +221,39 @@ typedef struct ref_api_s void (*GL_DestroyContext)( ); void *(*GL_GetProcAddress)( const char *name ); + // renderapi + lightstyle_t* (*GetLightStyle)( int number ); + dlight_t* (*GetDynamicLight)( int number ); + dlight_t* (*GetEntityLight)( int number ); + byte (*LightToTexGamma)( byte color ); // software gamma support + 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 char *( *GetFileByIndex )( int fileindex ); + 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 + + // client exports + void (*pfnDrawNormalTriangles)( void ); + void (*pfnDrawTransparentTriangles)( void ); + int (*pfnGetRenderInterface)( int version, render_api_t *renderfuncs, render_interface_t *callback ); + int (*CL_GetRenderParm)( int parm, int arg ); // generic + } ref_api_t; struct mip_s; diff --git a/engine/client/ref_common.c b/engine/client/ref_common.c index e93c4def..72807fca 100644 --- a/engine/client/ref_common.c +++ b/engine/client/ref_common.c @@ -61,6 +61,37 @@ static void R_UnloadProgs( void ) Cmd_Unlink( CMD_REFDLL ); } +static int CL_RenderGetParm( int parm, int arg ) +{ + switch( parm ) + { + case PARM_BSP2_SUPPORTED: +#ifdef SUPPORT_BSP2_FORMAT + return 1; +#endif + return 0; + case PARM_SKY_SPHERE: + return FBitSet( world.flags, FWORLD_SKYSPHERE ) && !FBitSet( world.flags, FWORLD_CUSTOM_SKYBOX ); + case PARAM_GAMEPAUSED: + return cl.paused; + case PARM_CLIENT_INGAME: + return CL_IsInGame(); + case PARM_MAX_ENTITIES: + return clgame.maxEntities; + case PARM_FEATURES: + return host.features; + case PARM_MAP_HAS_DELUXE: + return FBitSet( world.flags, FWORLD_HAS_DELUXEMAP ); + case PARM_CLIENT_ACTIVE: + return (cls.state == ca_active); + case PARM_DEDICATED_SERVER: + return (host.type == HOST_DEDICATED); + case PARM_WATER_ALPHA: + return FBitSet( world.flags, FWORLD_WATERALPHA ); + } + return 0; +} + static void CL_FillTriAPIFromRef( triangleapi_t *dst, const ref_interface_t *src ) { dst->version = TRI_API_VERSION; diff --git a/engine/common/mod_bmodel.c b/engine/common/mod_bmodel.c index 3452b632..f0f70148 100644 --- a/engine/common/mod_bmodel.c +++ b/engine/common/mod_bmodel.c @@ -23,7 +23,7 @@ GNU General Public License for more details. #include "enginefeatures.h" #include "client.h" #include "server.h" // LUMP_ error codes - +#include "ref_common.h" typedef struct wadlist_s { char wadnames[MAX_MAP_WADS][32]; @@ -1472,8 +1472,8 @@ static void Mod_LoadSubmodels( dbspmodel_t *bmod ) in = bmod->submodels; if( bmod->isworld ) - world.max_surfaces = 0; - oldmaxfaces = world.max_surfaces; + refState.max_surfaces = 0; + oldmaxfaces = refState.max_surfaces; for( i = 0; i < bmod->numsubmodels; i++, in++, out++ ) { @@ -1504,10 +1504,10 @@ static void Mod_LoadSubmodels( dbspmodel_t *bmod ) } // these array used to sort translucent faces in bmodels - if( oldmaxfaces > world.max_surfaces ) + if( oldmaxfaces > refState.max_surfaces ) { - world.draw_surfaces = (sortedface_t *)Z_Realloc( world.draw_surfaces, oldmaxfaces * sizeof( sortedface_t )); - world.max_surfaces = oldmaxfaces; + refState.draw_surfaces = (sortedface_t *)Z_Realloc( refState.draw_surfaces, oldmaxfaces * sizeof( sortedface_t )); + refState.max_surfaces = oldmaxfaces; } } @@ -2352,6 +2352,7 @@ static void Mod_LoadLeafs( dbspmodel_t *bmod ) visclusters = loadmodel->submodels[0].visleafs; world.visbytes = (visclusters + 7) >> 3; world.fatbytes = (visclusters + 31) >> 3; + refState.visbytes = world.visbytes; } for( i = 0; i < bmod->numleafs; i++, out++ ) diff --git a/engine/common/mod_local.h b/engine/common/mod_local.h index d4ea1e7a..ce96c879 100644 --- a/engine/common/mod_local.h +++ b/engine/common/mod_local.h @@ -82,11 +82,6 @@ typedef struct uint num_polys; } hull_model_t; -typedef struct -{ - msurface_t *surf; - int cull; -} sortedface_t; typedef struct world_static_s { @@ -98,10 +93,6 @@ typedef struct world_static_s char compiler[256]; // map compiler char generator[256]; // map editor - // translucent sorted array - sortedface_t *draw_surfaces; // used for sorting translucent surfaces - int max_surfaces; // max surfaces per submodel (for all models) - hull_model_t *hull_models; int num_hull_models; diff --git a/ref_gl/gl_backend.c b/ref_gl/gl_backend.c index bf302002..c93c089f 100644 --- a/ref_gl/gl_backend.c +++ b/ref_gl/gl_backend.c @@ -27,9 +27,9 @@ R_SpeedsMessage */ qboolean R_SpeedsMessage( char *out, size_t size ) { - if( clgame.drawFuncs.R_SpeedsMessage != NULL ) + if( gRenderIface.R_SpeedsMessage != NULL ) { - if( clgame.drawFuncs.R_SpeedsMessage( out, size )) + if( gRenderIface.R_SpeedsMessage( out, size )) return true; // otherwise pass to default handler } @@ -461,7 +461,7 @@ Create overview script file */ void VID_WriteOverviewScript( void ) { - ref_overview_t *ov = &clgame.overView; + ref_overview_t *ov = &gEngfuncs.GetOverviewParms(); string filename; file_t *f; @@ -491,8 +491,8 @@ qboolean VID_ScreenShot( const char *filename, int shot_type ) qboolean result; r_shot = Mem_Calloc( r_temppool, sizeof( rgbdata_t )); - r_shot->width = (glState.width + 3) & ~3; - r_shot->height = (glState.height + 3) & ~3; + r_shot->width = (gpGlobals->width + 3) & ~3; + r_shot->height = (gpGlobals->height + 3) & ~3; r_shot->flags = IMAGE_HAS_COLOR; r_shot->type = PF_RGB_24; r_shot->size = r_shot->width * r_shot->height * PFDesc[r_shot->type].bpp; @@ -566,7 +566,7 @@ qboolean VID_CubemapShot( const char *base, uint size, const float *vieworg, qbo while( i < size ) i<<=1; if( i != size ) return false; - if( size > glState.width || size > glState.height ) + if( size > gpGlobals->width || size > gpGlobals->height ) return false; // setup refdef @@ -675,8 +675,8 @@ rebuild_page: end = total * gl_showtextures->value; if( end > MAX_TEXTURES ) end = MAX_TEXTURES; - w = glState.width / base_w; - h = glState.height / base_h; + w = gpGlobals->width / base_w; + h = gpGlobals->height / base_h; Con_DrawStringLen( NULL, NULL, &charHeight ); @@ -815,7 +815,7 @@ void R_ShowTree_r( mnode_t *node, float x, float y, float scale, int shownodes ) void R_ShowTree( void ) { - float x = (float)((glState.width - (int)POINT_SIZE) >> 1); + float x = (float)((gpGlobals->width - (int)POINT_SIZE) >> 1); float y = NODE_INTERVAL_Y(1.0); if( !WORLDMODEL || !CVAR_TO_BOOL( r_showtree )) diff --git a/ref_gl/gl_beams.c b/ref_gl/gl_beams.c index 2c0b7a07..24c6d583 100644 --- a/ref_gl/gl_beams.c +++ b/ref_gl/gl_beams.c @@ -13,7 +13,6 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */ -#include "common.h" #include "gl_local.h" #include "r_efx.h" #include "event_flags.h" @@ -165,7 +164,7 @@ void CL_AddCustomBeam( cl_entity_t *pEnvBeam ) { if( tr.draw_list->num_beam_entities >= MAX_VISIBLE_PACKET ) { - Con_Printf( S_ERROR "Too many beams %d!\n", tr.draw_list->num_beam_entities ); + gEngfuncs.Con_Printf( S_ERROR "Too many beams %d!\n", tr.draw_list->num_beam_entities ); return; } @@ -865,7 +864,7 @@ static qboolean R_BeamComputePoint( int beamEnt, vec3_t pt ) if( !ent ) { - Con_DPrintf( S_ERROR "R_BeamComputePoint: invalid entity %i\n", BEAMENT_ENTITY( beamEnt )); + gEngfuncs.Con_DPrintf( S_ERROR "R_BeamComputePoint: invalid entity %i\n", BEAMENT_ENTITY( beamEnt )); VectorClear( pt ); return false; } diff --git a/ref_gl/gl_context.c b/ref_gl/gl_context.c index d39670d3..ac82133f 100644 --- a/ref_gl/gl_context.c +++ b/ref_gl/gl_context.c @@ -13,7 +13,6 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */ -#include "common.h" #include "gl_local.h" #include "gl_export.h" diff --git a/ref_gl/gl_dbghulls.c b/ref_gl/gl_dbghulls.c index 53b0ae48..392f7020 100644 --- a/ref_gl/gl_dbghulls.c +++ b/ref_gl/gl_dbghulls.c @@ -15,7 +15,6 @@ GNU General Public License for more details. #include "gl_local.h" -#include "mod_local.h" #define list_entry( ptr, type, member ) \ ((type *)((char *)(ptr) - (size_t)(&((type *)0)->member))) diff --git a/ref_gl/gl_decals.c b/ref_gl/gl_decals.c index 81462189..9c74a142 100644 --- a/ref_gl/gl_decals.c +++ b/ref_gl/gl_decals.c @@ -1193,9 +1193,9 @@ int R_CreateDecalList( decallist_t *pList ) total = DecalListAdd( pList, total ); } - if( clgame.drawFuncs.R_CreateStudioDecalList ) + if( gRenderIface.R_CreateStudioDecalList ) { - total += clgame.drawFuncs.R_CreateStudioDecalList( pList, total ); + total += gRenderIface.R_CreateStudioDecalList( pList, total ); } } @@ -1277,8 +1277,8 @@ void R_ClearAllDecals( void ) R_DecalUnlink( pdecal ); } - if( clgame.drawFuncs.R_ClearStudioDecals ) + if( gRenderIface.R_ClearStudioDecals ) { - clgame.drawFuncs.R_ClearStudioDecals(); + gRenderIface.R_ClearStudioDecals(); } } diff --git a/ref_gl/gl_draw.c b/ref_gl/gl_draw.c index 952fd4c6..2b6046a3 100644 --- a/ref_gl/gl_draw.c +++ b/ref_gl/gl_draw.c @@ -246,10 +246,10 @@ void R_Set2DMode( qboolean enable ) return; // set 2D virtual screen size - pglViewport( 0, 0, glState.width, glState.height ); + pglViewport( 0, 0, gpGlobals->width, gpGlobals->height ); pglMatrixMode( GL_PROJECTION ); pglLoadIdentity(); - pglOrtho( 0, glState.width, glState.height, 0, -99999, 99999 ); + pglOrtho( 0, gpGlobals->width, gpGlobals->height, 0, -99999, 99999 ); pglMatrixMode( GL_MODELVIEW ); pglLoadIdentity(); diff --git a/ref_gl/gl_frustum.c b/ref_gl/gl_frustum.c index aa1c0a5d..64c56118 100644 --- a/ref_gl/gl_frustum.c +++ b/ref_gl/gl_frustum.c @@ -13,7 +13,6 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */ -#include "common.h" #include "gl_local.h" #include "mathlib.h" diff --git a/ref_gl/gl_image.c b/ref_gl/gl_image.c index 443d6aa1..63de0a6a 100644 --- a/ref_gl/gl_image.c +++ b/ref_gl/gl_image.c @@ -13,7 +13,6 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */ -#include "common.h" #include "gl_local.h" #define TEXTURES_HASH_SIZE (MAX_TEXTURES >> 2) diff --git a/ref_gl/gl_local.h b/ref_gl/gl_local.h index 97068cc7..c5602ebc 100644 --- a/ref_gl/gl_local.h +++ b/ref_gl/gl_local.h @@ -32,7 +32,9 @@ GNU General Public License for more details. #include "enginefeatures.h" #include "com_strings.h" #include "pm_movevars.h" +#define offsetof(s,m) (size_t)&(((s *)0)->m) +typedef cvar_t convar_t; void CL_DrawEFX(double, double); void *CL_ModelHandle(int); void *GL_GetProcAddress(char *); @@ -46,6 +48,11 @@ extern convar_t cvstub; #define Cmd_RemoveCommand(...) #define FS_FreeImage(...) #define Host_Error(...) +#define ASSERT(x) +#define Assert(x) + +#include +#define Con_Reportf gEngfuncs.Con_DPrintf #define CVAR_DEFINE( cv, cvname, cvstr, cvflags, cvdesc ) convar_t cv = { cvname, cvstr, cvflags, 0.0f, (void *)CVAR_SENTINEL, cvdesc } #define CVAR_DEFINE_AUTO( cv, cvstr, cvflags, cvdesc ) convar_t cv = { #cv, cvstr, cvflags, 0.0f, (void *)CVAR_SENTINEL, cvdesc } @@ -54,6 +61,10 @@ extern convar_t cvstub; #define WORLD (gEngfuncs.GetWorld()) #define WORLDMODEL (gEngfuncs.pfnGetModelByIndex( 1 )) #define MOVEVARS (gEngfuncs.pfnGetMoveVars()) +extern render_interface_t gRenderIface; + +// make mod_ref.h? +#define LM_SAMPLE_SIZE 16 extern byte *r_temppool; @@ -245,6 +256,8 @@ typedef struct // cull info vec3_t modelorg; // relative to viewpoint + + qboolean fCustomSkybox; } gl_globals_t; typedef struct diff --git a/ref_gl/gl_refrag.c b/ref_gl/gl_refrag.c index 5e4d4b51..a5150f6f 100644 --- a/ref_gl/gl_refrag.c +++ b/ref_gl/gl_refrag.c @@ -14,7 +14,6 @@ GNU General Public License for more details. */ #include "gl_local.h" -#include "mod_local.h" #include "entity_types.h" #include "studio.h" diff --git a/ref_gl/gl_rmain.c b/ref_gl/gl_rmain.c index 25e9fd49..57930bba 100644 --- a/ref_gl/gl_rmain.c +++ b/ref_gl/gl_rmain.c @@ -327,7 +327,7 @@ R_SetupFrustum */ void R_SetupFrustum( void ) { - ref_overview_t *ov = &clgame.overView; + ref_overview_t *ov = gEngfuncs.GetOverviewParms(); if( RP_NORMALPASS() && ( cl.local.waterlevel >= 3 )) { @@ -362,7 +362,7 @@ static void R_SetupProjectionMatrix( matrix4x4 m ) if( RI.drawOrtho ) { - ref_overview_t *ov = &clgame.overView; + ref_overview_t *ov = gEngfuncs.GetOverviewParms(); Matrix4x4_CreateOrtho( m, ov->xLeft, ov->xRight, ov->yTop, ov->yBottom, ov->zNear, ov->zFar ); return; } @@ -518,10 +518,10 @@ void R_SetupGL( qboolean set_gl_state ) int x, x2, y, y2; // set up viewport (main, playersetup) - x = floor( RI.viewport[0] * glState.width / glState.width ); - x2 = ceil(( RI.viewport[0] + RI.viewport[2] ) * glState.width / glState.width ); - y = floor( glState.height - RI.viewport[1] * glState.height / glState.height ); - y2 = ceil( glState.height - ( RI.viewport[1] + RI.viewport[3] ) * glState.height / glState.height ); + x = floor( RI.viewport[0] * gpGlobals->width / gpGlobals->width ); + x2 = ceil(( RI.viewport[0] + RI.viewport[2] ) * gpGlobals->width / gpGlobals->width ); + y = floor( gpGlobals->height - RI.viewport[1] * gpGlobals->height / gpGlobals->height ); + y2 = ceil( gpGlobals->height - ( RI.viewport[1] + RI.viewport[3] ) * gpGlobals->height / gpGlobals->height ); pglViewport( x, y2, x2 - x, y - y2 ); } @@ -858,7 +858,7 @@ void R_DrawEntitiesOnList( void ) GL_CheckForErrors(); if( RI.drawWorld ) - clgame.dllFuncs.pfnDrawNormalTriangles(); + gEngfuncs.pfnDrawNormalTriangles(); GL_CheckForErrors(); @@ -902,7 +902,7 @@ void R_DrawEntitiesOnList( void ) if( RI.drawWorld ) { pglTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); - clgame.dllFuncs.pfnDrawTransparentTriangles (); + gEngfuncs.pfnDrawTransparentTriangles (); } GL_CheckForErrors(); @@ -1109,11 +1109,11 @@ void R_RenderFrame( const ref_viewpass_t *rvp ) } // completely override rendering - if( clgame.drawFuncs.GL_RenderFrame != NULL ) + if( gRenderIface.GL_RenderFrame != NULL ) { tr.fCustomRendering = true; - if( clgame.drawFuncs.GL_RenderFrame( rvp )) + if( gRenderIface.GL_RenderFrame( rvp )) { R_GatherPlayerLight(); tr.realframecount++; @@ -1204,11 +1204,6 @@ static int GL_RenderGetParm( int parm, int arg ) case PARM_TEX_DEPTH: glt = R_GetTexture( arg ); return glt->depth; - case PARM_BSP2_SUPPORTED: -#ifdef SUPPORT_BSP2_FORMAT - return 1; -#endif - return 0; case PARM_TEX_SKYBOX: Assert( arg >= 0 && arg < 6 ); return tr.skyboxTextures[arg]; @@ -1217,22 +1212,14 @@ static int GL_RenderGetParm( int parm, int arg ) case PARM_TEX_LIGHTMAP: arg = bound( 0, arg, MAX_LIGHTMAPS - 1 ); return tr.lightmapTextures[arg]; - case PARM_SKY_SPHERE: - return FBitSet( WORLDMODEL->flags, FWORLD_SKYSPHERE ) && !FBitSet( WORLDMODEL->flags, FWORLD_CUSTOM_SKYBOX ); - case PARAM_GAMEPAUSED: - return cl.paused; case PARM_WIDESCREEN: - return glState.wideScreen; + return gpGlobals->wideScreen; case PARM_FULLSCREEN: - return glState.fullScreen; + return gpGlobals->fullScreen; case PARM_SCREEN_WIDTH: - return glState.width; + return gpGlobals->width; case PARM_SCREEN_HEIGHT: - return glState.height; - case PARM_CLIENT_INGAME: - return CL_IsInGame(); - case PARM_MAX_ENTITIES: - return clgame.maxEntities; + return gpGlobals->height; case PARM_TEX_TARGET: glt = R_GetTexture( arg ); return glt->target; @@ -1249,16 +1236,10 @@ static int GL_RenderGetParm( int parm, int arg ) case PARM_LIGHTSTYLEVALUE: arg = bound( 0, arg, MAX_LIGHTSTYLES - 1 ); return tr.lightstylevalue[arg]; - case PARM_MAP_HAS_DELUXE: - return FBitSet( WORLDMODEL->flags, FWORLD_HAS_DELUXEMAP ); case PARM_MAX_IMAGE_UNITS: return GL_MaxTextureUnits(); - case PARM_CLIENT_ACTIVE: - return (cls.state == ca_active); case PARM_REBUILD_GAMMA: return glConfig.softwareGammaUpdate; - case PARM_DEDICATED_SERVER: - return (host.type == HOST_DEDICATED); case PARM_SURF_SAMPLESIZE: if( arg >= 0 && arg < WORLDMODEL->numsurfaces ) return gEngfuncs.Mod_SampleSizeForFace( &WORLDMODEL->surfaces[arg] ); @@ -1269,8 +1250,10 @@ static int GL_RenderGetParm( int parm, int arg ) return glConfig.wrapper; case PARM_STENCIL_ACTIVE: return glState.stencilEnabled; - case PARM_WATER_ALPHA: - return FBitSet( WORLDMODEL->flags, FWORLD_WATERALPHA ); + case PARM_SKY_SPHERE: + return gEngfuncs.CL_GetRenderParm( parm, arg ) && !tr.fCustomSkybox; + default: + return gEngfuncs.CL_GetRenderParm( parm, arg ); } return 0; } @@ -1358,22 +1341,16 @@ Initialize client external rendering qboolean R_InitRenderAPI( void ) { // make sure what render functions is cleared - memset( &clgame.drawFuncs, 0, sizeof( clgame.drawFuncs )); + memset( &gRenderIface, 0, sizeof( gRenderIface )); - if( clgame.dllFuncs.pfnGetRenderInterface ) + if( gEngfuncs.pfnGetRenderInterface( CL_RENDER_INTERFACE_VERSION, &gRenderAPI, &gRenderIface )) { - if( clgame.dllFuncs.pfnGetRenderInterface( CL_RENDER_INTERFACE_VERSION, &gRenderAPI, &clgame.drawFuncs )) - { - Con_Reportf( "CL_LoadProgs: ^2initailized extended RenderAPI ^7ver. %i\n", CL_RENDER_INTERFACE_VERSION ); - return true; - } - - // make sure what render functions is cleared - memset( &clgame.drawFuncs, 0, sizeof( clgame.drawFuncs )); - - return false; // just tell user about problems + Con_Reportf( "CL_LoadProgs: ^2initailized extended RenderAPI ^7ver. %i\n", CL_RENDER_INTERFACE_VERSION ); + return true; } - // render interface is missed - return true; + // make sure what render functions is cleared + memset( &gRenderIface, 0, sizeof( gRenderIface )); + + return false; // just tell user about problems } diff --git a/ref_gl/gl_rmisc.c b/ref_gl/gl_rmisc.c index efdeb97f..7819596f 100644 --- a/ref_gl/gl_rmisc.c +++ b/ref_gl/gl_rmisc.c @@ -14,7 +14,6 @@ GNU General Public License for more details. */ #include "gl_local.h" -#include "mod_local.h" #include "shake.h" #include "screenfade.h" #include "cdll_int.h" diff --git a/ref_gl/gl_rpart.c b/ref_gl/gl_rpart.c index 10620d68..e4f22f9e 100644 --- a/ref_gl/gl_rpart.c +++ b/ref_gl/gl_rpart.c @@ -346,7 +346,7 @@ void CL_DrawParticlesExternal( const ref_viewpass_t *rvp, qboolean trans_pass, f R_SetupGL( false ); // don't touch GL-states // setup PVS for frame - memcpy( RI.visbytes, tr.visbytes, WORLDMODEL->visbytes ); + memcpy( RI.visbytes, tr.visbytes, gpGlobals->visbytes ); tr.frametime = frametime; CL_DrawEFX( frametime, trans_pass ); diff --git a/ref_gl/gl_rsurf.c b/ref_gl/gl_rsurf.c index 3c92ca11..efddc8b1 100644 --- a/ref_gl/gl_rsurf.c +++ b/ref_gl/gl_rsurf.c @@ -14,7 +14,6 @@ GNU General Public License for more details. */ #include "gl_local.h" -#include "mod_local.h" #include "mathlib.h" typedef struct @@ -45,16 +44,16 @@ static void R_DrawVBO( qboolean drawlightmaps, qboolean drawtextures ); byte *Mod_GetCurrentVis( void ) { - if( clgame.drawFuncs.Mod_GetCurrentVis && tr.fCustomRendering ) - return clgame.drawFuncs.Mod_GetCurrentVis(); + if( gRenderIface.Mod_GetCurrentVis && tr.fCustomRendering ) + return gRenderIface.Mod_GetCurrentVis(); return RI.visbytes; } void Mod_SetOrthoBounds( float *mins, float *maxs ) { - if( clgame.drawFuncs.GL_OrthoBounds ) + if( gRenderIface.GL_OrthoBounds ) { - clgame.drawFuncs.GL_OrthoBounds( mins, maxs ); + gRenderIface.GL_OrthoBounds( mins, maxs ); } Vector2Average( maxs, mins, world_orthocenter ); @@ -1270,7 +1269,7 @@ void R_DrawTextureChains( void ) RI.currententity = gEngfuncs.GetEntityByIndex( 0 ); RI.currentmodel = RI.currententity->model; - if( FBitSet( WORLDMODEL->flags, FWORLD_SKYSPHERE ) && !FBitSet( WORLDMODEL->flags, FWORLD_CUSTOM_SKYBOX )) + if( gEngfuncs.CL) { pglDisable( GL_TEXTURE_2D ); pglColor3f( 1.0f, 1.0f, 1.0f ); @@ -1280,7 +1279,7 @@ void R_DrawTextureChains( void ) for( s = skychain; s != NULL; s = s->texturechain ) R_AddSkyBoxSurface( s ); - if( FBitSet( WORLDMODEL->flags, FWORLD_SKYSPHERE ) && !FBitSet( WORLDMODEL->flags, FWORLD_CUSTOM_SKYBOX )) + if( FBitSet( WORLDMODEL->flags, FWORLD_SKYSPHERE ) && !tr.fCustomSkybox ) { pglEnable( GL_TEXTURE_2D ); if( skychain ) @@ -1608,22 +1607,22 @@ void R_DrawBrushModel( cl_entity_t *e ) continue; } - if( num_sorted < WORLDMODEL->max_surfaces ) + if( num_sorted < gpGlobals->max_surfaces ) { - WORLDMODEL->draw_surfaces[num_sorted].surf = psurf; - WORLDMODEL->draw_surfaces[num_sorted].cull = cull_type; + gpGlobals->draw_surfaces[num_sorted].surf = psurf; + gpGlobals->draw_surfaces[num_sorted].cull = cull_type; num_sorted++; } } // sort faces if needs if( !FBitSet( clmodel->flags, MODEL_LIQUID ) && e->curstate.rendermode == kRenderTransTexture && !CVAR_TO_BOOL( gl_nosort )) - qsort( WORLDMODEL->draw_surfaces, num_sorted, sizeof( sortedface_t ), R_SurfaceCompare ); + qsort( gpGlobals->draw_surfaces, num_sorted, sizeof( sortedface_t ), R_SurfaceCompare ); // draw sorted translucent surfaces for( i = 0; i < num_sorted; i++ ) - if( !allow_vbo || !R_AddSurfToVBO( WORLDMODEL->draw_surfaces[i].surf, true ) ) - R_RenderBrushPoly( WORLDMODEL->draw_surfaces[i].surf, WORLDMODEL->draw_surfaces[i].cull ); + if( !allow_vbo || !R_AddSurfToVBO( gpGlobals->draw_surfaces[i].surf, true ) ) + R_RenderBrushPoly( gpGlobals->draw_surfaces[i].surf, gpGlobals->draw_surfaces[i].cull ); R_DrawVBO( R_HasLightmap(), true ); if( e->curstate.rendermode == kRenderTransColor ) @@ -3415,8 +3414,8 @@ void R_MarkLeaves( void ) if( r_novis->value || RI.drawOrtho || !RI.viewleaf || !WORLDMODEL->visdata ) novis = true; - Mod_FatPVS( RI.pvsorigin, REFPVS_RADIUS, RI.visbytes, WORLDMODEL->visbytes, FBitSet( RI.params, RP_OLDVIEWLEAF ), novis ); - if( force && !novis ) Mod_FatPVS( test, REFPVS_RADIUS, RI.visbytes, WORLDMODEL->visbytes, true, novis ); + Mod_FatPVS( RI.pvsorigin, REFPVS_RADIUS, RI.visbytes, gpGlobals->visbytes, FBitSet( RI.params, RP_OLDVIEWLEAF ), novis ); + if( force && !novis ) Mod_FatPVS( test, REFPVS_RADIUS, RI.visbytes, gpGlobals->visbytes, true, novis ); for( i = 0; i < WORLDMODEL->numleafs; i++ ) { @@ -3523,10 +3522,10 @@ void GL_RebuildLightmaps( void ) } LM_UploadBlock( false ); - if( clgame.drawFuncs.GL_BuildLightmaps ) + if( gRenderIface.GL_BuildLightmaps ) { // build lightmaps on the client-side - clgame.drawFuncs.GL_BuildLightmaps( ); + gRenderIface.GL_BuildLightmaps( ); } } @@ -3606,10 +3605,10 @@ void GL_BuildLightmaps( void ) LM_UploadBlock( false ); - if( clgame.drawFuncs.GL_BuildLightmaps ) + if( gRenderIface.GL_BuildLightmaps ) { // build lightmaps on the client-side - clgame.drawFuncs.GL_BuildLightmaps( ); + gRenderIface.GL_BuildLightmaps( ); } // now gamma and brightness are valid diff --git a/ref_gl/gl_sprite.c b/ref_gl/gl_sprite.c index 606324a9..a427f03c 100644 --- a/ref_gl/gl_sprite.c +++ b/ref_gl/gl_sprite.c @@ -13,7 +13,6 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. */ -#include "common.h" #include "gl_local.h" #include "pm_local.h" #include "sprite.h" diff --git a/ref_gl/gl_triapi.c b/ref_gl/gl_triapi.c index a3ddc2f9..3ba16e5f 100644 --- a/ref_gl/gl_triapi.c +++ b/ref_gl/gl_triapi.c @@ -181,10 +181,10 @@ int TriWorldToScreen( float *world, float *screen ) retval = R_WorldToScreen( world, screen ); - screen[0] = 0.5f * screen[0] * (float)clgame.viewport[2]; - screen[1] = -0.5f * screen[1] * (float)clgame.viewport[3]; - screen[0] += 0.5f * (float)clgame.viewport[2]; - screen[1] += 0.5f * (float)clgame.viewport[3]; + screen[0] = 0.5f * screen[0] * (float)RI.viewport[2]; + screen[1] = -0.5f * screen[1] * (float)RI.viewport[3]; + screen[0] += 0.5f * (float)RI.viewport[2]; + screen[1] += 0.5f * (float)RI.viewport[3]; return retval; } diff --git a/ref_gl/gl_vgui.c b/ref_gl/gl_vgui.c index aa852b5b..69ab6dd0 100644 --- a/ref_gl/gl_vgui.c +++ b/ref_gl/gl_vgui.c @@ -221,8 +221,8 @@ generic method to fill rectangle */ void GAME_EXPORT VGUI_DrawQuad( const vpoint_t *ul, const vpoint_t *lr ) { - float xscale = glState.width / (float)clgame.scrInfo.iWidth; - float yscale = glState.height / (float)clgame.scrInfo.iHeight; + float xscale = gpGlobals->width / (float)clgame.scrInfo.iWidth; + float yscale = gpGlobals->height / (float)clgame.scrInfo.iHeight; ASSERT( ul != NULL && lr != NULL ); diff --git a/ref_gl/gl_warp.c b/ref_gl/gl_warp.c index c3b3214c..6d7b67f2 100644 --- a/ref_gl/gl_warp.c +++ b/ref_gl/gl_warp.c @@ -310,7 +310,7 @@ void R_AddSkyBoxSurface( msurface_t *fa ) float *v; int i; - if( FBitSet( WORLDMODEL->flags, FWORLD_SKYSPHERE ) && fa->polys && !FBitSet( WORLDMODEL->flags, FWORLD_CUSTOM_SKYBOX )) + if( gEngfuncs.CL_GetRenderParm( PARM_SKY_SPHERE ) && fa->polys && !tr.fCustomSkybox ) { glpoly_t *p = fa->polys; @@ -354,7 +354,7 @@ void R_UnloadSkybox( void ) tr.skyboxbasenum = 5800; // set skybox base (to let some mods load hi-res skyboxes) memset( tr.skyboxTextures, 0, sizeof( tr.skyboxTextures )); - ClearBits( WORLDMODEL->flags, FWORLD_CUSTOM_SKYBOX ); + tr.fCustomSkybox = false; } /* @@ -411,8 +411,8 @@ R_SetupSky */ void R_SetupSky( const char *skyboxname ) { - char loadname[MAX_QPATH]; - char sidename[MAX_QPATH]; + char loadname[MAX_STRING]; + char sidename[MAX_STRING]; int i, result; if( !COM_CheckString( skyboxname )) @@ -439,7 +439,7 @@ void R_SetupSky( const char *skyboxname ) // release old skybox R_UnloadSkybox(); - Con_DPrintf( "SKY: " ); + gEngfuncs.Con_DPrintf( "SKY: " ); for( i = 0; i < 6; i++ ) { @@ -449,17 +449,17 @@ void R_SetupSky( const char *skyboxname ) tr.skyboxTextures[i] = GL_LoadTexture( sidename, NULL, 0, TF_CLAMP|TF_SKY ); if( !tr.skyboxTextures[i] ) break; - Con_DPrintf( "%s%s%s", skyboxname, r_skyBoxSuffix[i], i != 5 ? ", " : ". " ); + gEngfuncs.Con_DPrintf( "%s%s%s", skyboxname, r_skyBoxSuffix[i], i != 5 ? ", " : ". " ); } if( i == 6 ) { - SetBits( WORLDMODEL->flags, FWORLD_CUSTOM_SKYBOX ); - Con_DPrintf( "done\n" ); + tr.fCustomSkybox = true; + gEngfuncs.Con_DPrintf( "done\n" ); return; // loaded } - Con_DPrintf( "^2failed\n" ); + gEngfuncs.Con_DPrintf( "^2failed\n" ); R_UnloadSkybox(); }