40#include "../../common/tracing.h"
41#include "../ui/ui_windows.h"
42#include "../../ports/system.h"
116 const size_t maxLength = strlen(msg);
119 for (
int i = 0;
i < maxLength;
i +=
length) {
150 glEnable(GL_SCISSOR_TEST);
152 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
154 glDisable(GL_SCISSOR_TEST);
164 for (
i = 0;
i < 4;
i++) {
182 for (
i = 0;
i < 4;
i++) {
194 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
197 glClear(GL_STENCIL_BUFFER_BIT);
199 glDepthFunc(GL_LEQUAL);
202 glDepthRange(0.0f, 1.0f);
229 Com_Printf(
"Modified render related cvars\n");
248#ifndef GL_VERSION_ES_CM_1_0
253 glDrawBuffer(GL_FRONT);
255 glDrawBuffer(GL_BACK);
300 static int lastFrame = 0;
301 int deltaMsec =
cl.
time - lastFrame;
310 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
389 glClear(GL_DEPTH_BUFFER_BIT);
424 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
457#if SDL_VERSION_ATLEAST(2,0,0)
458 SDL_SetWindowBrightness(
cls.window, g);
460 SDL_SetGamma(g, g, g);
470#if SDL_VERSION_ATLEAST(2,0,0)
471 SDL_GL_SwapWindow(
cls.window);
473 SDL_GL_SwapBuffers();
478 {
"r_listimages",
R_ImageList_f,
"Show all loaded images on game console"},
481 {
"r_listmodels",
R_ModModellist_f,
"Show all loaded models on game console"},
482 {
"r_strings",
R_Strings_f,
"Print openGL vendor and other strings"},
485 {
nullptr,
nullptr,
nullptr}
493 Com_Printf(
"%s exceeded max supported texture size\n", cvar->
name);
532 int glslVersionMajor, glslVersionMinor;
533 sscanf(cvar->
string,
"%d.%d", &glslVersionMajor, &glslVersionMinor);
581 r_nocull =
Cvar_Get(
"r_nocull",
"0", 0,
"Don't perform culling for brushes and entities");
601 r_wire =
Cvar_Get(
"r_wire",
"0", 0,
"Draw the scene in wireframe mode");
615 r_intel_hack =
Cvar_Get(
"r_intel_hack",
"1",
CVAR_ARCHIVE,
"Intel cards have no shaders until this is set to 0 - to it to a value > 1 to not limit the max texture resolution");
633 r_particles =
Cvar_Get(
"r_particles",
"1", 0,
"Activate or deactivate particle rendering");
677 if (screenRatio > normRatio) {
681 }
else if (screenRatio < normRatio) {
729 Com_Printf(
"Failed to set video mode %dx%d %s.\n",
731 (newCtx.
fullscreen ?
"fullscreen" :
"windowed"));
754 return (uintptr_t)SDL_GL_GetProcAddress(functionName);
759 const char* s = strstr(functionName,
"###");
764 const char* replace[] = {
"EXT",
"OES",
"ARB"};
767 const size_t replaceNo =
lengthof(replace);
768 for (
size_t i = 0;
i < replaceNo;
i++) {
790#ifdef GL_VERSION_ES_CM_1_0
791 if(strcmp(extension,
"GL_ARB_texture_non_power_of_two") == 0) {
792 extension =
"GL_OES_texture_npot";
795 const char* s = strstr(extension,
"###");
799 const char* replace[] = {
"ARB",
"EXT",
"OES"};
802 const size_t replaceNo =
lengthof(replace);
804 for (
i = 0;
i < replaceNo;
i++) {
821#ifdef GL_VERSION_ES_CM_1_0
822 if (strcmp(extension,
"GL_ARB_multitexture") == 0 ||
823 strcmp(extension,
"GL_ARB_vertex_buffer_object") == 0) {
825 Com_Printf(
"Overriding %s - it is always present in GLES\n", extension);
832#define R_CheckGLVersion(max, min) (r_config.glVersionMajor > max || (r_config.glVersionMajor == max && r_config.glVersionMinor >= min))
846 while(*versionNumbers && strchr(
"0123456789", *versionNumbers) ==
nullptr) {
849 if( *versionNumbers )
855 qglActiveTexture =
nullptr;
856 qglClientActiveTexture =
nullptr;
859 qglGenBuffers =
nullptr;
860 qglDeleteBuffers =
nullptr;
861 qglBindBuffer =
nullptr;
862 qglBufferData =
nullptr;
865 qglCreateShader =
nullptr;
866 qglDeleteShader =
nullptr;
867 qglShaderSource =
nullptr;
868 qglCompileShader =
nullptr;
869 qglGetShaderiv =
nullptr;
870 qglGetShaderInfoLog =
nullptr;
871 qglCreateProgram =
nullptr;
872 qglDeleteProgram =
nullptr;
873 qglAttachShader =
nullptr;
874 qglDetachShader =
nullptr;
875 qglLinkProgram =
nullptr;
876 qglUseProgram =
nullptr;
877 qglGetActiveUniform =
nullptr;
878 qglGetProgramiv =
nullptr;
879 qglGetProgramInfoLog =
nullptr;
880 qglGetUniformLocation =
nullptr;
881 qglUniform1i =
nullptr;
882 qglUniform1f =
nullptr;
883 qglUniform1fv =
nullptr;
884 qglUniform2fv =
nullptr;
885 qglUniform3fv =
nullptr;
886 qglUniform4fv =
nullptr;
887 qglGetAttribLocation =
nullptr;
888 qglUniformMatrix4fv =
nullptr;
891 qglEnableVertexAttribArray =
nullptr;
892 qglDisableVertexAttribArray =
nullptr;
893 qglVertexAttribPointer =
nullptr;
896 qglIsRenderbufferEXT =
nullptr;
897 qglBindRenderbufferEXT =
nullptr;
898 qglDeleteRenderbuffersEXT =
nullptr;
899 qglGenRenderbuffersEXT =
nullptr;
900 qglRenderbufferStorageEXT =
nullptr;
901 qglRenderbufferStorageMultisampleEXT =
nullptr;
902 qglGetRenderbufferParameterivEXT =
nullptr;
903 qglIsFramebufferEXT =
nullptr;
904 qglBindFramebufferEXT =
nullptr;
905 qglDeleteFramebuffersEXT =
nullptr;
906 qglGenFramebuffersEXT =
nullptr;
907 qglCheckFramebufferStatusEXT =
nullptr;
908 qglFramebufferTexture1DEXT =
nullptr;
909 qglFramebufferTexture2DEXT =
nullptr;
910 qglFramebufferTexture3DEXT =
nullptr;
911 qglFramebufferRenderbufferEXT =
nullptr;
912 qglGetFramebufferAttachmentParameterivEXT =
nullptr;
913 qglGenerateMipmapEXT =
nullptr;
914 qglDrawBuffers =
nullptr;
922#ifndef GL_VERSION_ES_CM_1_0
925 Com_Printf(
"using GL_ARB_texture_compression\n");
939 Com_Printf(
"using GL_ARB_texture_non_power_of_two\n");
943 Com_Printf(
"ignoring GL_ARB_texture_non_power_of_two\n");
978#ifndef GL_VERSION_ES_CM_1_0
1023 Com_Printf(
"GLSL version guaranteed to be supported by OpenGL implementation postfixed by vender supplied info: %i.%i\n",
1027 Com_Printf(
"GLSL shaders unsupported by OpenGL implementation.\n");
1053 if (qglDeleteRenderbuffersEXT && qglDeleteFramebuffersEXT && qglGenFramebuffersEXT && qglBindFramebufferEXT
1054 && qglFramebufferTexture2DEXT && qglBindRenderbufferEXT && qglRenderbufferStorageEXT && qglCheckFramebufferStatusEXT) {
1055#ifdef GL_VERSION_ES_CM_1_0
1066 Com_Printf(
"using GL_ARB_framebuffer_object\n");
1071 Com_Printf(
"skipping GL_ARB_framebuffer_object - not every needed extension is supported\n");
1081 Com_Printf(
"Framebuffer objects unsupported by OpenGL implementation.\n");
1118#ifdef GL_VERSION_ES_CM_1_0
1120 Com_Printf(
"max varying floats: %i\n", tmpInteger * 4);
1122 Com_Printf(
"max fragment uniform components: %i\n", tmpInteger * 4);
1124 Com_Printf(
"max vertex uniform components: %i\n", tmpInteger * 4);
1126 glGetIntegerv(GL_MAX_VARYING_FLOATS, &tmpInteger);
1127 Com_Printf(
"max varying floats: %i\n", tmpInteger);
1128 glGetIntegerv(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, &tmpInteger);
1129 Com_Printf(
"max fragment uniform components: %i\n", tmpInteger);
1130 glGetIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS, &tmpInteger);
1131 Com_Printf(
"max vertex uniform components: %i\n", tmpInteger);
1160 Com_Printf(
"Using high resolution globe textures as requested.\n");
1163 Com_Printf(
"Warning: high resolution globe textures requested, but could not be found; falling back to medium resolution globe textures.\n");
1165 Com_Printf(
"Using medium resolution globe textures as requested.\n");
1170 Com_Printf(
"Warning: medium resolution globe textures requested, but could not be found; falling back to low resolution globe textures.\n");
1172 Com_Printf(
"Using low resolution globe textures as requested.\n");
1187#ifndef GL_VERSION_ES_CM_1_0
1217#define INTEL_TEXTURE_RESOLUTION 1024
1225 if (!
Q_strcasecmp((
const char*)glGetString(GL_RENDERER),
"gdi generic"))
1227 "Update your graphic card drivers.");
1229 if (!
Q_strcasecmp((
const char*)glGetString(GL_RENDERER),
"Software Rasterizer"))
1231 "Update your graphic card drivers.");
1234 Com_Printf(
"You might want to activate texture compression if you have visual artifacts.\n");
1237 Com_Printf(
"Disabling shaders for Intel chips - see cvar r_intel_hack\n");
1259 Cvar_Set(
"r_vendor_non_intel",
"1");
renderer_threadstate_t r_threadstate
void R_FontShutdown(void)
frees the SDL_ttf fonts
void R_Color(const vec4_t rgba)
Change the color to given value.
bool VID_GetModeInfo(int modeIndex, vidmode_t *modeInfo)
void setDefaults(void)
Sets clean weather, but generate some parameters usable for easily changing it into the worse varieti...
void render(void)
Draws weather effects.
void update(int milliseconds)
Updates weather for the time passed; handles particle creation/removal automatically.
void changeTo(weatherTypes weather)
changes to weather of given type; parameters are randomized
void Cmd_TableAddList(const cmdList_t *cmdList)
void Cmd_TableRemoveList(const cmdList_t *cmdList)
void Com_Error(int code, const char *fmt,...)
void Com_Printf(const char *const fmt,...)
bool Cvar_PendingCvars(int flags)
Checks whether there are pending cvars for the given flags.
cvarChangeListener_t * Cvar_RegisterChangeListener(const char *varName, cvarChangeListenerFunc_t listenerFunc)
Registers a listener that is executed each time a cvar changed its value.
void Com_SetRenderModified(bool modified)
void Cvar_SetValue(const char *varName, float value)
Expands value to a string and calls Cvar_Set.
cvar_t * Cvar_Set(const char *varName, const char *value,...)
Sets a cvar value.
bool Cvar_SetCheckFunction(const char *varName, bool(*check)(cvar_t *cvar))
Set a checker function for cvar values.
bool Com_IsRenderModified(void)
bool Cvar_AssertValue(cvar_t *cvar, float minVal, float maxVal, bool shouldBeIntegral)
Checks cvar values.
void Cvar_Reset(cvar_t *cvar)
Sets the cvar value back to the old value.
void Cvar_ClearVars(int flags)
cvar_t * Cvar_Get(const char *var_name, const char *var_value, int flags, const char *desc)
Init or return a cvar.
void RotatePointAroundVector(vec3_t dst, const vec3_t dir, const vec3_t point, float degrees)
Rotate a point around a given vector.
bool Q_IsPowerOfTwo(int i)
Checks whether i is power of two value.
void AngleVectors(const vec3_t angles, vec3_t forward, vec3_t right, vec3_t up)
Create the rotation matrix in order to rotate something.
void R_ResetArrayState(void)
void R_RenderBlendWarpBspRRefs(void)
Draw all warped translucent bsp surfaces via warp shader and with blend enabled.
void R_RenderOpaqueBspRRefs(void)
Draw all simple opaque bsp surfaces with multitexture enabled and light enabled.
void R_GetLevelSurfaceLists(void)
Fills the surface chains for the current worldlevel and hide other levels.
void R_RenderOpaqueWarpBspRRefs(void)
Draw all warped opaque bsp surfaces via warp shader.
void R_DrawBspNormals(int tile)
Developer tool for viewing BSP vertex normals. Only Phong interpolated surfaces show their normals wh...
void R_RenderMaterialBspRRefs(void)
void R_RenderBlendBspRRefs(void)
Draw all translucent bsp surfaces with multitexture enabled and blend enabled.
void R_AddBspRRef(const mBspModel_t *model, const vec3_t origin, const vec3_t angles, const bool forceVisibility)
Adds bsp render references.
void R_RenderAlphaTestBspRRefs(void)
void R_ClearBspRRefs(void)
void R_RenderFlareBspRRefs(void)
void R_AddCorona(const vec3_t org, float radius, const vec3_t color)
void R_DrawBoundingBoxes(void)
void R_DrawInitLocal(void)
Loads some textures and init the 3d globe.
void R_DrawSpecialEntities(const entity_t *ents)
entity_t * r_blend_mesh_entities
void R_DrawOpaqueMeshEntities(entity_t *ents)
void R_DrawBlendMeshEntities(entity_t *ents)
entity_t * r_null_entities
void R_GetEntityLists(void)
Primary entry point for drawing all entities.
void R_DrawEntityEffects(void)
Draws shadow and highlight effects for the entities (actors)
entity_t * r_special_entities
entity_t * r_opaque_mesh_entities
void R_DrawNullEntities(const entity_t *ents)
Draw entities which models couldn't be loaded.
#define MAX_ENTITY_LIGHTS
static const char * R_TranslateError(GLenum error)
void R_FontListCache_f(void)
Console command binding to show the font cache.
void R_InitFBObjects(void)
void R_ShutdownFBObjects(void)
Delete all registered framebuffer and render buffer objects, clear memory.
void R_DrawBloom(void)
handle post-processing bloom
void(APIENTRY * BlitFramebuffer_t)(GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum)
void(APIENTRY * Uniform1i_t)(GLint location, GLint i)
void(APIENTRY * Uniform4fv_t)(GLint location, int count, GLfloat *f)
void(APIENTRY * FramebufferRenderbufferEXT_t)(GLenum, GLenum, GLenum, GLuint)
void(APIENTRY * UseProgram_t)(GLuint id)
void(APIENTRY * GetProgramInfoLog_t)(GLuint id, GLuint maxlen, GLuint *len, GLchar *dest)
void(APIENTRY * Uniform1fv_t)(GLint location, int count, GLfloat *f)
void(APIENTRY * DrawBuffers_t)(GLsizei, const GLenum *)
GLboolean(APIENTRY * IsRenderbufferEXT_t)(GLuint)
void(APIENTRY * GetShaderiv_t)(GLuint id, GLenum field, GLuint *dest)
void(APIENTRY * GetShaderInfoLog_t)(GLuint id, GLuint maxlen, GLuint *len, GLchar *dest)
void(APIENTRY * LinkProgram_t)(GLuint id)
void(APIENTRY * EnableVertexAttribArray_t)(GLuint index)
GLuint(APIENTRY * CreateShader_t)(GLenum type)
void(APIENTRY * FramebufferTexture3DEXT_t)(GLenum, GLenum, GLenum, GLuint, GLint, GLint)
void(APIENTRY * FramebufferTexture1DEXT_t)(GLenum, GLenum, GLenum, GLuint, GLint)
void(APIENTRY * FramebufferTexture2DEXT_t)(GLenum, GLenum, GLenum, GLuint, GLint)
void(APIENTRY * DetachShader_t)(GLuint prog, GLuint shader)
void(APIENTRY * DeleteBuffers_t)(GLuint count, GLuint *id)
QGL_EXTERN GLsizei const GLvoid * data
void(APIENTRY * BindRenderbufferEXT_t)(GLenum, GLuint)
void(APIENTRY * GetActiveUniforms_t)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name)
void(APIENTRY * RenderbufferStorageMultisampleEXT_t)(GLenum, GLsizei, GLenum, GLsizei, GLsizei)
QGL_EXTERN GLuint GLsizei GLsizei * length
void(APIENTRY * DeleteProgram_t)(GLuint id)
GLboolean(APIENTRY * IsFramebufferEXT_t)(GLuint)
void(APIENTRY * DeleteRenderbuffersEXT_t)(GLsizei, const GLuint *)
void(APIENTRY * Uniform3fv_t)(GLint location, int count, GLfloat *f)
void(APIENTRY * ShaderSource_t)(GLuint id, GLuint count, GLchar **sources, GLuint *len)
void(APIENTRY * GenBuffers_t)(GLuint count, GLuint *id)
void(APIENTRY * GenFramebuffersEXT_t)(GLsizei, GLuint *)
void(APIENTRY * VertexAttribPointer_t)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer)
void(APIENTRY * UniformMatrix4fv_t)(GLint location, int count, GLboolean transpose, GLfloat *v)
void(APIENTRY * GenerateMipmapEXT_t)(GLenum)
void(APIENTRY * DeleteShader_t)(GLuint id)
GLint(APIENTRY * GetAttribLocation_t)(GLuint id, const GLchar *name)
void(APIENTRY * Uniform2fv_t)(GLint location, int count, GLfloat *f)
void(APIENTRY * BufferData_t)(GLenum target, GLsizei size, const GLvoid *data, GLenum usage)
void(APIENTRY * DeleteFramebuffersEXT_t)(GLsizei, const GLuint *)
void(APIENTRY * RenderbufferStorageEXT_t)(GLenum, GLenum, GLsizei, GLsizei)
void(APIENTRY * ClientActiveTexture_t)(GLenum texture)
GLenum(APIENTRY * CheckFramebufferStatusEXT_t)(GLenum)
void(APIENTRY * BindFramebufferEXT_t)(GLenum, GLuint)
void(APIENTRY * ActiveTexture_t)(GLenum texture)
void(APIENTRY * CompileShader_t)(GLuint id)
GLuint(APIENTRY * CreateProgram_t)(void)
void(APIENTRY * GetRenderbufferParameterivEXT_t)(GLenum, GLenum, GLint *)
void(APIENTRY * Uniform1f_t)(GLint location, GLfloat f)
GLint(APIENTRY * GetUniformLocation_t)(GLuint id, const GLchar *name)
void(APIENTRY * GetProgramiv_t)(GLuint id, GLenum field, GLuint *dest)
void(APIENTRY * BindBuffer_t)(GLenum target, GLuint id)
void(APIENTRY * AttachShader_t)(GLuint prog, GLuint shader)
void(APIENTRY * GenRenderbuffersEXT_t)(GLsizei, GLuint *)
QGL_EXTERN const GLuint *QGL_EXTERN GLuint *QGL_EXTERN GLenum
void(APIENTRY * DisableVertexAttribArray_t)(GLuint index)
void(APIENTRY * GetFramebufferAttachmentParameterivEXT_t)(GLenum, GLenum, GLenum, GLint *)
#define GL_MAX_VARYING_VECTORS
#define GL_MAX_RENDERBUFFER_SIZE_EXT
#define GL_MAX_VERTEX_ATTRIBS
#define GL_MAX_TEXTURE_COORDS
#define GL_MAX_VERTEX_UNIFORM_VECTORS
#define GL_MAX_FRAGMENT_UNIFORM_VECTORS
#define GL_SHADING_LANGUAGE_VERSION
#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB
Pseudoinstanced grass generation and rendering.
void R_ImageList_f(void)
Shows all loaded images.
void R_TextureAlphaMode(const char *string)
void R_TextureSolidMode(const char *string)
void R_ShutdownImages(void)
bool R_ImageExists(const char *pname,...)
void R_TextureMode(const char *string)
void R_UpdateSustainedLights(void)
Updates state of sustained lights; should be called once per frame right before world rendering.
#define LIGHTMAP_MAX_PAGE_SIZE
#define LIGHTMAP_DEFAULT_PAGE_SIZE
local graphics definitions
void R_DrawParticles(void)
bool R_InitGraphics(const viddefContext_t *context)
Init the SDL window.
cvar_t * r_default_hardness
static uintptr_t R_GetProcAddressExt(const char *functionName)
static void R_Strings_f(void)
Prints some OpenGL strings.
static cvar_t * r_texturesolidmode
static void R_VerifyDriver(void)
Checks whether we have hardware acceleration.
static void R_PrintInfo(const char *pre, const char *msg)
cvar_t * r_screenshot_jpeg_quality
Weather r_battlescapeWeather
cvar_t * r_overridematerial
static bool R_CvarPrograms(cvar_t *cvar)
static cvar_t * r_texturemode
static void R_RegisterImageVars(void)
void R_SetupFrustum(void)
cvar_t * r_screenshot_format
static cvar_t * r_maxtexres
static bool R_CvarCheckMaxLightmap(cvar_t *cvar)
static void R_ClearScene(void)
cvar_t * r_ext_texture_compression
cvar_t * r_default_specular
static bool R_CvarCheckMultisample(cvar_t *cvar)
static bool R_CvarGLSLVersionCheck(cvar_t *cvar)
Callback that is called when the r_glsl_version cvar is changed,.
#define R_CheckGLVersion(max, min)
static cvar_t * r_texturealphamode
static cvar_t * r_ext_s3tc_compression
static void R_EnforceVersion(void)
We need at least opengl version 1.2.1.
static void R_UpdateVidDef(const viddefContext_t *context)
static void R_UpdateWeather(const char *cvarName, const char *oldValue, const char *newValue, void *data)
static void R_RegisterSystemVars(void)
cvar_t * r_stencilshadows
static bool R_SearchForVendor(const char *vendor)
Searches vendor and renderer GL strings for the given vendor id.
static const cmdList_t r_commands[]
cvar_t * r_dynamic_lights
static cvar_t * r_ext_nonpoweroftwo
static bool R_CheckExtension(const char *extension)
Checks for an OpenGL extension that was announced via the OpenGL ext string. If the given extension s...
static cvar_t * r_intel_hack
cvar_t * r_glsl_version
The GLSL version being used (not necessarily a supported version by the OpenGL implementation)....
static void R_Clear(void)
Clears the screens color and depth buffer.
static bool R_CvarCheckDynamicLights(cvar_t *cvar)
static uintptr_t R_GetProcAddress(const char *functionName)
#define INTEL_TEXTURE_RESOLUTION
static bool R_CvarCheckWeather(cvar_t *cvar)
static bool R_CvarPostProcess(cvar_t *cvar)
static cvar_t * r_deluxemap
cvar_t * r_debug_tangents
static void R_InitExtensions(void)
Check and load all needed and supported opengl extensions.
void R_UpdateDefaultMaterial(const char *cvarName, const char *oldValue, const char *newValue, void *data)
Change listener callback for material value cvars.
void R_InitMiscTexture(void)
void R_ScreenShot_f(void)
void R_ModModellist_f(void)
Prints all loaded models.
model_t * r_mapTiles[MAX_MAPTILES]
The world model(s)
void R_RestartPrograms_f(void)
Reloads the glsl shaders.
void R_InitPrograms(void)
void R_ShutdownPrograms(void)
void R_SphereInit(void)
Creates the spheres we need for rendering the 3d globe.
Functions to generate and render spheres.
void R_SetDefaultState(void)
void R_EnableMultisample(bool enable)
void R_EnableBlend(bool enable)
void R_EnableFog(bool enable)
void R_ShutdownThreads(void)
Weather effects rendering subsystem header file.
#define Q_strcasecmp(a, b)
void Q_strncpyz(char *dest, const char *src, size_t destsize)
Safe strncpy that ensures a trailing zero.
const char * Q_stristr(const char *str, const char *substr)
Checks in case insensitive manner whether str contains substr.
bool Q_strreplace(const char *source, const char *pattern, const char *replace, char *dest, size_t destsize)
Replaces the first occurence of the given pattern in the source string with the given replace string.
This is a cvar definition. Cvars can be user modified and used in our menus e.g.
int maxVertexTextureImageUnits
hardwareType_t hardwareType
int gl_compressed_alpha_format
const char * rendererString
int gl_compressed_solid_format
const char * versionString
const char * extensionsString
const char * vendorString
light_t staticLights[MAX_STATIC_LIGHTS]
light_t dynamicLights[MAX_GL_LIGHTS]
Contains the game screen context, everything that is needed to create the graphic context....
void Sys_Sleep(int milliseconds)
Calls the win32 sleep function.
void UI_InvalidateStack(void)
Invalidate all windows of the current stack.
#define DotProduct(x, y)
Returns the distance between two 3-dimensional vectors.
#define VectorScale(in, scale, out)