summaryrefslogtreecommitdiff
path: root/source/gl_main.c
diff options
context:
space:
mode:
authorAndrey Nazarov <skuller@skuller.net>2008-08-16 10:19:42 +0000
committerAndrey Nazarov <skuller@skuller.net>2008-08-16 10:19:42 +0000
commit1526e22e4ff29153e9c127081e8ea8d9e2f33b8c (patch)
treeb361766433d4a7b4a111865afd52803e2bbf7754 /source/gl_main.c
parente826e5f176f21cd18b3bbc22887a266835ada57c (diff)
Split some monolithic include files into smaller ones.
Use single BSP models cache for refresh and collision subsystems. Refresh libraries may not longer be dynamically loaded. Made gi.TagMalloc use separate tag namespace to avoid conflicts with engine reserverd tags. Fixed listing order of MVD channels in chooser menu. A lot of misc changes... MSVC build is definitely broken now.
Diffstat (limited to 'source/gl_main.c')
-rw-r--r--source/gl_main.c514
1 files changed, 160 insertions, 354 deletions
diff --git a/source/gl_main.c b/source/gl_main.c
index b120f6f..0225877 100644
--- a/source/gl_main.c
+++ b/source/gl_main.c
@@ -25,14 +25,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "gl_local.h"
-/* declare imports for this module */
-cmdAPI_t cmd;
-cvarAPI_t cvar;
-fsAPI_t fs;
-commonAPI_t com;
-sysAPI_t sys;
-videoAPI_t video;
-
glRefdef_t glr;
glStatic_t gl_static;
glconfig_t gl_config;
@@ -41,7 +33,7 @@ statCounters_t c;
int registration_sequence;
cvar_t *gl_partscale;
-#if USE_JPEG
+#if USE_JPG
cvar_t *gl_screenshot_quality;
#endif
#if USE_PNG
@@ -273,12 +265,12 @@ void GL_DrawBox( const vec3_t origin, vec3_t bounds[2] ) {
static void GL_DrawSpriteModel( model_t *model ) {
vec3_t point;
entity_t *e = glr.ent;
- spriteFrame_t *frame;
+ mspriteframe_t *frame;
image_t *image;
int bits;
float alpha;
- frame = &model->sframes[e->frame % model->numFrames];
+ frame = &model->spriteframes[e->frame % model->numframes];
image = frame->image;
GL_TexEnv( GL_MODULATE );
@@ -303,23 +295,23 @@ static void GL_DrawSpriteModel( model_t *model ) {
qglBegin( GL_QUADS );
qglTexCoord2f( 0, 1 );
- VectorMA( e->origin, -frame->y, glr.viewaxis[2], point );
- VectorMA( point, frame->x, glr.viewaxis[1], point );
+ VectorMA( e->origin, -frame->origin_y, glr.viewaxis[2], point );
+ VectorMA( point, frame->origin_x, glr.viewaxis[1], point );
qglVertex3fv( point );
qglTexCoord2f( 0, 0 );
- VectorMA( e->origin, frame->height - frame->y, glr.viewaxis[2], point );
- VectorMA( point, frame->x, glr.viewaxis[1], point );
+ VectorMA( e->origin, frame->height - frame->origin_y, glr.viewaxis[2], point );
+ VectorMA( point, frame->origin_x, glr.viewaxis[1], point );
qglVertex3fv( point );
qglTexCoord2f( 1, 0 );
- VectorMA( e->origin, frame->height - frame->y, glr.viewaxis[2], point );
- VectorMA( point, frame->x - frame->width, glr.viewaxis[1], point );
+ VectorMA( e->origin, frame->height - frame->origin_y, glr.viewaxis[2], point );
+ VectorMA( point, frame->origin_x - frame->width, glr.viewaxis[1], point );
qglVertex3fv( point );
qglTexCoord2f( 1, 1 );
- VectorMA( e->origin, -frame->y, glr.viewaxis[2], point );
- VectorMA( point, frame->x - frame->width, glr.viewaxis[1], point );
+ VectorMA( e->origin, -frame->origin_y, glr.viewaxis[2], point );
+ VectorMA( point, frame->origin_x - frame->width, glr.viewaxis[1], point );
qglVertex3fv( point );
qglEnd();
@@ -354,7 +346,7 @@ static void GL_DrawNullModel( void ) {
static void GL_DrawEntities( int mask ) {
entity_t *ent, *last;
- modelType_t *model;
+ model_t *model;
if( !gl_drawentities->integer ) {
return;
@@ -383,28 +375,37 @@ static void GL_DrawEntities( int mask ) {
VectorSet( glr.entaxis[2], 0, 0, 1 );
}
- model = GL_ModelForHandle( ent->model );
+ // inline BSP model
+ if( ent->model & 0x80000000 ) {
+ bsp_t *bsp = gl_static.world.cache;
+ int index = ~ent->model;
+
+ if( !bsp ) {
+ Com_Error( ERR_DROP, "%s: inline model without world",
+ __func__ );
+ }
+
+ if( index < 1 || index >= bsp->nummodels ) {
+ Com_Error( ERR_DROP, "%s: inline model %d out of range",
+ __func__, index );
+ }
+
+ GL_DrawBspModel( &bsp->models[index] );
+ continue;
+ }
+
+ model = MOD_ForHandle( ent->model );
if( !model ) {
GL_DrawNullModel();
continue;
}
- switch( *model ) {
- case MODEL_NULL:
- GL_DrawNullModel();
- break;
- case MODEL_BSP:
- GL_DrawBspModel( ( bspSubmodel_t * )model );
- break;
- case MODEL_ALIAS:
- GL_DrawAliasModel( ( model_t * )model );
- break;
- case MODEL_SPRITE:
- GL_DrawSpriteModel( ( model_t * )model );
- break;
- default:
- Com_Error( ERR_FATAL, "GL_DrawEntities: bad model type: %u", *model );
- break;
+ if( model->frames ) {
+ GL_DrawAliasModel( model );
+ } else if( model->spriteframes ) {
+ GL_DrawSpriteModel( model );
+ } else {
+ Com_Error( ERR_FATAL, "%s: bad model type", __func__ );
}
}
}
@@ -440,10 +441,10 @@ void GL_ShowErrors( const char *func ) {
}
}
-static void GL_RenderFrame( refdef_t *fd ) {
+void R_RenderFrame( refdef_t *fd ) {
GL_Flush2D();
- if( !r_world.name[0] && !( fd->rdflags & RDF_NOWORLDMODEL ) ) {
+ if( !gl_static.world.cache && !( fd->rdflags & RDF_NOWORLDMODEL ) ) {
Com_Error( ERR_FATAL, "GL_RenderView: NULL worldmodel" );
}
@@ -488,7 +489,7 @@ static void GL_RenderFrame( refdef_t *fd ) {
GL_ShowErrors( __func__ );
}
-static void GL_BeginFrame( void ) {
+void R_BeginFrame( void ) {
if( gl_log->integer ) {
QGL_LogNewFrame();
}
@@ -504,7 +505,7 @@ static void GL_BeginFrame( void ) {
GL_ShowErrors( __func__ );
}
-static void GL_EndFrame( void ) {
+void R_EndFrame( void ) {
if( gl_showstats->integer ) {
Draw_Stats();
}
@@ -517,7 +518,7 @@ static void GL_EndFrame( void ) {
GL_ShowErrors( __func__ );
- video.EndFrame();
+ VID_EndFrame();
// qglFinish();
}
@@ -530,11 +531,12 @@ static void GL_EndFrame( void ) {
==============================================================================
*/
+#if USE_TGA || USE_JPG || USE_PNG
static char *screenshot_path( char *buffer, const char *ext ) {
int i;
- if( cmd.Argc() > 1 ) {
- Com_sprintf( buffer, MAX_OSPATH, SCREENSHOTS_DIRECTORY"/%s", cmd.Argv( 1 ) );
+ if( Cmd_Argc() > 1 ) {
+ Com_sprintf( buffer, MAX_OSPATH, SCREENSHOTS_DIRECTORY"/%s", Cmd_Argv( 1 ) );
COM_AppendExtension( buffer, ext, MAX_OSPATH );
return buffer;
}
@@ -543,7 +545,7 @@ static char *screenshot_path( char *buffer, const char *ext ) {
//
for( i = 0; i < 1000; i++ ) {
Com_sprintf( buffer, MAX_OSPATH, SCREENSHOTS_DIRECTORY"/quake%03d%s", i, ext );
- if( fs.LoadFileEx( buffer, NULL, FS_PATH_GAME, TAG_FREE ) == INVALID_LENGTH ) {
+ if( FS_LoadFileEx( buffer, NULL, FS_PATH_GAME, TAG_FREE ) == INVALID_LENGTH ) {
return buffer; // file doesn't exist
}
}
@@ -551,6 +553,7 @@ static char *screenshot_path( char *buffer, const char *ext ) {
Com_Printf( "All screenshot slots are full.\n" );
return NULL;
}
+#endif
/*
@@ -559,12 +562,13 @@ GL_ScreenShot_f
==================
*/
static void GL_ScreenShot_f( void ) {
+#if USE_TGA
char buffer[MAX_OSPATH];
byte *bgr;
qboolean ret;
- if( cmd.Argc() > 2 ) {
- Com_Printf( "Usage: %s [name]\n", cmd.Argv( 0 ) );
+ if( Cmd_Argc() > 2 ) {
+ Com_Printf( "Usage: %s [name]\n", Cmd_Argv( 0 ) );
return;
}
@@ -572,29 +576,32 @@ static void GL_ScreenShot_f( void ) {
return;
}
- bgr = fs.AllocTempMem( gl_config.vidWidth * gl_config.vidHeight * 3 );
+ bgr = FS_AllocTempMem( gl_config.vidWidth * gl_config.vidHeight * 3 );
qglReadPixels( 0, 0, gl_config.vidWidth, gl_config.vidHeight, GL_BGR,
GL_UNSIGNED_BYTE, bgr );
- ret = Image_WriteTGA( buffer, bgr, gl_config.vidWidth, gl_config.vidHeight );
+ ret = IMG_WriteTGA( buffer, bgr, gl_config.vidWidth, gl_config.vidHeight );
- fs.FreeFile( bgr );
+ FS_FreeFile( bgr );
if( ret ) {
Com_Printf( "Wrote %s\n", buffer );
}
+#else
+ Com_Printf( "Couldn't create screenshot due to no TGA support linked in.\n" );
+#endif
}
-#if USE_JPEG
+#if USE_JPG
static void GL_ScreenShotJPG_f( void ) {
char buffer[MAX_OSPATH];
byte *rgb;
int quality;
qboolean ret;
- if( cmd.Argc() > 3 ) {
- Com_Printf( "Usage: %s [name] [quality]\n", cmd.Argv( 0 ) );
+ if( Cmd_Argc() > 3 ) {
+ Com_Printf( "Usage: %s [name] [quality]\n", Cmd_Argv( 0 ) );
return;
}
@@ -602,20 +609,20 @@ static void GL_ScreenShotJPG_f( void ) {
return;
}
- rgb = fs.AllocTempMem( gl_config.vidWidth * gl_config.vidHeight * 3 );
+ rgb = FS_AllocTempMem( gl_config.vidWidth * gl_config.vidHeight * 3 );
qglReadPixels( 0, 0, gl_config.vidWidth, gl_config.vidHeight, GL_RGB,
GL_UNSIGNED_BYTE, rgb );
- if( cmd.Argc() > 2 ) {
- quality = atoi( cmd.Argv( 2 ) );
+ if( Cmd_Argc() > 2 ) {
+ quality = atoi( Cmd_Argv( 2 ) );
} else {
quality = gl_screenshot_quality->integer;
}
- ret = Image_WriteJPG( buffer, rgb, gl_config.vidWidth, gl_config.vidHeight, quality );
+ ret = IMG_WriteJPG( buffer, rgb, gl_config.vidWidth, gl_config.vidHeight, quality );
- fs.FreeFile( rgb );
+ FS_FreeFile( rgb );
if( ret ) {
Com_Printf( "Wrote %s\n", buffer );
@@ -630,8 +637,8 @@ static void GL_ScreenShotPNG_f( void ) {
int compression;
qboolean ret;
- if( cmd.Argc() > 3 ) {
- Com_Printf( "Usage: %s [name] [compression]\n", cmd.Argv( 0 ) );
+ if( Cmd_Argc() > 3 ) {
+ Com_Printf( "Usage: %s [name] [compression]\n", Cmd_Argv( 0 ) );
return;
}
@@ -639,20 +646,20 @@ static void GL_ScreenShotPNG_f( void ) {
return;
}
- rgb = fs.AllocTempMem( gl_config.vidWidth * gl_config.vidHeight * 3 );
+ rgb = FS_AllocTempMem( gl_config.vidWidth * gl_config.vidHeight * 3 );
qglReadPixels( 0, 0, gl_config.vidWidth, gl_config.vidHeight, GL_RGB,
GL_UNSIGNED_BYTE, rgb );
- if( cmd.Argc() > 2 ) {
- compression = atoi( cmd.Argv( 2 ) );
+ if( Cmd_Argc() > 2 ) {
+ compression = atoi( Cmd_Argv( 2 ) );
} else {
compression = gl_screenshot_compression->integer;
}
- ret = Image_WritePNG( buffer, rgb, gl_config.vidWidth, gl_config.vidHeight, compression );
+ ret = IMG_WritePNG( buffer, rgb, gl_config.vidWidth, gl_config.vidHeight, compression );
- fs.FreeFile( rgb );
+ FS_FreeFile( rgb );
if( ret ) {
Com_Printf( "Wrote %s\n", buffer );
@@ -669,72 +676,63 @@ static void GL_Strings_f( void ) {
// ==============================================================================
-
-static void GL_ModeChanged( int width, int height, int flags,
- int rowbytes, void *pixels )
-{
- gl_config.vidWidth = width & ~7;
- gl_config.vidHeight = height & ~1;
- gl_config.flags = flags;
-}
-
static void GL_Register( void ) {
/* misc */
- gl_partscale = cvar.Get( "gl_partscale", "2", 0 );
-#if USE_JPEG
- gl_screenshot_quality = cvar.Get( "gl_screenshot_quality", "100", 0 );
+ gl_partscale = Cvar_Get( "gl_partscale", "2", 0 );
+#if USE_JPG
+ gl_screenshot_quality = Cvar_Get( "gl_screenshot_quality", "100", 0 );
#endif
#if USE_PNG
- gl_screenshot_compression = cvar.Get( "gl_screenshot_compression", "6", 0 );
+ gl_screenshot_compression = Cvar_Get( "gl_screenshot_compression", "6", 0 );
#endif
- gl_celshading = cvar.Get( "gl_celshading", "0", 0 );
- gl_modulate = cvar.Get( "gl_modulate", "1", CVAR_ARCHIVE );
- gl_hwgamma = cvar.Get( "vid_hwgamma", "0", CVAR_ARCHIVE|CVAR_REFRESH );
+ gl_celshading = Cvar_Get( "gl_celshading", "0", 0 );
+ gl_modulate = Cvar_Get( "gl_modulate", "1", CVAR_ARCHIVE );
+ gl_hwgamma = Cvar_Get( "vid_hwgamma", "0", CVAR_ARCHIVE|CVAR_REFRESH );
/* development variables */
- gl_znear = cvar.Get( "gl_znear", "2", CVAR_CHEAT );
- gl_zfar = cvar.Get( "gl_zfar", "16384", 0 );
- gl_log = cvar.Get( "gl_log", "0", 0 );
- gl_drawworld = cvar.Get( "gl_drawworld", "1", CVAR_CHEAT );
- gl_drawentities = cvar.Get( "gl_drawentities", "1", CVAR_CHEAT );
- gl_drawsky = cvar.Get( "gl_drawsky", "1", 0 );
- gl_showtris = cvar.Get( "gl_showtris", "0", CVAR_CHEAT );
- gl_showstats = cvar.Get( "gl_showstats", "0", 0 );
- gl_cull_nodes = cvar.Get( "gl_cull_nodes", "1", 0 );
- gl_cull_models = cvar.Get( "gl_cull_models", "1", 0 );
- gl_bind = cvar.Get( "gl_bind", "1", CVAR_CHEAT );
- gl_clear = cvar.Get( "gl_clear", "0", 0 );
- gl_novis = cvar.Get( "gl_novis", "0", 0 );
- gl_lockpvs = cvar.Get( "gl_lockpvs", "0", CVAR_CHEAT );
- gl_lightmap = cvar.Get( "gl_lightmap", "0", CVAR_CHEAT );
+ gl_znear = Cvar_Get( "gl_znear", "2", CVAR_CHEAT );
+ gl_zfar = Cvar_Get( "gl_zfar", "16384", 0 );
+ gl_log = Cvar_Get( "gl_log", "0", 0 );
+ gl_drawworld = Cvar_Get( "gl_drawworld", "1", CVAR_CHEAT );
+ gl_drawentities = Cvar_Get( "gl_drawentities", "1", CVAR_CHEAT );
+ gl_drawsky = Cvar_Get( "gl_drawsky", "1", 0 );
+ gl_showtris = Cvar_Get( "gl_showtris", "0", CVAR_CHEAT );
+ gl_showstats = Cvar_Get( "gl_showstats", "0", 0 );
+ gl_cull_nodes = Cvar_Get( "gl_cull_nodes", "1", 0 );
+ gl_cull_models = Cvar_Get( "gl_cull_models", "1", 0 );
+ gl_bind = Cvar_Get( "gl_bind", "1", CVAR_CHEAT );
+ gl_clear = Cvar_Get( "gl_clear", "0", 0 );
+ gl_novis = Cvar_Get( "gl_novis", "0", 0 );
+ gl_lockpvs = Cvar_Get( "gl_lockpvs", "0", CVAR_CHEAT );
+ gl_lightmap = Cvar_Get( "gl_lightmap", "0", CVAR_CHEAT );
#if USE_DYNAMIC
- gl_dynamic = cvar.Get( "gl_dynamic", "2", CVAR_ARCHIVE );
+ gl_dynamic = Cvar_Get( "gl_dynamic", "2", CVAR_ARCHIVE );
#endif
- gl_polyblend = cvar.Get( "gl_polyblend", "1", 0 );
- gl_fullbright = cvar.Get( "r_fullbright", "0", CVAR_CHEAT );
- gl_showerrors = cvar.Get( "gl_showerrors", "1", 0 );
- gl_fragment_program = cvar.Get( "gl_fragment_program", "0", CVAR_REFRESH );
- gl_vertex_buffer_object = cvar.Get( "gl_vertex_buffer_object", "0", CVAR_REFRESH );
+ gl_polyblend = Cvar_Get( "gl_polyblend", "1", 0 );
+ gl_fullbright = Cvar_Get( "r_fullbright", "0", CVAR_CHEAT );
+ gl_showerrors = Cvar_Get( "gl_showerrors", "1", 0 );
+ gl_fragment_program = Cvar_Get( "gl_fragment_program", "0", CVAR_REFRESH );
+ gl_vertex_buffer_object = Cvar_Get( "gl_vertex_buffer_object", "0", CVAR_REFRESH );
- cmd.AddCommand( "screenshot", GL_ScreenShot_f );
-#if USE_JPEG
- cmd.AddCommand( "screenshotjpg", GL_ScreenShotJPG_f );
+ Cmd_AddCommand( "screenshot", GL_ScreenShot_f );
+#if USE_JPG
+ Cmd_AddCommand( "screenshotjpg", GL_ScreenShotJPG_f );
#else
- cmd.AddCommand( "screenshotjpg", GL_ScreenShot_f );
+ Cmd_AddCommand( "screenshotjpg", GL_ScreenShot_f );
#endif
#if USE_PNG
- cmd.AddCommand( "screenshotpng", GL_ScreenShotPNG_f );
+ Cmd_AddCommand( "screenshotpng", GL_ScreenShotPNG_f );
#else
- cmd.AddCommand( "screenshotpng", GL_ScreenShot_f );
+ Cmd_AddCommand( "screenshotpng", GL_ScreenShot_f );
#endif
- cmd.AddCommand( "strings", GL_Strings_f );
+ Cmd_AddCommand( "strings", GL_Strings_f );
}
static void GL_Unregister( void ) {
- cmd.RemoveCommand( "screenshot" );
- cmd.RemoveCommand( "screenshotjpg" );
- cmd.RemoveCommand( "screenshotpng" );
- cmd.RemoveCommand( "strings" );
+ Cmd_RemoveCommand( "screenshot" );
+ Cmd_RemoveCommand( "screenshotjpg" );
+ Cmd_RemoveCommand( "screenshotpng" );
+ Cmd_RemoveCommand( "strings" );
}
#define GPA( x ) do { q ## x = ( void * )qglGetProcAddress( #x ); } while( 0 )
@@ -870,12 +868,21 @@ static void GL_IdentifyRenderer( void ) {
}
static void GL_PostInit( void ) {
+ registration_sequence = 1;
+
GL_InitImages();
- GL_InitModels();
+ MOD_Init();
GL_SetDefaultState();
}
-static qboolean GL_Init( qboolean total ) {
+// ==============================================================================
+
+/*
+===============
+R_Init
+===============
+*/
+qboolean R_Init( qboolean total ) {
Com_DPrintf( "GL_Init( %i )\n", total );
if( !total ) {
@@ -885,15 +892,15 @@ static qboolean GL_Init( qboolean total ) {
Com_Printf( "ref_gl " VERSION ", " __DATE__ "\n" );
- /* initialize OS-specific parts of OpenGL */
- /* create the window and set up the context */
- if( !video.Init() ) {
+ // initialize OS-specific parts of OpenGL
+ // create the window and set up the context
+ if( !VID_Init() ) {
return qfalse;
}
GL_Register();
- /* initialize our QGL dynamic bindings */
+ // initialize our QGL dynamic bindings
QGL_Init();
#define GET_STRING( x ) ( const char * )qglGetString( x )
@@ -914,7 +921,7 @@ static qboolean GL_Init( qboolean total ) {
}
if( gl_hwgamma->integer && !( gl_config.flags & QVF_GAMMARAMP ) ) {
- cvar.Set( "vid_hwgamma", "0" );
+ Cvar_Set( "vid_hwgamma", "0" );
Com_Printf( "Hardware gamma is not supported by this video driver\n" );
}
@@ -938,33 +945,21 @@ static qboolean GL_Init( qboolean total ) {
fail:
QGL_Shutdown();
GL_Unregister();
- video.Shutdown();
+ VID_Shutdown();
return qfalse;
}
-static void GL_FreeWorld( void ) {
- GLuint buf = 1;
-
- Bsp_FreeWorld();
-
- if( !gl_static.vertices && qglDeleteBuffersARB ) {
- qglDeleteBuffersARB( 1, &buf );
- }
-
- gl_static.vertices = NULL;
-}
-
/*
===============
R_Shutdown
===============
*/
-void GL_Shutdown( qboolean total ) {
+void R_Shutdown( qboolean total ) {
Com_DPrintf( "GL_Shutdown( %i )\n", total );
GL_FreeWorld();
GL_ShutdownImages();
- GL_ShutdownModels();
+ MOD_Shutdown();
if( !total ) {
return;
@@ -972,14 +967,10 @@ void GL_Shutdown( qboolean total ) {
GL_ShutdownPrograms();
- /*
- ** shut down OS specific OpenGL stuff like contexts, etc.
- */
- video.Shutdown();
+ // shut down OS specific OpenGL stuff like contexts, etc.
+ VID_Shutdown();
- /*
- ** shutdown our QGL subsystem
- */
+ // shutdown our QGL subsystem
QGL_Shutdown();
GL_Unregister();
@@ -988,11 +979,13 @@ void GL_Shutdown( qboolean total ) {
memset( &gl_config, 0, sizeof( gl_config ) );
}
-void GL_BeginRegistration( const char *name ) {
+/*
+===============
+R_BeginRegistration
+===============
+*/
+void R_BeginRegistration( const char *name ) {
char fullname[MAX_QPATH];
- bspTexinfo_t *texinfo, *lastexinfo;
- bspLeaf_t *leaf, *lastleaf;
- bspNode_t *node, *lastnode;
gl_static.registering = qtrue;
registration_sequence++;
@@ -1001,225 +994,38 @@ void GL_BeginRegistration( const char *name ) {
glr.viewcluster1 = glr.viewcluster2 = -2;
Q_concat( fullname, sizeof( fullname ), "maps/", name, ".bsp", NULL );
-
- // check if the required world model was already loaded
- if( !strcmp( r_world.name, fullname ) &&
- !cvar.VariableInteger( "flushmap" ) )
- {
- lastexinfo = r_world.texinfos + r_world.numTexinfos;
- for( texinfo = r_world.texinfos; texinfo < lastexinfo; texinfo++ ) {
- texinfo->image->registration_sequence = registration_sequence;
- }
- lastleaf = r_world.leafs + r_world.numLeafs;
- for( leaf = r_world.leafs; leaf < lastleaf; leaf++ ) {
- leaf->visframe = 0;
- }
- lastnode = r_world.nodes + r_world.numNodes;
- for( node = r_world.nodes; node < lastnode; node++ ) {
- node->visframe = 0;
- }
- Com_DPrintf( "%s: reused old world model\n", __func__ );
- return;
- }
-
- // free previous model, if any
- GL_FreeWorld();
-
- // load fresh world model
- Bsp_LoadWorld( fullname );
-}
-
-void GL_EndRegistration( void ) {
- R_FreeUnusedImages();
- Model_FreeUnused();
- Scrap_Upload();
- gl_static.registering = qfalse;
+ GL_LoadWorld( fullname );
}
-void GL_SetPalette( const byte *pal ) {
- int i;
-
- if( pal == NULL ) {
- for( i = 0; i < 256; i++ ) {
- gl_static.palette[i] = d_8to24table[i];
- }
- return;
- }
-
- for( i = 0; i < 256; i++ ) {
- gl_static.palette[i] = MakeColor( pal[0], pal[1], pal[2], 255 );
- pal += 3;
- }
-}
-
-void GL_GetConfig( glconfig_t *config ) {
- *config = gl_config;
-}
-
-#ifndef REF_HARD_LINKED
-// this is only here so the functions in q_shared.c can link
-
-void Com_Printf( const char *fmt, ... ) {
- va_list argptr;
- char text[MAXPRINTMSG];
-
- va_start( argptr, fmt );
- Q_vsnprintf( text, sizeof( text ), fmt, argptr );
- va_end( argptr );
-
- com.Print( PRINT_ALL, text );
-}
-
-void Com_DPrintf( const char *fmt, ... ) {
- va_list argptr;
- char text[MAXPRINTMSG];
-
- va_start( argptr, fmt );
- Q_vsnprintf( text, sizeof( text ), fmt, argptr );
- va_end( argptr );
-
- com.Print( PRINT_DEVELOPER, text );
-}
-
-void Com_WPrintf( const char *fmt, ... ) {
- va_list argptr;
- char text[MAXPRINTMSG];
-
- va_start( argptr, fmt );
- Q_vsnprintf( text, sizeof( text ), fmt, argptr );
- va_end( argptr );
-
- com.Print( PRINT_WARNING, text );
-}
-
-void Com_EPrintf( const char *fmt, ... ) {
- va_list argptr;
- char text[MAXPRINTMSG];
-
- va_start( argptr, fmt );
- Q_vsnprintf( text, sizeof( text ), fmt, argptr );
- va_end( argptr );
-
- com.Print( PRINT_ERROR, text );
-}
-
-void Com_Error( comErrorType_t type, const char *error, ... ) {
- va_list argptr;
- char text[MAXPRINTMSG];
-
- va_start( argptr, error );
- Q_vsnprintf( text, sizeof( text ), error, argptr );
- va_end( argptr );
-
- com.Error( type, text );
-}
-
-#endif /* !REF_HARD_LINKED */
-
/*
-=================
-Ref_FillAPI
-=================
+===============
+R_EndRegistration
+===============
*/
-static void Ref_FillAPI( refAPI_t *api ) {
- api->BeginRegistration = GL_BeginRegistration;
- api->RegisterModel = GL_RegisterModel;
- api->RegisterSkin = R_RegisterSkin;
- api->RegisterPic = R_RegisterPic;
- api->RegisterFont = GL_RegisterFont;
- api->SetSky = R_SetSky;
- api->EndRegistration = GL_EndRegistration;
- api->GetModelSize = GL_GetModelSize;
-
- api->RenderFrame = GL_RenderFrame;
- api->LightPoint = GL_LightPoint;
-
- api->SetColor = Draw_SetColor;
- api->SetClipRect = Draw_SetClipRect;
- api->SetScale = Draw_SetScale;
- api->DrawString = Draw_String;
- api->DrawChar = Draw_Char;
- api->DrawGetPicSize = Draw_GetPicSize;
- api->DrawPic = Draw_Pic;
- api->DrawStretchPicST = Draw_StretchPicST;
- api->DrawStretchPic = Draw_StretchPic;
- api->DrawTileClear = Draw_TileClear;
- api->DrawFill = Draw_Fill;
- api->DrawStretchRaw = Draw_StretchRaw;
- api->DrawFillEx = Draw_FillEx;
-
- api->Init = GL_Init;
- api->Shutdown = GL_Shutdown;
-
- api->CinematicSetPalette = GL_SetPalette;
- api->BeginFrame = GL_BeginFrame;
- api->EndFrame = GL_EndFrame;
- api->ModeChanged = GL_ModeChanged;
-
- api->GetConfig = GL_GetConfig;
+void R_EndRegistration( void ) {
+ IMG_FreeUnused();
+ MOD_FreeUnused();
+ Scrap_Upload();
+ gl_static.registering = qfalse;
}
/*
-=================
-Ref_APISetupCallback
-=================
+===============
+R_ModeChanged
+===============
*/
-qboolean Ref_APISetupCallback( api_type_t type, void *api ) {
- switch( type ) {
- case API_REFRESH:
- Ref_FillAPI( ( refAPI_t * )api );
- break;
- default:
- return qfalse;
- }
-
- return qtrue;
+void R_ModeChanged( int width, int height, int flags, int rowbytes, void *pixels ) {
+ gl_config.vidWidth = width & ~7;
+ gl_config.vidHeight = height & ~1;
+ gl_config.flags = flags;
}
-#ifndef REF_HARD_LINKED
-
/*
-@@@@@@@@@@@@@@@@@@@@@
-moduleEntry
-
-@@@@@@@@@@@@@@@@@@@@@
+===============
+R_GetConfig
+===============
*/
-EXPORTED void *moduleEntry( int query, void *data ) {
- moduleInfo_t *info;
- moduleCapability_t caps;
- APISetupCallback_t callback;
-
- switch( query ) {
- case MQ_GETINFO:
- info = ( moduleInfo_t * )data;
- info->api_version = MODULES_APIVERSION;
- Q_strncpyz( info->fullname, "OpenGL Refresh Driver",
- sizeof( info->fullname ) );
- Q_strncpyz( info->author, "Andrey Nazarov", sizeof( info->author ) );
- return ( void * )qtrue;
-
- case MQ_GETCAPS:
- caps = MCP_REFRESH;
- return ( void * )caps;
-
- case MQ_SETUPAPI:
- if( ( callback = ( APISetupCallback_t )data ) == NULL ) {
- return NULL;
- }
- callback( API_CMD, &cmd );
- callback( API_CVAR, &cvar );
- callback( API_FS, &fs );
- callback( API_COMMON, &com );
- callback( API_SYSTEM, &sys );
- callback( API_VIDEO_OPENGL, &video );
-
- return ( void * )Ref_APISetupCallback;
-
- }
-
- /* quiet compiler warning */
- return NULL;
+void R_GetConfig( glconfig_t *config ) {
+ *config = gl_config;
}
-#endif /* !REF_HARD_LINKED */
-