/* =========================================================================== Copyright (C) 1999 - 2005, Id Software, Inc. Copyright (C) 2000 - 2013, Raven Software, Inc. Copyright (C) 2001 - 2013, Activision, Inc. Copyright (C) 2013 - 2015, OpenJK contributors This file is part of the OpenJK source code. OpenJK is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. This program 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 this program; if not, see . =========================================================================== */ // tr_init.c -- functions that are not called every frame #include "tr_local.h" #include "../rd-common/tr_common.h" #include "qcommon/MiniHeap.h" #include "ghoul2/g2_local.h" #include cvar_t *r_verbose; cvar_t *r_ignore; cvar_t *r_displayRefresh; cvar_t *r_detailTextures; cvar_t *r_znear; cvar_t *r_skipBackEnd; cvar_t *r_ignorehwgamma; cvar_t *r_measureOverdraw; cvar_t *r_inGameVideo; cvar_t *r_fastsky; cvar_t *r_drawSun; cvar_t *r_dynamiclight; // rjr - removed for hacking cvar_t *r_dlightBacks; cvar_t *r_lodbias; cvar_t *r_lodscale; cvar_t *r_autolodscalevalue; cvar_t *r_norefresh; cvar_t *r_drawentities; cvar_t *r_drawworld; cvar_t *r_drawfog; cvar_t *r_speeds; cvar_t *r_fullbright; cvar_t *r_novis; cvar_t *r_nocull; cvar_t *r_facePlaneCull; cvar_t *r_cullRoofFaces; //attempted smart method of culling out upwards facing surfaces on roofs for automap shots -rww cvar_t *r_roofCullCeilDist; //ceiling distance cull tolerance -rww cvar_t *r_roofCullFloorDist; //floor distance cull tolerance -rww cvar_t *r_showcluster; cvar_t *r_nocurves; cvar_t *r_autoMap; //automap renderside toggle for debugging -rww cvar_t *r_autoMapBackAlpha; //alpha of automap bg -rww cvar_t *r_autoMapDisable; //don't calc it (since it's slow in debug) -rww cvar_t *r_dlightStyle; cvar_t *r_surfaceSprites; cvar_t *r_surfaceWeather; cvar_t *r_windSpeed; cvar_t *r_windAngle; cvar_t *r_windGust; cvar_t *r_windDampFactor; cvar_t *r_windPointForce; cvar_t *r_windPointX; cvar_t *r_windPointY; cvar_t *r_allowExtensions; cvar_t *r_ext_compressed_textures; cvar_t *r_ext_compressed_lightmaps; cvar_t *r_ext_preferred_tc_method; cvar_t *r_ext_gamma_control; cvar_t *r_ext_multitexture; cvar_t *r_ext_compiled_vertex_array; cvar_t *r_ext_texture_env_add; cvar_t *r_ext_texture_filter_anisotropic; cvar_t *r_DynamicGlow; cvar_t *r_DynamicGlowPasses; cvar_t *r_DynamicGlowDelta; cvar_t *r_DynamicGlowIntensity; cvar_t *r_DynamicGlowSoft; cvar_t *r_DynamicGlowWidth; cvar_t *r_DynamicGlowHeight; cvar_t *r_ignoreGLErrors; cvar_t *r_logFile; cvar_t *r_stencilbits; cvar_t *r_depthbits; cvar_t *r_colorbits; cvar_t *r_stereo; cvar_t *r_primitives; cvar_t *r_texturebits; cvar_t *r_texturebitslm; cvar_t *r_lightmap; cvar_t *r_vertexLight; cvar_t *r_uiFullScreen; cvar_t *r_shadows; cvar_t *r_shadowRange; cvar_t *r_flares; cvar_t *r_mode; cvar_t *r_nobind; cvar_t *r_singleShader; cvar_t *r_colorMipLevels; cvar_t *r_picmip; cvar_t *r_showtris; cvar_t *r_showsky; cvar_t *r_shownormals; cvar_t *r_finish; cvar_t *r_clear; cvar_t *r_swapInterval; cvar_t *r_markcount; cvar_t *r_textureMode; cvar_t *r_offsetFactor; cvar_t *r_offsetUnits; cvar_t *r_gamma; cvar_t *r_intensity; cvar_t *r_lockpvs; cvar_t *r_noportals; cvar_t *r_portalOnly; cvar_t *r_subdivisions; cvar_t *r_lodCurveError; cvar_t *r_fullscreen = 0; cvar_t *r_noborder; cvar_t *r_centerWindow; cvar_t *r_customwidth; cvar_t *r_customheight; cvar_t *r_overBrightBits; cvar_t *r_debugSurface; cvar_t *r_simpleMipMaps; cvar_t *r_showImages; cvar_t *r_ambientScale; cvar_t *r_directedScale; cvar_t *r_debugLight; cvar_t *r_debugSort; // the limits apply to the sum of all scenes in a frame -- // the main view, all the 3D icons, etc #define DEFAULT_MAX_POLYS 600 #define DEFAULT_MAX_POLYVERTS 3000 cvar_t *r_maxpolys; cvar_t *r_maxpolyverts; int max_polys; int max_polyverts; cvar_t *r_modelpoolmegs; /* Ghoul2 Insert Start */ #ifdef _DEBUG cvar_t *r_noPrecacheGLA; #endif cvar_t *r_noServerGhoul2; cvar_t *r_Ghoul2AnimSmooth=0; cvar_t *r_Ghoul2UnSqashAfterSmooth=0; //cvar_t *r_Ghoul2UnSqash; //cvar_t *r_Ghoul2TimeBase=0; from single player //cvar_t *r_Ghoul2NoLerp; //cvar_t *r_Ghoul2NoBlend; //cvar_t *r_Ghoul2BlendMultiplier=0; cvar_t *broadsword=0; cvar_t *broadsword_kickbones=0; cvar_t *broadsword_kickorigin=0; cvar_t *broadsword_playflop=0; cvar_t *broadsword_dontstopanim=0; cvar_t *broadsword_waitforshot=0; cvar_t *broadsword_smallbbox=0; cvar_t *broadsword_extra1=0; cvar_t *broadsword_extra2=0; cvar_t *broadsword_effcorr=0; cvar_t *broadsword_ragtobase=0; cvar_t *broadsword_dircap=0; /* Ghoul2 Insert End */ cvar_t *r_aviMotionJpegQuality; cvar_t *r_screenshotJpegQuality; /* ** R_GetModeInfo */ typedef struct vidmode_s { const char *description; int width, height; } vidmode_t; const vidmode_t r_vidModes[] = { { "Mode 0: 320x240", 320, 240 }, { "Mode 1: 400x300", 400, 300 }, { "Mode 2: 512x384", 512, 384 }, { "Mode 3: 640x480", 640, 480 }, { "Mode 4: 800x600", 800, 600 }, { "Mode 5: 960x720", 960, 720 }, { "Mode 6: 1024x768", 1024, 768 }, { "Mode 7: 1152x864", 1152, 864 }, { "Mode 8: 1280x1024", 1280, 1024 }, { "Mode 9: 1600x1200", 1600, 1200 }, { "Mode 10: 2048x1536", 2048, 1536 }, { "Mode 11: 856x480 (wide)", 856, 480 }, { "Mode 12: 2400x600(surround)",2400,600 } }; static const int s_numVidModes = ( sizeof( r_vidModes ) / sizeof( r_vidModes[0] ) ); qboolean R_GetModeInfo( int *width, int *height, int mode ) { const vidmode_t *vm; if ( mode < -1 ) { return qfalse; } if ( mode >= s_numVidModes ) { return qfalse; } if ( mode == -1 ) { *width = r_customwidth->integer; *height = r_customheight->integer; return qtrue; } vm = &r_vidModes[mode]; *width = vm->width; *height = vm->height; return qtrue; } /* ** R_ModeList_f */ static void R_ModeList_f( void ) { int i; Com_Printf ("\n" ); for ( i = 0; i < s_numVidModes; i++ ) { Com_Printf ("%s\n", r_vidModes[i].description ); } Com_Printf ("\n" ); } typedef struct consoleCommand_s { const char *cmd; xcommand_t func; } consoleCommand_t; static consoleCommand_t commands[] = { { "modellist", R_Modellist_f }, { "modelist", R_ModeList_f }, { "modelcacheinfo", RE_RegisterModels_Info_f }, }; static const size_t numCommands = ARRAY_LEN( commands ); #ifdef _DEBUG #define MIN_PRIMITIVES -1 #else #define MIN_PRIMITIVES 0 #endif #define MAX_PRIMITIVES 3 #ifdef _WIN32 #define SWAPINTERVAL_FLAGS CVAR_ARCHIVE_ND #else #define SWAPINTERVAL_FLAGS CVAR_ARCHIVE_ND | CVAR_LATCH #endif /* =============== R_Register =============== */ void R_Register( void ) { // // latched and archived variables // r_allowExtensions = ri.Cvar_Get( "r_allowExtensions", "1", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_ext_compressed_textures = ri.Cvar_Get( "r_ext_compress_textures", "1", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_ext_compressed_lightmaps = ri.Cvar_Get( "r_ext_compress_lightmaps", "0", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_ext_preferred_tc_method = ri.Cvar_Get( "r_ext_preferred_tc_method", "0", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_ext_gamma_control = ri.Cvar_Get( "r_ext_gamma_control", "1", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_ext_multitexture = ri.Cvar_Get( "r_ext_multitexture", "1", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_ext_compiled_vertex_array = ri.Cvar_Get( "r_ext_compiled_vertex_array", "1", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_ext_texture_env_add = ri.Cvar_Get( "r_ext_texture_env_add", "1", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_ext_texture_filter_anisotropic = ri.Cvar_Get( "r_ext_texture_filter_anisotropic", "16", CVAR_ARCHIVE_ND, "" ); r_DynamicGlow = ri.Cvar_Get( "r_DynamicGlow", "0", CVAR_ARCHIVE_ND, "" ); r_DynamicGlowPasses = ri.Cvar_Get( "r_DynamicGlowPasses", "5", CVAR_ARCHIVE_ND, "" ); r_DynamicGlowDelta = ri.Cvar_Get( "r_DynamicGlowDelta", "0.8f", CVAR_ARCHIVE_ND, "" ); r_DynamicGlowIntensity = ri.Cvar_Get( "r_DynamicGlowIntensity", "1.13f", CVAR_ARCHIVE_ND, "" ); r_DynamicGlowSoft = ri.Cvar_Get( "r_DynamicGlowSoft", "1", CVAR_ARCHIVE_ND, "" ); r_DynamicGlowWidth = ri.Cvar_Get( "r_DynamicGlowWidth", "320", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_DynamicGlowHeight = ri.Cvar_Get( "r_DynamicGlowHeight", "240", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_picmip = ri.Cvar_Get( "r_picmip", "1", CVAR_ARCHIVE|CVAR_LATCH, "" ); ri.Cvar_CheckRange( r_picmip, 0, 16, qtrue ); r_colorMipLevels = ri.Cvar_Get( "r_colorMipLevels", "0", CVAR_LATCH, "" ); r_detailTextures = ri.Cvar_Get( "r_detailtextures", "1", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_texturebits = ri.Cvar_Get( "r_texturebits", "0", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_texturebitslm = ri.Cvar_Get( "r_texturebitslm", "0", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_colorbits = ri.Cvar_Get( "r_colorbits", "0", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_stereo = ri.Cvar_Get( "r_stereo", "0", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_stencilbits = ri.Cvar_Get( "r_stencilbits", "8", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_depthbits = ri.Cvar_Get( "r_depthbits", "0", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_overBrightBits = ri.Cvar_Get( "r_overBrightBits", "0", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_ignorehwgamma = ri.Cvar_Get( "r_ignorehwgamma", "0", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_mode = ri.Cvar_Get( "r_mode", "4", CVAR_ARCHIVE|CVAR_LATCH, "" ); r_fullscreen = ri.Cvar_Get( "r_fullscreen", "0", CVAR_ARCHIVE|CVAR_LATCH, "" ); r_noborder = ri.Cvar_Get( "r_noborder", "0", CVAR_ARCHIVE|CVAR_LATCH, "" ); r_centerWindow = ri.Cvar_Get( "r_centerWindow", "0", CVAR_ARCHIVE|CVAR_LATCH, "" ); 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_simpleMipMaps = ri.Cvar_Get( "r_simpleMipMaps", "1", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_vertexLight = ri.Cvar_Get( "r_vertexLight", "0", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_uiFullScreen = ri.Cvar_Get( "r_uifullscreen", "0", CVAR_NONE, "" ); r_subdivisions = ri.Cvar_Get( "r_subdivisions", "4", CVAR_ARCHIVE_ND|CVAR_LATCH, "" ); r_displayRefresh = ri.Cvar_Get( "r_displayRefresh", "0", CVAR_LATCH, "" ); ri.Cvar_CheckRange( r_displayRefresh, 0, 200, qtrue ); r_fullbright = ri.Cvar_Get( "r_fullbright", "0", CVAR_CHEAT, "" ); r_intensity = ri.Cvar_Get( "r_intensity", "1", CVAR_LATCH, "" ); r_singleShader = ri.Cvar_Get( "r_singleShader", "0", CVAR_CHEAT|CVAR_LATCH, "" ); r_lodCurveError = ri.Cvar_Get( "r_lodCurveError", "250", CVAR_ARCHIVE_ND, "" ); r_lodbias = ri.Cvar_Get( "r_lodbias", "0", CVAR_ARCHIVE_ND, "" ); r_autolodscalevalue = ri.Cvar_Get( "r_autolodscalevalue", "0", CVAR_ROM, "" ); r_flares = ri.Cvar_Get( "r_flares", "1", CVAR_ARCHIVE_ND, "" ); r_znear = ri.Cvar_Get( "r_znear", "4", CVAR_ARCHIVE_ND, "" ); ri.Cvar_CheckRange( r_znear, 0.001f, 10, qfalse ); r_ignoreGLErrors = ri.Cvar_Get( "r_ignoreGLErrors", "1", CVAR_ARCHIVE_ND, "" ); r_fastsky = ri.Cvar_Get( "r_fastsky", "0", CVAR_ARCHIVE_ND, "" ); r_inGameVideo = ri.Cvar_Get( "r_inGameVideo", "1", CVAR_ARCHIVE_ND, "" ); r_drawSun = ri.Cvar_Get( "r_drawSun", "0", CVAR_ARCHIVE_ND, "" ); r_dynamiclight = ri.Cvar_Get( "r_dynamiclight", "1", CVAR_ARCHIVE, "" ); // rjr - removed for hacking // r_dlightBacks = ri.Cvar_Get( "r_dlightBacks", "1", CVAR_CHEAT, "" ); r_finish = ri.Cvar_Get( "r_finish", "0", CVAR_ARCHIVE_ND, "" ); r_textureMode = ri.Cvar_Get( "r_textureMode", "GL_LINEAR_MIPMAP_NEAREST", CVAR_ARCHIVE, "" ); r_swapInterval = ri.Cvar_Get( "r_swapInterval", "0", SWAPINTERVAL_FLAGS, "" ); r_markcount = ri.Cvar_Get( "r_markcount", "100", CVAR_ARCHIVE_ND, "" ); r_gamma = ri.Cvar_Get( "r_gamma", "1", CVAR_ARCHIVE_ND, "" ); r_facePlaneCull = ri.Cvar_Get( "r_facePlaneCull", "1", CVAR_ARCHIVE_ND, "" ); r_cullRoofFaces = ri.Cvar_Get( "r_cullRoofFaces", "0", CVAR_CHEAT, "" ); //attempted smart method of culling out upwards facing surfaces on roofs for automap shots -rww r_roofCullCeilDist = ri.Cvar_Get( "r_roofCullCeilDist", "256", CVAR_CHEAT, "" ); //attempted smart method of culling out upwards facing surfaces on roofs for automap shots -rww r_roofCullFloorDist = ri.Cvar_Get( "r_roofCeilFloorDist", "128", CVAR_CHEAT, "" ); //attempted smart method of culling out upwards facing surfaces on roofs for automap shots -rww r_primitives = ri.Cvar_Get( "r_primitives", "0", CVAR_ARCHIVE_ND, "" ); ri.Cvar_CheckRange( r_primitives, MIN_PRIMITIVES, MAX_PRIMITIVES, qtrue ); r_ambientScale = ri.Cvar_Get( "r_ambientScale", "0.6", CVAR_CHEAT, "" ); r_directedScale = ri.Cvar_Get( "r_directedScale", "1", CVAR_CHEAT, "" ); r_autoMap = ri.Cvar_Get( "r_autoMap", "0", CVAR_ARCHIVE_ND, "" ); //automap renderside toggle for debugging -rww r_autoMapBackAlpha = ri.Cvar_Get( "r_autoMapBackAlpha", "0", CVAR_NONE, "" ); //alpha of automap bg -rww r_autoMapDisable = ri.Cvar_Get( "r_autoMapDisable", "1", CVAR_NONE, "" ); r_showImages = ri.Cvar_Get( "r_showImages", "0", CVAR_CHEAT, "" ); r_debugLight = ri.Cvar_Get( "r_debuglight", "0", CVAR_TEMP, "" ); r_debugSort = ri.Cvar_Get( "r_debugSort", "0", CVAR_CHEAT, "" ); r_dlightStyle = ri.Cvar_Get( "r_dlightStyle", "1", CVAR_TEMP, "" ); r_surfaceSprites = ri.Cvar_Get( "r_surfaceSprites", "1", CVAR_TEMP, "" ); r_surfaceWeather = ri.Cvar_Get( "r_surfaceWeather", "0", CVAR_TEMP, "" ); r_windSpeed = ri.Cvar_Get( "r_windSpeed", "0", CVAR_NONE, "" ); r_windAngle = ri.Cvar_Get( "r_windAngle", "0", CVAR_NONE, "" ); r_windGust = ri.Cvar_Get( "r_windGust", "0", CVAR_NONE, "" ); r_windDampFactor = ri.Cvar_Get( "r_windDampFactor", "0.1", CVAR_NONE, "" ); r_windPointForce = ri.Cvar_Get( "r_windPointForce", "0", CVAR_NONE, "" ); r_windPointX = ri.Cvar_Get( "r_windPointX", "0", CVAR_NONE, "" ); r_windPointY = ri.Cvar_Get( "r_windPointY", "0", CVAR_NONE, "" ); r_nocurves = ri.Cvar_Get( "r_nocurves", "0", CVAR_CHEAT, "" ); r_drawworld = ri.Cvar_Get( "r_drawworld", "1", CVAR_CHEAT, "" ); r_drawfog = ri.Cvar_Get( "r_drawfog", "2", CVAR_CHEAT, "" ); r_lightmap = ri.Cvar_Get( "r_lightmap", "0", CVAR_CHEAT, "" ); r_portalOnly = ri.Cvar_Get( "r_portalOnly", "0", CVAR_CHEAT, "" ); r_skipBackEnd = ri.Cvar_Get( "r_skipBackEnd", "0", CVAR_CHEAT, "" ); r_measureOverdraw = ri.Cvar_Get( "r_measureOverdraw", "0", CVAR_CHEAT, "" ); r_lodscale = ri.Cvar_Get( "r_lodscale", "5", CVAR_NONE, "" ); r_norefresh = ri.Cvar_Get( "r_norefresh", "0", CVAR_CHEAT, "" ); r_drawentities = ri.Cvar_Get( "r_drawentities", "1", CVAR_CHEAT, "" ); r_ignore = ri.Cvar_Get( "r_ignore", "1", CVAR_CHEAT, "" ); r_nocull = ri.Cvar_Get( "r_nocull", "0", CVAR_CHEAT, "" ); r_novis = ri.Cvar_Get( "r_novis", "0", CVAR_CHEAT, "" ); r_showcluster = ri.Cvar_Get( "r_showcluster", "0", CVAR_CHEAT, "" ); r_speeds = ri.Cvar_Get( "r_speeds", "0", CVAR_CHEAT, "" ); r_verbose = ri.Cvar_Get( "r_verbose", "0", CVAR_CHEAT, "" ); r_logFile = ri.Cvar_Get( "r_logFile", "0", CVAR_CHEAT, "" ); r_debugSurface = ri.Cvar_Get( "r_debugSurface", "0", CVAR_CHEAT, "" ); r_nobind = ri.Cvar_Get( "r_nobind", "0", CVAR_CHEAT, "" ); r_showtris = ri.Cvar_Get( "r_showtris", "0", CVAR_CHEAT, "" ); r_showsky = ri.Cvar_Get( "r_showsky", "0", CVAR_CHEAT, "" ); r_shownormals = ri.Cvar_Get( "r_shownormals", "0", CVAR_CHEAT, "" ); r_clear = ri.Cvar_Get( "r_clear", "0", CVAR_CHEAT, "" ); r_offsetFactor = ri.Cvar_Get( "r_offsetfactor", "-1", CVAR_CHEAT, "" ); r_offsetUnits = ri.Cvar_Get( "r_offsetunits", "-2", CVAR_CHEAT, "" ); r_lockpvs = ri.Cvar_Get( "r_lockpvs", "0", CVAR_CHEAT, "" ); r_noportals = ri.Cvar_Get( "r_noportals", "0", CVAR_CHEAT, "" ); r_shadows = ri.Cvar_Get( "cg_shadows", "1", CVAR_NONE, "" ); r_shadowRange = ri.Cvar_Get( "r_shadowRange", "1000", CVAR_NONE, "" ); r_maxpolys = ri.Cvar_Get( "r_maxpolys", XSTRING( DEFAULT_MAX_POLYS ), CVAR_NONE, "" ); r_maxpolyverts = ri.Cvar_Get( "r_maxpolyverts", XSTRING( DEFAULT_MAX_POLYVERTS ), CVAR_NONE, "" ); /* Ghoul2 Insert Start */ #ifdef _DEBUG r_noPrecacheGLA = ri.Cvar_Get( "r_noPrecacheGLA", "0", CVAR_CHEAT, "" ); #endif r_noServerGhoul2 = ri.Cvar_Get( "r_noserverghoul2", "0", CVAR_CHEAT, "" ); r_Ghoul2AnimSmooth = ri.Cvar_Get( "r_ghoul2animsmooth", "0.3", CVAR_NONE, "" ); r_Ghoul2UnSqashAfterSmooth = ri.Cvar_Get( "r_ghoul2unsqashaftersmooth", "1", CVAR_NONE, "" ); broadsword = ri.Cvar_Get( "broadsword", "0", CVAR_NONE, "" ); broadsword_kickbones = ri.Cvar_Get( "broadsword_kickbones", "1", CVAR_NONE, "" ); broadsword_kickorigin = ri.Cvar_Get( "broadsword_kickorigin", "1", CVAR_NONE, "" ); broadsword_dontstopanim = ri.Cvar_Get( "broadsword_dontstopanim", "0", CVAR_NONE, "" ); broadsword_waitforshot = ri.Cvar_Get( "broadsword_waitforshot", "0", CVAR_NONE, "" ); broadsword_playflop = ri.Cvar_Get( "broadsword_playflop", "1", CVAR_NONE, "" ); broadsword_smallbbox = ri.Cvar_Get( "broadsword_smallbbox", "0", CVAR_NONE, "" ); broadsword_extra1 = ri.Cvar_Get( "broadsword_extra1", "0", CVAR_NONE, "" ); broadsword_extra2 = ri.Cvar_Get( "broadsword_extra2", "0", CVAR_NONE, "" ); broadsword_effcorr = ri.Cvar_Get( "broadsword_effcorr", "1", CVAR_NONE, "" ); broadsword_ragtobase = ri.Cvar_Get( "broadsword_ragtobase", "2", CVAR_NONE, "" ); broadsword_dircap = ri.Cvar_Get( "broadsword_dircap", "64", CVAR_NONE, "" ); /* Ghoul2 Insert End */ r_modelpoolmegs = ri.Cvar_Get("r_modelpoolmegs", "20", CVAR_ARCHIVE, "" ); if (ri.Sys_LowPhysicalMemory() ) ri.Cvar_Set("r_modelpoolmegs", "0"); for ( size_t i = 0; i < numCommands; i++ ) ri.Cmd_AddCommand( commands[i].cmd, commands[i].func, "" ); } /* =============== R_Init =============== */ extern void R_InitWorldEffects(void); //tr_WorldEffects.cpp void R_Init( void ) { int i; byte *ptr; // Com_Printf ("----- R_Init -----\n" ); // clear all our internal state memset( &tr, 0, sizeof( tr ) ); memset( &backEnd, 0, sizeof( backEnd ) ); // Swap_Init(); // // init function tables // for ( i = 0; i < FUNCTABLE_SIZE; i++ ) { tr.sinTable[i] = sin( DEG2RAD( i * 360.0f / ( ( float ) ( FUNCTABLE_SIZE - 1 ) ) ) ); tr.squareTable[i] = ( i < FUNCTABLE_SIZE/2 ) ? 1.0f : -1.0f; tr.sawToothTable[i] = (float)i / FUNCTABLE_SIZE; tr.inverseSawToothTable[i] = 1.0f - tr.sawToothTable[i]; if ( i < FUNCTABLE_SIZE / 2 ) { if ( i < FUNCTABLE_SIZE / 4 ) { tr.triangleTable[i] = ( float ) i / ( FUNCTABLE_SIZE / 4 ); } else { tr.triangleTable[i] = 1.0f - tr.triangleTable[i-FUNCTABLE_SIZE / 4]; } } else { tr.triangleTable[i] = -tr.triangleTable[i-FUNCTABLE_SIZE/2]; } } R_Register(); max_polys = Q_min( r_maxpolys->integer, DEFAULT_MAX_POLYS ); max_polyverts = Q_min( r_maxpolyverts->integer, DEFAULT_MAX_POLYVERTS ); ptr = (byte *)Hunk_Alloc( sizeof( *backEndData ) + sizeof(srfPoly_t) * max_polys + sizeof(polyVert_t) * max_polyverts, h_low); backEndData = (backEndData_t *) ptr; backEndData->polys = (srfPoly_t *) ((char *) ptr + sizeof( *backEndData )); backEndData->polyVerts = (polyVert_t *) ((char *) ptr + sizeof( *backEndData ) + sizeof(srfPoly_t) * max_polys); R_ModelInit(); // Com_Printf ("----- finished R_Init -----\n" ); } /* =============== RE_Shutdown =============== */ void RE_Shutdown( qboolean destroyWindow, qboolean restarting ) { // Com_Printf ("RE_Shutdown( %i )\n", destroyWindow ); for ( size_t i = 0; i < numCommands; i++ ) ri.Cmd_RemoveCommand( commands[i].cmd ); tr.registered = qfalse; } static void G2API_BoltMatrixReconstruction( qboolean reconstruct ) { gG2_GBMNoReconstruct = (qboolean)!reconstruct; } static void G2API_BoltMatrixSPMethod( qboolean spMethod ) { gG2_GBMUseSPMethod = spMethod; } extern void R_SVModelInit( void ); //tr_model.cpp extern qboolean gG2_GBMNoReconstruct; extern qboolean gG2_GBMUseSPMethod; extern qhandle_t RE_RegisterServerSkin( const char *name ); /* @@@@@@@@@@@@@@@@@@@@@ GetRefAPI @@@@@@@@@@@@@@@@@@@@@ */ refexport_t *GetRefAPI ( int apiVersion, refimport_t *rimp ) { static refexport_t re; assert( rimp ); ri = *rimp; memset( &re, 0, sizeof( re ) ); if ( apiVersion != REF_API_VERSION ) { Com_Printf ( "Mismatched REF_API_VERSION: expected %i, got %i\n", REF_API_VERSION, apiVersion ); return NULL; } // the RE_ functions are Renderer Entry points re.Shutdown = RE_Shutdown; re.RegisterMedia_LevelLoadBegin = RE_RegisterMedia_LevelLoadBegin; re.RegisterMedia_LevelLoadEnd = RE_RegisterMedia_LevelLoadEnd; re.RegisterMedia_GetLevel = RE_RegisterMedia_GetLevel; re.RegisterModels_LevelLoadEnd = RE_RegisterModels_LevelLoadEnd; re.RegisterServerSkin = RE_RegisterServerSkin; // G2 stuff re.InitSkins = R_InitSkins; re.InitShaders = R_InitShaders; re.SVModelInit = R_SVModelInit; re.HunkClearCrap = RE_HunkClearCrap; // G2API re.G2API_AddBolt = G2API_AddBolt; re.G2API_AddBoltSurfNum = G2API_AddBoltSurfNum; re.G2API_AddSurface = G2API_AddSurface; re.G2API_AnimateG2ModelsRag = G2API_AnimateG2ModelsRag; re.G2API_AttachEnt = G2API_AttachEnt; re.G2API_AttachG2Model = G2API_AttachG2Model; re.G2API_AttachInstanceToEntNum = G2API_AttachInstanceToEntNum; re.G2API_AbsurdSmoothing = G2API_AbsurdSmoothing; re.G2API_BoltMatrixReconstruction = G2API_BoltMatrixReconstruction; re.G2API_BoltMatrixSPMethod = G2API_BoltMatrixSPMethod; re.G2API_CleanEntAttachments = G2API_CleanEntAttachments; re.G2API_CleanGhoul2Models = G2API_CleanGhoul2Models; re.G2API_ClearAttachedInstance = G2API_ClearAttachedInstance; re.G2API_CollisionDetect = G2API_CollisionDetect; re.G2API_CollisionDetectCache = G2API_CollisionDetectCache; re.G2API_CopyGhoul2Instance = G2API_CopyGhoul2Instance; re.G2API_CopySpecificG2Model = G2API_CopySpecificG2Model; re.G2API_DetachG2Model = G2API_DetachG2Model; re.G2API_DoesBoneExist = G2API_DoesBoneExist; re.G2API_DuplicateGhoul2Instance = G2API_DuplicateGhoul2Instance; re.G2API_FreeSaveBuffer = G2API_FreeSaveBuffer; re.G2API_GetAnimFileName = G2API_GetAnimFileName; re.G2API_GetAnimFileNameIndex = G2API_GetAnimFileNameIndex; re.G2API_GetAnimRange = G2API_GetAnimRange; re.G2API_GetBoltMatrix = G2API_GetBoltMatrix; re.G2API_GetBoneAnim = G2API_GetBoneAnim; re.G2API_GetBoneIndex = G2API_GetBoneIndex; re.G2API_GetGhoul2ModelFlags = G2API_GetGhoul2ModelFlags; re.G2API_GetGLAName = G2API_GetGLAName; re.G2API_GetModelName = G2API_GetModelName; re.G2API_GetParentSurface = G2API_GetParentSurface; re.G2API_GetRagBonePos = G2API_GetRagBonePos; re.G2API_GetSurfaceIndex = G2API_GetSurfaceIndex; re.G2API_GetSurfaceName = G2API_GetSurfaceName; re.G2API_GetSurfaceOnOff = G2API_GetSurfaceOnOff; re.G2API_GetSurfaceRenderStatus = G2API_GetSurfaceRenderStatus; re.G2API_GetTime = G2API_GetTime; re.G2API_Ghoul2Size = G2API_Ghoul2Size; re.G2API_GiveMeVectorFromMatrix = G2API_GiveMeVectorFromMatrix; re.G2API_HasGhoul2ModelOnIndex = G2API_HasGhoul2ModelOnIndex; re.G2API_HaveWeGhoul2Models = G2API_HaveWeGhoul2Models; re.G2API_IKMove = G2API_IKMove; re.G2API_InitGhoul2Model = G2API_InitGhoul2Model; re.G2API_IsGhoul2InfovValid = G2API_IsGhoul2InfovValid; re.G2API_IsPaused = G2API_IsPaused; re.G2API_ListBones = G2API_ListBones; re.G2API_ListSurfaces = G2API_ListSurfaces; re.G2API_LoadGhoul2Models = G2API_LoadGhoul2Models; re.G2API_LoadSaveCodeDestructGhoul2Info = G2API_LoadSaveCodeDestructGhoul2Info; re.G2API_OverrideServerWithClientData = G2API_OverrideServerWithClientData; re.G2API_PauseBoneAnim = G2API_PauseBoneAnim; re.G2API_PrecacheGhoul2Model = G2API_PrecacheGhoul2Model; re.G2API_RagEffectorGoal = G2API_RagEffectorGoal; re.G2API_RagEffectorKick = G2API_RagEffectorKick; re.G2API_RagForceSolve = G2API_RagForceSolve; re.G2API_RagPCJConstraint = G2API_RagPCJConstraint; re.G2API_RagPCJGradientSpeed = G2API_RagPCJGradientSpeed; re.G2API_RemoveBolt = G2API_RemoveBolt; re.G2API_RemoveBone = G2API_RemoveBone; re.G2API_RemoveGhoul2Model = G2API_RemoveGhoul2Model; re.G2API_RemoveGhoul2Models = G2API_RemoveGhoul2Models; re.G2API_RemoveSurface = G2API_RemoveSurface; re.G2API_ResetRagDoll = G2API_ResetRagDoll; re.G2API_SaveGhoul2Models = G2API_SaveGhoul2Models; re.G2API_SetBoltInfo = G2API_SetBoltInfo; re.G2API_SetBoneAngles = G2API_SetBoneAngles; re.G2API_SetBoneAnglesIndex = G2API_SetBoneAnglesIndex; re.G2API_SetBoneAnglesMatrix = G2API_SetBoneAnglesMatrix; re.G2API_SetBoneAnglesMatrixIndex = G2API_SetBoneAnglesMatrixIndex; re.G2API_SetBoneAnim = G2API_SetBoneAnim; re.G2API_SetBoneAnimIndex = G2API_SetBoneAnimIndex; re.G2API_SetBoneIKState = G2API_SetBoneIKState; re.G2API_SetGhoul2ModelIndexes = G2API_SetGhoul2ModelIndexes; re.G2API_SetGhoul2ModelFlags = G2API_SetGhoul2ModelFlags; re.G2API_SetLodBias = G2API_SetLodBias; re.G2API_SetNewOrigin = G2API_SetNewOrigin; re.G2API_SetRagDoll = G2API_SetRagDoll; re.G2API_SetRootSurface = G2API_SetRootSurface; re.G2API_SetShader = G2API_SetShader; re.G2API_SetSkin = G2API_SetSkin; re.G2API_SetSurfaceOnOff = G2API_SetSurfaceOnOff; re.G2API_SetTime = G2API_SetTime; re.G2API_SkinlessModel = G2API_SkinlessModel; re.G2API_StopBoneAngles = G2API_StopBoneAngles; re.G2API_StopBoneAnglesIndex = G2API_StopBoneAnglesIndex; re.G2API_StopBoneAnim = G2API_StopBoneAnim; re.G2API_StopBoneAnimIndex = G2API_StopBoneAnimIndex; #ifdef _G2_GORE re.G2API_GetNumGoreMarks = G2API_GetNumGoreMarks; re.G2API_AddSkinGore = G2API_AddSkinGore; re.G2API_ClearSkinGore = G2API_ClearSkinGore; #endif // _SOF2 return &re; }