Index: code/sdl/sdl_input.c =================================================================== --- code/sdl/sdl_input.c (Revision 1895) +++ code/sdl/sdl_input.c (Arbeitskopie) @@ -465,7 +465,7 @@ } // in_nograb makes no sense in fullscreen mode - if( !r_fullscreen->integer ) + if( !Cvar_VariableIntegerValue("r_fullscreen") ) { if( in_nograb->modified || !mouseActive ) { @@ -493,7 +493,7 @@ // Always show the cursor when the mouse is disabled, // but not when fullscreen - if( !r_fullscreen->integer ) + if( !Cvar_VariableIntegerValue("r_fullscreen") ) SDL_ShowCursor( 1 ); if( !mouseAvailable ) @@ -526,7 +526,7 @@ // Don't warp the mouse unless the cursor is within the window if( SDL_GetAppState( ) & SDL_APPMOUSEFOCUS ) - SDL_WarpMouse( glConfig.vidWidth / 2, glConfig.vidHeight / 2 ); + SDL_WarpMouse( cls.glconfig.vidWidth / 2, cls.glconfig.vidHeight / 2 ); mouseActive = qfalse; } @@ -908,9 +908,9 @@ char width[32], height[32]; Com_sprintf( width, sizeof(width), "%d", e.resize.w ); Com_sprintf( height, sizeof(height), "%d", e.resize.h ); - ri.Cvar_Set( "r_customwidth", width ); - ri.Cvar_Set( "r_customheight", height ); - ri.Cvar_Set( "r_mode", "-1" ); + Cvar_Set( "r_customwidth", width ); + Cvar_Set( "r_customheight", height ); + Cvar_Set( "r_mode", "-1" ); /* wait until user stops dragging for 1 second, so we aren't constantly recreating the GL context while he tries to drag...*/ @@ -947,12 +947,12 @@ // If not DISCONNECTED (main menu) or ACTIVE (in game), we're loading loading = !!( cls.state != CA_DISCONNECTED && cls.state != CA_ACTIVE ); - if( !r_fullscreen->integer && ( Key_GetCatcher( ) & KEYCATCH_CONSOLE ) ) + if( !Cvar_VariableIntegerValue("r_fullscreen") && ( Key_GetCatcher( ) & KEYCATCH_CONSOLE ) ) { // Console is down in windowed mode IN_DeactivateMouse( ); } - else if( !r_fullscreen->integer && loading ) + else if( !Cvar_VariableIntegerValue("r_fullscreen") && loading ) { // Loading in windowed mode IN_DeactivateMouse( ); Index: code/sdl/sdl_gamma.c =================================================================== --- code/sdl/sdl_gamma.c (Revision 1895) +++ code/sdl/sdl_gamma.c (Arbeitskopie) @@ -60,7 +60,7 @@ GetVersionEx( &vinfo ); if( vinfo.dwMajorVersion >= 5 && vinfo.dwPlatformId == VER_PLATFORM_WIN32_NT ) { - Com_DPrintf( "performing gamma clamp.\n" ); + ri.Printf( PRINT_DEVELOPER, "performing gamma clamp.\n" ); for( j = 0 ; j < 3 ; j++ ) { for( i = 0 ; i < 128 ; i++ ) Index: code/sdl/sdl_glimp.c =================================================================== --- code/sdl/sdl_glimp.c (Revision 1895) +++ code/sdl/sdl_glimp.c (Arbeitskopie) @@ -90,7 +90,7 @@ */ void GLimp_Shutdown( void ) { - IN_Shutdown(); + ri.IN_Shutdown(); SDL_QuitSubSystem( SDL_INIT_VIDEO ); screen = NULL; @@ -464,10 +464,10 @@ SDL_VideoDriverName( driverName, sizeof( driverName ) - 1 ); ri.Printf( PRINT_ALL, "SDL using driver \"%s\"\n", driverName ); - Cvar_Set( "r_sdlDriver", driverName ); + ri.Cvar_Set( "r_sdlDriver", driverName ); } - if (fullscreen && Cvar_VariableIntegerValue( "in_nograb" ) ) + if (fullscreen && ri.Cvar_VariableIntegerValue( "in_nograb" ) ) { ri.Printf( PRINT_ALL, "Fullscreen not allowed with in_nograb 1\n"); ri.Cvar_Set( "r_fullscreen", "0" ); @@ -686,7 +686,7 @@ r_allowResize = ri.Cvar_Get( "r_allowResize", "0", CVAR_ARCHIVE ); r_centerWindow = ri.Cvar_Get( "r_centerWindow", "0", CVAR_ARCHIVE ); - if( Cvar_VariableIntegerValue( "com_abnormalExit" ) ) + if( ri.Cvar_VariableIntegerValue( "com_abnormalExit" ) ) { ri.Cvar_Set( "r_mode", va( "%d", R_MODE_FALLBACK ) ); ri.Cvar_Set( "r_fullscreen", "0" ); @@ -694,16 +694,16 @@ ri.Cvar_Set( "com_abnormalExit", "0" ); } - Sys_SetEnv( "SDL_VIDEO_CENTERED", r_centerWindow->integer ? "1" : "" ); + ri.Sys_SetEnv( "SDL_VIDEO_CENTERED", r_centerWindow->integer ? "1" : "" ); - Sys_GLimpInit( ); + ri.Sys_GLimpInit( ); // Create the window and set up the context if(GLimp_StartDriverAndSetMode(r_mode->integer, r_fullscreen->integer, r_noborder->integer)) goto success; // Try again, this time in a platform specific "safe mode" - Sys_GLimpSafeInit( ); + ri.Sys_GLimpSafeInit( ); if(GLimp_StartDriverAndSetMode(r_mode->integer, r_fullscreen->integer, qfalse)) goto success; @@ -747,7 +747,7 @@ ri.Cvar_Get( "r_availableModes", "", CVAR_ROM ); // This depends on SDL_INIT_VIDEO, hence having it here - IN_Init( ); + ri.IN_Init( ); } @@ -778,7 +778,7 @@ // Find out the current state fullscreen = !!( s->flags & SDL_FULLSCREEN ); - if( r_fullscreen->integer && Cvar_VariableIntegerValue( "in_nograb" ) ) + if( r_fullscreen->integer && ri.Cvar_VariableIntegerValue( "in_nograb" ) ) { ri.Printf( PRINT_ALL, "Fullscreen not allowed with in_nograb 1\n"); ri.Cvar_Set( "r_fullscreen", "0" ); @@ -796,9 +796,9 @@ { // SDL_WM_ToggleFullScreen didn't work, so do it the slow way if( !sdlToggled ) - Cbuf_AddText( "vid_restart" ); + ri.Cmd_ExecuteText(EXEC_APPEND, "vid_restart"); - IN_Restart( ); + ri.IN_Restart( ); } r_fullscreen->modified = qfalse; Index: code/renderer/tr_local.h =================================================================== --- code/renderer/tr_local.h (Revision 1895) +++ code/renderer/tr_local.h (Arbeitskopie) @@ -1276,6 +1276,7 @@ void GLimp_WakeRenderer( void *data ); void GLimp_LogComment( char *comment ); +void GLimp_Minimize(void); // NOTE TTimo linux works with float gamma value, not the gamma table // the params won't be used, getting the r_gamma cvar directly Index: code/renderer/tr_model.c =================================================================== --- code/renderer/tr_model.c (Revision 1895) +++ code/renderer/tr_model.c (Arbeitskopie) @@ -100,7 +100,7 @@ } if ( strlen( name ) >= MAX_QPATH ) { - Com_Printf( "Model name exceeds MAX_QPATH\n" ); + ri.Printf( PRINT_ALL, "Model name exceeds MAX_QPATH\n" ); return 0; } @@ -1146,3 +1146,4 @@ VectorCopy( frame->bounds[1], maxs ); } + Index: code/renderer/tr_init.c =================================================================== --- code/renderer/tr_init.c (Revision 1895) +++ code/renderer/tr_init.c (Arbeitskopie) @@ -911,7 +911,7 @@ r_ignorehwgamma = ri.Cvar_Get( "r_ignorehwgamma", "0", CVAR_ARCHIVE | CVAR_LATCH); r_mode = ri.Cvar_Get( "r_mode", "3", CVAR_ARCHIVE | CVAR_LATCH ); r_fullscreen = ri.Cvar_Get( "r_fullscreen", "1", CVAR_ARCHIVE ); - r_noborder = Cvar_Get("r_noborder", "0", CVAR_ARCHIVE); + r_noborder = ri.Cvar_Get("r_noborder", "0", CVAR_ARCHIVE); r_customwidth = ri.Cvar_Get( "r_customwidth", "1600", CVAR_ARCHIVE | CVAR_LATCH ); r_customheight = ri.Cvar_Get( "r_customheight", "1024", CVAR_ARCHIVE | CVAR_LATCH ); r_customPixelAspect = ri.Cvar_Get( "r_customPixelAspect", "1", CVAR_ARCHIVE | CVAR_LATCH ); @@ -1031,6 +1031,7 @@ ri.Cmd_AddCommand( "screenshot", R_ScreenShot_f ); ri.Cmd_AddCommand( "screenshotJPEG", R_ScreenShotJPEG_f ); ri.Cmd_AddCommand( "gfxinfo", GfxInfo_f ); + ri.Cmd_AddCommand( "minimize", GLimp_Minimize ); } /* @@ -1058,7 +1059,7 @@ // Swap_Init(); if ( (intptr_t)tess.xyz & 15 ) { - Com_Printf( "WARNING: tess.xyz not 16 byte aligned\n" ); + ri.Printf( PRINT_WARNING, "tess.xyz not 16 byte aligned\n" ); } Com_Memset( tess.constantColor255, 255, sizeof( tess.constantColor255 ) ); @@ -1183,7 +1184,7 @@ */ void RE_EndRegistration( void ) { R_SyncRenderThread(); - if (!Sys_LowPhysicalMemory()) { + if (!ri.Sys_LowPhysicalMemory()) { RB_ShowImages(); } } @@ -1195,7 +1196,7 @@ @@@@@@@@@@@@@@@@@@@@@ */ -refexport_t *GetRefAPI ( int apiVersion, refimport_t *rimp ) { +DLLEXPORT refexport_t * QDECL GetRefAPI ( int apiVersion, refimport_t *rimp ) { static refexport_t re; ri = *rimp; Index: code/renderer/tr_scene.c =================================================================== --- code/renderer/tr_scene.c (Revision 1895) +++ code/renderer/tr_scene.c (Arbeitskopie) @@ -215,7 +215,7 @@ static qboolean firstTime = qtrue; if (firstTime) { firstTime = qfalse; - Com_DPrintf(S_COLOR_YELLOW "WARNING: RE_AddRefEntityToScene passed a refEntity which has an origin with a NaN component\n"); + ri.Printf( PRINT_WARNING, "RE_AddRefEntityToScene passed a refEntity which has an origin with a NaN component\n"); } return; } Index: code/renderer/tr_shader.c =================================================================== --- code/renderer/tr_shader.c (Revision 1895) +++ code/renderer/tr_shader.c (Arbeitskopie) @@ -2700,7 +2700,7 @@ shader_t *sh; if ( strlen( name ) >= MAX_QPATH ) { - Com_Printf( "Shader name exceeds MAX_QPATH\n" ); + ri.Printf( PRINT_ALL, "Shader name exceeds MAX_QPATH\n" ); return 0; } @@ -2734,7 +2734,7 @@ shader_t *sh; if ( strlen( name ) >= MAX_QPATH ) { - Com_Printf( "Shader name exceeds MAX_QPATH\n" ); + ri.Printf( PRINT_ALL, "Shader name exceeds MAX_QPATH\n" ); return 0; } @@ -2764,7 +2764,7 @@ shader_t *sh; if ( strlen( name ) >= MAX_QPATH ) { - Com_Printf( "Shader name exceeds MAX_QPATH\n" ); + ri.Printf( PRINT_ALL, "Shader name exceeds MAX_QPATH\n" ); return 0; } Index: code/renderer/tr_subs.c =================================================================== --- code/renderer/tr_subs.c (Revision 0) +++ code/renderer/tr_subs.c (Revision 0) @@ -0,0 +1,47 @@ +/* +=========================================================================== +Copyright (C) 1999-2005 Id Software, Inc. + +This file is part of Quake III Arena source code. + +Quake III Arena source code is free software; you can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation; either version 2 of the License, +or (at your option) any later version. + +Quake III Arena source code is distributed in the hope that it will be +useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Quake III Arena source code; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +=========================================================================== +*/ + +#include "tr_local.h" + +void QDECL Com_Printf( const char *msg, ... ) +{ + va_list argptr; + char text[1024]; + + va_start(argptr, msg); + Q_vsnprintf(text, sizeof(text), msg, argptr); + va_end(argptr); + + ri.Printf(PRINT_ALL, "%s", text); +} + +void QDECL Com_Error( int level, const char *error, ... ) +{ + va_list argptr; + char text[1024]; + + va_start(argptr, error); + Q_vsnprintf(text, sizeof(text), error, argptr); + va_end(argptr); + + ri.Error(level, "%s", text); +} Index: code/renderer/tr_image.c =================================================================== --- code/renderer/tr_image.c (Revision 1895) +++ code/renderer/tr_image.c (Arbeitskopie) @@ -1432,7 +1432,7 @@ if (len == MAX_TOKEN_CHARS) { -// Com_Printf ("Token exceeded %i chars, discarded.\n", MAX_TOKEN_CHARS); +// ri.Printf (PRINT_DEVELOPER, "Token exceeded %i chars, discarded.\n", MAX_TOKEN_CHARS); len = 0; } com_token[len] = 0; @@ -1461,12 +1461,12 @@ char surfName[MAX_QPATH]; if ( !name || !name[0] ) { - Com_Printf( "Empty name passed to RE_RegisterSkin\n" ); + ri.Printf( PRINT_DEVELOPER, "Empty name passed to RE_RegisterSkin\n" ); return 0; } if ( strlen( name ) >= MAX_QPATH ) { - Com_Printf( "Skin name exceeds MAX_QPATH\n" ); + ri.Printf( PRINT_DEVELOPER, "Skin name exceeds MAX_QPATH\n" ); return 0; } Index: code/renderer/tr_public.h =================================================================== --- code/renderer/tr_public.h (Revision 1895) +++ code/renderer/tr_public.h (Arbeitskopie) @@ -131,8 +131,11 @@ cvar_t *(*Cvar_Get)( const char *name, const char *value, int flags ); void (*Cvar_Set)( const char *name, const char *value ); + void (*Cvar_SetValue) (const char *name, float value); void (*Cvar_CheckRange)( cvar_t *cv, float minVal, float maxVal, qboolean shouldBeIntegral ); + int (*Cvar_VariableIntegerValue) (const char *var_name); + void (*Cmd_AddCommand)( const char *name, void(*cmd)(void) ); void (*Cmd_RemoveCommand)( const char *name ); @@ -141,6 +144,8 @@ void (*Cmd_ExecuteText) (int exec_when, const char *text); + byte *(*CM_ClusterPVS)(int cluster); + // visualization for debugging collision detection void (*CM_DrawDebugSurface)( void (*drawPoly)(int color, int numPoints, float *points) ); @@ -160,12 +165,23 @@ e_status (*CIN_RunCinematic) (int handle); void (*CL_WriteAVIVideoFrame)( const byte *buffer, int size ); + + // input event handling + void (*IN_Init)( void ); + void (*IN_Shutdown)( void ); + void (*IN_Restart)( void ); + + // system stuff + void (*Sys_SetEnv)( const char *name, const char *value ); + void (*Sys_GLimpSafeInit)( void ); + void (*Sys_GLimpInit)( void ); + qboolean (*Sys_LowPhysicalMemory)( void ); } refimport_t; // this is the only function actually exported at the linker level // If the module can't init to a valid rendering state, NULL will be // returned. -refexport_t*GetRefAPI( int apiVersion, refimport_t *rimp ); +typedef refexport_t* (QDECL *GetRefAPI_t) (int apiVersion, refimport_t * rimp); #endif // __TR_PUBLIC_H Index: code/renderer/tr_image_png.c =================================================================== --- code/renderer/tr_image_png.c (Revision 1895) +++ code/renderer/tr_image_png.c (Arbeitskopie) @@ -2065,7 +2065,7 @@ { CloseBufferedFile(ThePNG); - Com_Printf(S_COLOR_YELLOW "%s: invalid image size\n", name); + ri.Printf( PRINT_WARNING, "%s: invalid image size\n", name ); return; } Index: code/renderer/tr_world.c =================================================================== --- code/renderer/tr_world.c (Revision 1895) +++ code/renderer/tr_world.c (Arbeitskopie) @@ -547,7 +547,7 @@ byte *vis; leaf = R_PointInLeaf( p1 ); - vis = CM_ClusterPVS( leaf->cluster ); + vis = ri.CM_ClusterPVS( leaf->cluster ); // why not R_ClusterPVS ?? leaf = R_PointInLeaf( p2 ); if ( !(vis[leaf->cluster>>3] & (1<<(leaf->cluster&7))) ) { Index: code/qcommon/q_platform.h =================================================================== --- code/qcommon/q_platform.h (Revision 1895) +++ code/qcommon/q_platform.h (Arbeitskopie) @@ -79,6 +79,9 @@ #undef QDECL #define QDECL __cdecl +#undef DLLEXPORT +#define DLLEXPORT __declspec(dllexport) + #if defined( _MSC_VER ) #define OS_STRING "win_msvc64" #elif defined __MINGW64__ @@ -103,6 +106,9 @@ #undef QDECL #define QDECL __cdecl +#undef DLLEXPORT +#define DLLEXPORT __declspec(dllexport) + #if defined( _MSC_VER ) #define OS_STRING "win_msvc" #elif defined __MINGW32__ @@ -122,6 +128,12 @@ #define DLL_EXT ".dll" +#else +# if __GNUC__ >= 4 +# define DLLEXPORT __attribute__((visibility("default"))) +# else +# define DLLEXPORT +# endif #endif //============================================================== MAC OS X === Index: code/qcommon/q_math.c =================================================================== --- code/qcommon/q_math.c (Revision 1895) +++ code/qcommon/q_math.c (Arbeitskopie) @@ -1007,3 +1007,34 @@ return (int)( (unsigned int)fi.ui >> 31 ); } +//------------------------------------------------------------------------ + +#ifndef Q3_VM +/* +===================== +Q_acos + +the msvc acos doesn't always return a value between -PI and PI: + +int i; +i = 1065353246; +acos(*(float*) &i) == -1.#IND0 + + This should go in q_math but it is too late to add new traps + to game and ui +===================== +*/ +float Q_acos(float c) { + float angle; + + angle = acos(c); + + if (angle > M_PI) { + return (float)M_PI; + } + if (angle < -M_PI) { + return (float)M_PI; + } + return angle; +} +#endif Index: code/qcommon/common.c =================================================================== --- code/qcommon/common.c (Revision 1895) +++ code/qcommon/common.c (Arbeitskopie) @@ -3118,38 +3118,7 @@ } -//------------------------------------------------------------------------ - - /* -===================== -Q_acos - -the msvc acos doesn't always return a value between -PI and PI: - -int i; -i = 1065353246; -acos(*(float*) &i) == -1.#IND0 - - This should go in q_math but it is too late to add new traps - to game and ui -===================== -*/ -float Q_acos(float c) { - float angle; - - angle = acos(c); - - if (angle > M_PI) { - return (float)M_PI; - } - if (angle < -M_PI) { - return (float)M_PI; - } - return angle; -} - -/* =========================================== command line completion =========================================== Index: code/client/cl_scrn.c =================================================================== --- code/client/cl_scrn.c (Revision 1895) +++ code/client/cl_scrn.c (Arbeitskopie) @@ -576,9 +576,9 @@ if( uivm || com_dedicated->integer ) { // XXX - extern cvar_t* r_anaglyphMode; + int in_anaglyphMode = Cvar_VariableIntegerValue("r_anaglyphMode"); // if running in stereo, we need to draw the frame twice - if ( cls.glconfig.stereoEnabled || r_anaglyphMode->integer) { + if ( cls.glconfig.stereoEnabled || in_anaglyphMode) { SCR_DrawScreenField( STEREO_LEFT ); SCR_DrawScreenField( STEREO_RIGHT ); } else { @@ -595,3 +595,4 @@ recursive = 0; } + Index: code/client/cl_cin.c =================================================================== --- code/client/cl_cin.c (Revision 1895) +++ code/client/cl_cin.c (Arbeitskopie) @@ -52,9 +52,7 @@ #define MAX_VIDEO_HANDLES 16 -extern glconfig_t glConfig; - static void RoQ_init( void ); /****************************************************************************** @@ -995,7 +993,7 @@ cinTable[currentHandle].drawY = cinTable[currentHandle].CIN_HEIGHT; // rage pro is very slow at 512 wide textures, voodoo can't do it at all - if ( glConfig.hardwareType == GLHW_RAGEPRO || glConfig.maxTextureSize <= 256) { + if ( cls.glconfig.hardwareType == GLHW_RAGEPRO || cls.glconfig.maxTextureSize <= 256) { if (cinTable[currentHandle].drawX>256) { cinTable[currentHandle].drawX = 256; } Index: code/client/cl_main.c =================================================================== --- code/client/cl_main.c (Revision 1895) +++ code/client/cl_main.c (Arbeitskopie) @@ -24,6 +24,9 @@ #include "client.h" #include +#include "../sys/sys_local.h" +#include "../sys/sys_loadlib.h" + #ifdef USE_MUMBLE #include "libmumblelink.h" #endif @@ -44,6 +47,8 @@ cvar_t *cl_voip; #endif +cvar_t *cl_ref; + cvar_t *cl_nodelta; cvar_t *cl_debugMove; @@ -109,6 +114,7 @@ // Structure containing functions exported from refresh DLL refexport_t re; +static void *rendererLib = NULL; ping_t cl_pinglist[MAX_PINGREQUESTS]; @@ -129,7 +135,6 @@ void hA3Dg_ExportRenderGeom (refexport_t *incoming_re); #endif -extern void GLimp_Minimize(void); extern void SV_BotFrame( int time ); void CL_CheckForResend( void ); void CL_ShowIP_f(void); @@ -2890,9 +2895,43 @@ void CL_InitRef( void ) { refimport_t ri; refexport_t *ret; + GetRefAPI_t GetRefAPI; + char dllName[MAX_OSPATH]; Com_Printf( "----- Initializing Renderer ----\n" ); + cl_ref = Cvar_Get("cl_ref", "gl1.2", CVAR_ARCHIVE | CVAR_LATCH); + + Q_snprintf(dllName, sizeof(dllName), "ref_%s" ARCH_STRING DLL_EXT, cl_ref->string); + + Com_Printf("Loading \"%s\"...", dllName); + if((rendererLib = Sys_LoadLibrary(dllName)) == 0) + { +#ifdef _WIN32 + Com_Printf("failed:\n\"%s\"\n", Sys_LibraryError()); +#else + char fn[1024]; + + Q_strncpyz(fn, Sys_Cwd(), sizeof(fn)); + strncat(fn, "/", sizeof(fn) - strlen(fn) - 1); + strncat(fn, dllName, sizeof(fn) - strlen(fn) - 1); + + Com_Printf("Loading \"%s\"...", fn); + if((rendererLib = Sys_LoadLibrary(fn)) == 0) + { + Com_Error(ERR_FATAL, "failed:\n\"%s\"", Sys_LibraryError()); + } +#endif /* _WIN32 */ + } + + Com_Printf("done\n"); + + GetRefAPI = Sys_LoadFunction(rendererLib, "GetRefAPI"); + if(!GetRefAPI) + { + Com_Error(ERR_FATAL, "Can't load symbol GetRefAPI: '%s'", Sys_LibraryError()); + } + ri.Cmd_AddCommand = Cmd_AddCommand; ri.Cmd_RemoveCommand = Cmd_RemoveCommand; ri.Cmd_Argc = Cmd_Argc; @@ -2910,7 +2949,10 @@ #endif ri.Hunk_AllocateTempMemory = Hunk_AllocateTempMemory; ri.Hunk_FreeTempMemory = Hunk_FreeTempMemory; + + ri.CM_ClusterPVS = CM_ClusterPVS; ri.CM_DrawDebugSurface = CM_DrawDebugSurface; + ri.FS_ReadFile = FS_ReadFile; ri.FS_FreeFile = FS_FreeFile; ri.FS_WriteFile = FS_WriteFile; @@ -2920,7 +2962,9 @@ ri.FS_FileExists = FS_FileExists; ri.Cvar_Get = Cvar_Get; ri.Cvar_Set = Cvar_Set; + ri.Cvar_SetValue = Cvar_SetValue; ri.Cvar_CheckRange = Cvar_CheckRange; + ri.Cvar_VariableIntegerValue = Cvar_VariableIntegerValue; // cinematic stuff @@ -2930,6 +2974,15 @@ ri.CL_WriteAVIVideoFrame = CL_WriteAVIVideoFrame; + ri.IN_Init = IN_Init; + ri.IN_Shutdown = IN_Shutdown; + ri.IN_Restart = IN_Restart; + + ri.Sys_SetEnv = Sys_SetEnv; + ri.Sys_GLimpSafeInit = Sys_GLimpSafeInit; + ri.Sys_GLimpInit = Sys_GLimpInit; + ri.Sys_LowPhysicalMemory = Sys_LowPhysicalMemory; + ret = GetRefAPI( REF_API_VERSION, &ri ); #if defined __USEA3D && defined __A3D_GEOM @@ -3272,7 +3325,6 @@ Cmd_AddCommand ("model", CL_SetModel_f ); Cmd_AddCommand ("video", CL_Video_f ); Cmd_AddCommand ("stopvideo", CL_StopVideo_f ); - Cmd_AddCommand("minimize", GLimp_Minimize); CL_InitRef(); SCR_Init (); Index: Makefile =================================================================== --- Makefile (Revision 1895) +++ Makefile (Arbeitskopie) @@ -853,9 +853,9 @@ endif ifneq ($(BUILD_CLIENT),0) - TARGETS += $(B)/ioquake3$(FULLBINEXT) + TARGETS += $(B)/ioquake3$(FULLBINEXT) $(B)/ref_gl1.2$(SHLIBNAME) ifneq ($(BUILD_CLIENT_SMP),0) - TARGETS += $(B)/ioquake3-smp$(FULLBINEXT) + TARGETS += $(B)/ref_gl1.2_smp$(SHLIBNAME) endif endif @@ -947,9 +947,14 @@ $(Q)$(CC) $(NOTSHLIBCFLAGS) $(CFLAGS) $(CLIENT_CFLAGS) $(OPTIMIZE) -o $@ -c $< endef +define DO_REF_CC +$(echo_cmd) "REF_CC $<" +$(Q)$(CC) $(SHLIBCFLAGS) $(CFLAGS) $(CLIENT_CFLAGS) $(OPTIMIZE) -o $@ -c $< +endef + define DO_SMP_CC $(echo_cmd) "SMP_CC $<" -$(Q)$(CC) $(NOTSHLIBCFLAGS) $(CFLAGS) $(CLIENT_CFLAGS) $(OPTIMIZE) -DSMP -o $@ -c $< +$(Q)$(CC) $(SHLIBCFLAGS) $(CFLAGS) $(CLIENT_CFLAGS) $(OPTIMIZE) -DSMP -o $@ -c $< endef define DO_BOT_CC @@ -1108,7 +1113,8 @@ @if [ ! -d $(BUILD_DIR) ];then $(MKDIR) $(BUILD_DIR);fi @if [ ! -d $(B) ];then $(MKDIR) $(B);fi @if [ ! -d $(B)/client ];then $(MKDIR) $(B)/client;fi - @if [ ! -d $(B)/clientsmp ];then $(MKDIR) $(B)/clientsmp;fi + @if [ ! -d $(B)/ref_gl1.2 ];then $(MKDIR) $(B)/ref_gl1.2;fi + @if [ ! -d $(B)/ref_gl1.2_smp ];then $(MKDIR) $(B)/ref_gl1.2_smp;fi @if [ ! -d $(B)/ded ];then $(MKDIR) $(B)/ded;fi @if [ ! -d $(B)/baseq3 ];then $(MKDIR) $(B)/baseq3;fi @if [ ! -d $(B)/baseq3/cgame ];then $(MKDIR) $(B)/baseq3/cgame;fi @@ -1399,72 +1405,6 @@ $(B)/client/l_script.o \ $(B)/client/l_struct.o \ \ - $(B)/client/jcapimin.o \ - $(B)/client/jcapistd.o \ - $(B)/client/jccoefct.o \ - $(B)/client/jccolor.o \ - $(B)/client/jcdctmgr.o \ - $(B)/client/jchuff.o \ - $(B)/client/jcinit.o \ - $(B)/client/jcmainct.o \ - $(B)/client/jcmarker.o \ - $(B)/client/jcmaster.o \ - $(B)/client/jcomapi.o \ - $(B)/client/jcparam.o \ - $(B)/client/jcphuff.o \ - $(B)/client/jcprepct.o \ - $(B)/client/jcsample.o \ - $(B)/client/jdapimin.o \ - $(B)/client/jdapistd.o \ - $(B)/client/jdatasrc.o \ - $(B)/client/jdcoefct.o \ - $(B)/client/jdcolor.o \ - $(B)/client/jddctmgr.o \ - $(B)/client/jdhuff.o \ - $(B)/client/jdinput.o \ - $(B)/client/jdmainct.o \ - $(B)/client/jdmarker.o \ - $(B)/client/jdmaster.o \ - $(B)/client/jdpostct.o \ - $(B)/client/jdsample.o \ - $(B)/client/jdtrans.o \ - $(B)/client/jerror.o \ - $(B)/client/jfdctflt.o \ - $(B)/client/jidctflt.o \ - $(B)/client/jmemmgr.o \ - $(B)/client/jmemnobs.o \ - $(B)/client/jutils.o \ - \ - $(B)/client/tr_animation.o \ - $(B)/client/tr_backend.o \ - $(B)/client/tr_bsp.o \ - $(B)/client/tr_cmds.o \ - $(B)/client/tr_curve.o \ - $(B)/client/tr_flares.o \ - $(B)/client/tr_font.o \ - $(B)/client/tr_image.o \ - $(B)/client/tr_image_png.o \ - $(B)/client/tr_image_jpg.o \ - $(B)/client/tr_image_bmp.o \ - $(B)/client/tr_image_tga.o \ - $(B)/client/tr_image_pcx.o \ - $(B)/client/tr_init.o \ - $(B)/client/tr_light.o \ - $(B)/client/tr_main.o \ - $(B)/client/tr_marks.o \ - $(B)/client/tr_mesh.o \ - $(B)/client/tr_model.o \ - $(B)/client/tr_noise.o \ - $(B)/client/tr_scene.o \ - $(B)/client/tr_shade.o \ - $(B)/client/tr_shade_calc.o \ - $(B)/client/tr_shader.o \ - $(B)/client/tr_shadows.o \ - $(B)/client/tr_sky.o \ - $(B)/client/tr_surface.o \ - $(B)/client/tr_world.o \ - \ - $(B)/client/sdl_gamma.o \ $(B)/client/sdl_input.o \ $(B)/client/sdl_snd.o \ \ @@ -1472,6 +1412,79 @@ $(B)/client/con_log.o \ $(B)/client/sys_main.o +Q3ROBJ = \ + $(B)/ref_gl1.2/q_shared.o \ + $(B)/ref_gl1.2/q_math.o \ + $(B)/ref_gl1.2/puff.o \ + \ + $(B)/ref_gl1.2/jcapimin.o \ + $(B)/ref_gl1.2/jcapistd.o \ + $(B)/ref_gl1.2/jccoefct.o \ + $(B)/ref_gl1.2/jccolor.o \ + $(B)/ref_gl1.2/jcdctmgr.o \ + $(B)/ref_gl1.2/jchuff.o \ + $(B)/ref_gl1.2/jcinit.o \ + $(B)/ref_gl1.2/jcmainct.o \ + $(B)/ref_gl1.2/jcmarker.o \ + $(B)/ref_gl1.2/jcmaster.o \ + $(B)/ref_gl1.2/jcomapi.o \ + $(B)/ref_gl1.2/jcparam.o \ + $(B)/ref_gl1.2/jcphuff.o \ + $(B)/ref_gl1.2/jcprepct.o \ + $(B)/ref_gl1.2/jcsample.o \ + $(B)/ref_gl1.2/jdapimin.o \ + $(B)/ref_gl1.2/jdapistd.o \ + $(B)/ref_gl1.2/jdatasrc.o \ + $(B)/ref_gl1.2/jdcoefct.o \ + $(B)/ref_gl1.2/jdcolor.o \ + $(B)/ref_gl1.2/jddctmgr.o \ + $(B)/ref_gl1.2/jdhuff.o \ + $(B)/ref_gl1.2/jdinput.o \ + $(B)/ref_gl1.2/jdmainct.o \ + $(B)/ref_gl1.2/jdmarker.o \ + $(B)/ref_gl1.2/jdmaster.o \ + $(B)/ref_gl1.2/jdpostct.o \ + $(B)/ref_gl1.2/jdsample.o \ + $(B)/ref_gl1.2/jdtrans.o \ + $(B)/ref_gl1.2/jerror.o \ + $(B)/ref_gl1.2/jfdctflt.o \ + $(B)/ref_gl1.2/jidctflt.o \ + $(B)/ref_gl1.2/jmemmgr.o \ + $(B)/ref_gl1.2/jmemnobs.o \ + $(B)/ref_gl1.2/jutils.o \ + \ + $(B)/ref_gl1.2/tr_animation.o \ + $(B)/ref_gl1.2/tr_backend.o \ + $(B)/ref_gl1.2/tr_bsp.o \ + $(B)/ref_gl1.2/tr_cmds.o \ + $(B)/ref_gl1.2/tr_curve.o \ + $(B)/ref_gl1.2/tr_flares.o \ + $(B)/ref_gl1.2/tr_font.o \ + $(B)/ref_gl1.2/tr_image.o \ + $(B)/ref_gl1.2/tr_image_png.o \ + $(B)/ref_gl1.2/tr_image_jpg.o \ + $(B)/ref_gl1.2/tr_image_bmp.o \ + $(B)/ref_gl1.2/tr_image_tga.o \ + $(B)/ref_gl1.2/tr_image_pcx.o \ + $(B)/ref_gl1.2/tr_init.o \ + $(B)/ref_gl1.2/tr_light.o \ + $(B)/ref_gl1.2/tr_main.o \ + $(B)/ref_gl1.2/tr_marks.o \ + $(B)/ref_gl1.2/tr_mesh.o \ + $(B)/ref_gl1.2/tr_model.o \ + $(B)/ref_gl1.2/tr_noise.o \ + $(B)/ref_gl1.2/tr_scene.o \ + $(B)/ref_gl1.2/tr_shade.o \ + $(B)/ref_gl1.2/tr_shade_calc.o \ + $(B)/ref_gl1.2/tr_shader.o \ + $(B)/ref_gl1.2/tr_shadows.o \ + $(B)/ref_gl1.2/tr_sky.o \ + $(B)/ref_gl1.2/tr_subs.o \ + $(B)/ref_gl1.2/tr_surface.o \ + $(B)/ref_gl1.2/tr_world.o \ + \ + $(B)/ref_gl1.2/sdl_gamma.o + ifeq ($(ARCH),i386) Q3OBJ += \ $(B)/client/snd_mixa.o \ @@ -1590,23 +1603,27 @@ endif Q3POBJ += \ - $(B)/client/sdl_glimp.o + $(B)/ref_gl1.2/sdl_glimp.o Q3POBJ_SMP += \ - $(B)/clientsmp/sdl_glimp.o + $(B)/ref_gl1.2_smp/sdl_glimp.o -$(B)/ioquake3$(FULLBINEXT): $(Q3OBJ) $(Q3POBJ) $(LIBSDLMAIN) +$(B)/ioquake3$(FULLBINEXT): $(Q3OBJ) $(LIBSDLMAIN) $(echo_cmd) "LD $@" $(Q)$(CC) $(CLIENT_CFLAGS) $(CFLAGS) $(CLIENT_LDFLAGS) $(LDFLAGS) \ - -o $@ $(Q3OBJ) $(Q3POBJ) \ + -o $@ $(Q3OBJ) \ $(LIBSDLMAIN) $(CLIENT_LIBS) $(LIBS) -$(B)/ioquake3-smp$(FULLBINEXT): $(Q3OBJ) $(Q3POBJ_SMP) $(LIBSDLMAIN) +$(B)/ref_gl1.2$(SHLIBNAME): $(Q3ROBJ) $(Q3POBJ) $(echo_cmd) "LD $@" - $(Q)$(CC) $(CLIENT_CFLAGS) $(CFLAGS) $(CLIENT_LDFLAGS) $(LDFLAGS) $(THREAD_LDFLAGS) \ - -o $@ $(Q3OBJ) $(Q3POBJ_SMP) \ + $(Q)$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(Q3ROBJ) $(Q3POBJ) \ $(THREAD_LIBS) $(LIBSDLMAIN) $(CLIENT_LIBS) $(LIBS) +$(B)/ref_gl1.2_smp$(SHLIBNAME): $(Q3ROBJ) $(Q3POBJ_SMP) + $(echo_cmd) "LD $@" + $(Q)$(CC) $(CFLAGS) $(SHLIBLDFLAGS) -o $@ $(Q3ROBJ) $(Q3POBJ_SMP) \ + $(THREAD_LIBS) $(LIBSDLMAIN) $(CLIENT_LIBS) $(LIBS) + ifneq ($(strip $(LIBSDLMAIN)),) ifneq ($(strip $(LIBSDLMAINSRC)),) $(LIBSDLMAIN) : $(LIBSDLMAINSRC) @@ -2065,22 +2082,16 @@ $(B)/client/%.o: $(BLIBDIR)/%.c $(DO_BOT_CC) -$(B)/client/%.o: $(JPDIR)/%.c - $(DO_CC) - $(B)/client/%.o: $(SPEEXDIR)/%.c $(DO_CC) $(B)/client/%.o: $(ZDIR)/%.c $(DO_CC) -$(B)/client/%.o: $(RDIR)/%.c - $(DO_CC) - $(B)/client/%.o: $(SDLDIR)/%.c $(DO_CC) -$(B)/clientsmp/%.o: $(SDLDIR)/%.c +$(B)/ref_gl1.2_smp/%.o: $(SDLDIR)/%.c $(DO_SMP_CC) $(B)/client/%.o: $(SYSDIR)/%.c @@ -2093,6 +2104,19 @@ $(DO_WINDRES) +$(B)/ref_gl1.2/%.o: $(CMDIR)/%.c + $(DO_REF_CC) + +$(B)/ref_gl1.2/%.o: $(SDLDIR)/%.c + $(DO_REF_CC) + +$(B)/ref_gl1.2/%.o: $(JPDIR)/%.c + $(DO_REF_CC) + +$(B)/ref_gl1.2/%.o: $(RDIR)/%.c + $(DO_REF_CC) + + $(B)/ded/%.o: $(ASMDIR)/%.s $(DO_AS) @@ -2212,7 +2236,7 @@ # MISC ############################################################################# -OBJ = $(Q3OBJ) $(Q3POBJ) $(Q3POBJ_SMP) $(Q3DOBJ) \ +OBJ = $(Q3OBJ) $(Q3POBJ) $(Q3POBJ_SMP) $(Q3ROBJ) $(Q3DOBJ) \ $(MPGOBJ) $(Q3GOBJ) $(Q3CGOBJ) $(MPCGOBJ) $(Q3UIOBJ) $(MPUIOBJ) \ $(MPGVMOBJ) $(Q3GVMOBJ) $(Q3CGVMOBJ) $(MPCGVMOBJ) $(Q3UIVMOBJ) $(MPUIVMOBJ) TOOLSOBJ = $(LBURGOBJ) $(Q3CPPOBJ) $(Q3RCCOBJ) $(Q3LCCOBJ) $(Q3ASMOBJ) @@ -2225,12 +2249,13 @@ ifneq ($(BUILD_CLIENT),0) $(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/ioquake3$(FULLBINEXT) $(COPYBINDIR)/ioquake3$(FULLBINEXT) + $(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/ref_gl1.2$(SHLIBNAME) $(COPYBINDIR)/ref_gl1.2$(SHLIBNAME) endif # Don't copy the SMP until it's working together with SDL. -#ifneq ($(BUILD_CLIENT_SMP),0) -# $(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/ioquake3-smp$(FULLBINEXT) $(COPYBINDIR)/ioquake3-smp$(FULLBINEXT) -#endif +ifneq ($(BUILD_CLIENT_SMP),0) + $(INSTALL) $(STRIP_FLAG) -m 0755 $(BR)/ref_gl1.2_smp$(SHLIBNAME) $(COPYBINDIR)/ref_gl1.2_smp$(SHLIBNAME) +endif ifneq ($(BUILD_SERVER),0) @if [ -f $(BR)/ioq3ded$(FULLBINEXT) ]; then \