summaryrefslogtreecommitdiff
path: root/source/gl_main.c
diff options
context:
space:
mode:
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 */
-