#include "quakedef.h"
+#include "cdaudio.h"
// global video state
viddef_t vid;
int gl_combine_extension = false;
// GL_EXT_compiled_vertex_array
int gl_supportslockarrays = false;
-// GLX_SGI_video_sync or WGL_EXT_swap_control
+// GLX_SGI_swap_control or WGL_EXT_swap_control
int gl_videosyncavailable = false;
// stencil available
int gl_stencil = false;
int gl_dot3arb = false;
// GL_SGIS_texture_edge_clamp
int gl_support_clamptoedge = false;
-// GL_NV_vertex_array_range
-int gl_support_var = false;
-// GL_NV_vertex_array_range2
-int gl_support_var2 = false;
// GL_EXT_texture_filter_anisotropic
int gl_support_anisotropy = false;
int gl_max_anisotropy = 1;
cvar_t vid_height = {CVAR_SAVE, "vid_height", "480"};
cvar_t vid_bitsperpixel = {CVAR_SAVE, "vid_bitsperpixel", "32"};
-cvar_t vid_vsync = {CVAR_SAVE, "vid_vsync", "1"};
+cvar_t vid_vsync = {CVAR_SAVE, "vid_vsync", "0"};
cvar_t vid_mouse = {CVAR_SAVE, "vid_mouse", "1"};
cvar_t gl_combine = {CVAR_SAVE, "gl_combine", "1"};
cvar_t gl_finish = {0, "gl_finish", "0"};
int failed = false;
const dllfunction_t *func;
- Con_DPrintf("checking for %s... ", name);
+ Con_Printf("checking for %s... ", name);
for (func = funcs;func && func->name;func++)
*func->funcvariable = NULL;
if (disableparm && (COM_CheckParm(disableparm) || COM_CheckParm("-safe")))
{
- Con_DPrint("disabled by commandline\n");
+ Con_Print("disabled by commandline\n");
return false;
}
// delay the return so it prints all missing functions
if (failed)
return false;
- Con_DPrint("enabled\n");
+ Con_Print("enabled\n");
return true;
}
else
{
- Con_DPrint("not detected\n");
+ Con_Print("not detected\n");
return false;
}
}
{NULL, NULL}
};
-static dllfunction_t glxvarfuncs[] =
-{
- {"glXAllocateMemoryNV", (void **) &qglAllocateMemoryNV},
- {"glXFreeMemoryNV", (void **) &qglFreeMemoryNV},
- {"glVertexArrayRangeNV", (void **) &qglVertexArrayRangeNV},
- {"glFlushVertexArrayRangeNV", (void **) &qglFlushVertexArrayRangeNV},
- {NULL, NULL}
-};
-
-static dllfunction_t wglvarfuncs[] =
-{
- {"wglAllocateMemoryNV", (void **) &qglAllocateMemoryNV},
- {"wglFreeMemoryNV", (void **) &qglFreeMemoryNV},
- {"glVertexArrayRangeNV", (void **) &qglVertexArrayRangeNV},
- {"glFlushVertexArrayRangeNV", (void **) &qglFlushVertexArrayRangeNV},
- {NULL, NULL}
-};
-
static dllfunction_t stenciltwosidefuncs[] =
{
{"glActiveStencilFaceEXT", (void **) &qglActiveStencilFaceEXT},
gl_textureunits = 1;
gl_combine_extension = false;
gl_supportslockarrays = false;
- gl_videosyncavailable = false;
gl_texture3d = false;
gl_texturecubemap = false;
gl_dot3arb = false;
gl_support_clamptoedge = false;
- gl_support_var = false;
- gl_support_var2 = false;
gl_support_anisotropy = false;
gl_max_anisotropy = 1;
gl_textureshader = false;
if (!GL_CheckExtension("OpenGL 1.1.0", opengl110funcs, NULL, false))
Sys_Error("OpenGL 1.1.0 functions not found\n");
- Con_DPrintf("GL_VENDOR: %s\n", gl_vendor);
- Con_DPrintf("GL_RENDERER: %s\n", gl_renderer);
- Con_DPrintf("GL_VERSION: %s\n", gl_version);
- Con_DPrintf("GL_EXTENSIONS: %s\n", gl_extensions);
- Con_DPrintf("%s_EXTENSIONS: %s\n", gl_platform, gl_platformextensions);
+ Con_Printf("GL_VENDOR: %s\n", gl_vendor);
+ Con_Printf("GL_RENDERER: %s\n", gl_renderer);
+ Con_Printf("GL_VERSION: %s\n", gl_version);
+ Con_Printf("GL_EXTENSIONS: %s\n", gl_extensions);
+ Con_Printf("%s_EXTENSIONS: %s\n", gl_platform, gl_platformextensions);
- Con_DPrint("Checking OpenGL extensions...\n");
+ Con_Print("Checking OpenGL extensions...\n");
+// COMMANDLINEOPTION: GL: -nodrawrangeelements disables GL_EXT_draw_range_elements (renders faster)
if (!GL_CheckExtension("glDrawRangeElements", drawrangeelementsfuncs, "-nodrawrangeelements", true))
GL_CheckExtension("GL_EXT_draw_range_elements", drawrangeelementsextfuncs, "-nodrawrangeelements", false);
+// COMMANDLINEOPTION: GL: -nomtex disables GL_ARB_multitexture (required for faster map rendering)
if (GL_CheckExtension("GL_ARB_multitexture", multitexturefuncs, "-nomtex", false))
{
qglGetIntegerv(GL_MAX_TEXTURE_UNITS_ARB, &gl_textureunits);
+// COMMANDLINEOPTION: GL: -nocombine disables GL_ARB_texture_env_combine or GL_EXT_texture_env_combine (required for bumpmapping and faster map rendering)
gl_combine_extension = GL_CheckExtension("GL_ARB_texture_env_combine", NULL, "-nocombine", false) || GL_CheckExtension("GL_EXT_texture_env_combine", NULL, "-nocombine", false);
+// COMMANDLINEOPTION: GL: -nodot3 disables GL_ARB_texture_env_dot3 (required for bumpmapping)
if (gl_combine_extension)
gl_dot3arb = GL_CheckExtension("GL_ARB_texture_env_dot3", NULL, "-nodot3", false);
}
+// COMMANDLINEOPTION: GL: -notexture3d disables GL_EXT_texture3D (required for spherical lights, otherwise they render as a column)
gl_texture3d = GL_CheckExtension("GL_EXT_texture3D", texture3dextfuncs, "-notexture3d", false);
+// COMMANDLINEOPTION: GL: -nocubemap disables GL_ARB_texture_cube_map (required for bumpmapping)
gl_texturecubemap = GL_CheckExtension("GL_ARB_texture_cube_map", NULL, "-nocubemap", false);
+// COMMANDLINEOPTION: GL: -nocva disables GL_EXT_compiled_vertex_array (renders faster)
gl_supportslockarrays = GL_CheckExtension("GL_EXT_compiled_vertex_array", compiledvertexarrayfuncs, "-nocva", false);
+// COMMANDLINEOPTION: GL: -noedgeclamp disables GL_EXT_texture_edge_clamp or GL_SGIS_texture_edge_clamp (recommended, some cards do not support the other texture clamp method)
gl_support_clamptoedge = GL_CheckExtension("GL_EXT_texture_edge_clamp", NULL, "-noedgeclamp", false) || GL_CheckExtension("GL_SGIS_texture_edge_clamp", NULL, "-noedgeclamp", false);
- if (!strcmp(gl_platform, "GLX"))
- gl_support_var = GL_CheckExtension("GL_NV_vertex_array_range", glxvarfuncs, "-novar", false);
- else if (!strcmp(gl_platform, "WGL"))
- gl_support_var = GL_CheckExtension("GL_NV_vertex_array_range", wglvarfuncs, "-novar", false);
- if (gl_support_var)
- gl_support_var2 = GL_CheckExtension("GL_NV_vertex_array_range2", NULL, "-novar2", false);
-
+// COMMANDLINEOPTION: GL: -noanisotropy disables GL_EXT_texture_filter_anisotropic (allows higher quality texturing)
if ((gl_support_anisotropy = GL_CheckExtension("GL_EXT_texture_filter_anisotropic", NULL, "-noanisotropy", false)))
qglGetIntegerv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &gl_max_anisotropy);
+// COMMANDLINEOPTION: GL: -notextureshader disables GL_NV_texture_shader (required for the Geforce3 water shader, NVIDIA only)
gl_textureshader = GL_CheckExtension("GL_NV_texture_shader", NULL, "-notextureshader", false);
+// COMMANDLINEOPTION: GL: -nostenciltwoside disables GL_EXT_stencil_two_side (accelerates shadow rendering)
gl_support_stenciltwoside = GL_CheckExtension("GL_EXT_stencil_two_side", stenciltwosidefuncs, "-nostenciltwoside", false);
// we don't care if it's an extension or not, they are identical functions, so keep it simple in the rendering code
if (qglDrawRangeElements == NULL)
qglDrawRangeElements = qglDrawRangeElementsEXT;
+// COMMANDLINEOPTION: GL: -noshaderobjects disables GL_ARB_shader_objects (required for vertex shader and fragment shader)
+// COMMANDLINEOPTION: GL: -noshadinglanguage100 disables GL_ARB_shading_language_100 (required for vertex shader and fragment shader)
+// COMMANDLINEOPTION: GL: -novertexshader disables GL_ARB_vertex_shader (currently unused, allows vertex shader effects)
+// COMMANDLINEOPTION: GL: -nofragmentshader disables GL_ARB_fragment_shader (currently unused, allows pixel shader effects)
if ((gl_support_shader_objects = GL_CheckExtension("GL_ARB_shader_objects", shaderobjectsfuncs, "-noshaderobjects", false)))
if ((gl_support_shading_language_100 = GL_CheckExtension("GL_ARB_shading_language_100", NULL, "-noshadinglanguage100", false)))
if ((gl_support_vertex_shader = GL_CheckExtension("GL_ARB_vertex_shader", vertexshaderfuncs, "-novertexshader", false)))
IN_DoMove
===========
*/
-void IN_ProcessMove(usercmd_t *cmd)
+void IN_ProcessMove(void)
{
// get basic movement from keyboard
- CL_BaseMove(cmd);
+ CL_BaseMove();
// OS independent code
IN_PreMove();
// allow mice or other external controllers to add to the move
- IN_Move(cmd);
+ IN_Move();
// OS independent code
IN_PostMove();
}
-void IN_Mouse(usercmd_t *cmd, float mx, float my)
+void IN_Mouse(float mx, float my)
{
int mouselook = (in_mlook.state & 1) || freelook.integer;
float mouse_x, mouse_y;
if(!in_client_mouse)
return;
+ if (cl_prydoncursor.integer)
+ {
+ cl.cmd.cursor_screen[0] += mouse_x * sensitivity.value / vid.realwidth;
+ cl.cmd.cursor_screen[1] += mouse_y * sensitivity.value / vid.realheight;
+ V_StopPitchDrift();
+ return;
+ }
+
// LordHavoc: viewzoom affects mouse sensitivity for sniping
mouse_x *= sensitivity.value * cl.viewzoom;
mouse_y *= sensitivity.value * cl.viewzoom;
// Add mouse X/Y movement to cmd
if ((in_strafe.state & 1) || (lookstrafe.integer && mouselook))
- cmd->sidemove += m_side.value * mouse_x;
+ cl.cmd.sidemove += m_side.value * mouse_x;
else
cl.viewangles[YAW] -= m_yaw.value * mouse_x;
else
{
if ((in_strafe.state & 1) && noclip_anglehack)
- cmd->upmove -= m_forward.value * mouse_y;
+ cl.cmd.upmove -= m_forward.value * mouse_y;
else
- cmd->forwardmove -= m_forward.value * mouse_y;
+ cl.cmd.forwardmove -= m_forward.value * mouse_y;
}
}
}
Cvar_SetValueQuick(&vid_hardwaregammasupported, VID_SetGamma(vid_gammaramps));
+ // if custom gamma ramps failed (Windows stupidity), restore to system gamma
+ if(!vid_hardwaregammasupported.integer)
+ VID_SetGamma(vid_systemgammaramps);
}
else
{
{
// interpret command-line parameters
vid_commandlinecheck = false;
+// COMMANDLINEOPTION: Video: -window performs +vid_fullscreen 0
if (COM_CheckParm("-window") || COM_CheckParm("-safe"))
Cvar_SetValueQuick(&vid_fullscreen, false);
+// COMMANDLINEOPTION: Video: -fullscreen performs +vid_fullscreen 1
if (COM_CheckParm("-fullscreen"))
Cvar_SetValueQuick(&vid_fullscreen, true);
width = 0;
height = 0;
+// COMMANDLINEOPTION: Video: -width <pixels> performs +vid_width <pixels> and also +vid_height <pixels*3/4> if only -width is specified (example: -width 1024 sets 1024x768 mode)
if ((i = COM_CheckParm("-width")) != 0)
width = atoi(com_argv[i+1]);
+// COMMANDLINEOPTION: Video: -height <pixels> performs +vid_height <pixels> and also +vid_width <pixels*4/3> if only -height is specified (example: -height 768 sets 1024x768 mode)
if ((i = COM_CheckParm("-height")) != 0)
height = atoi(com_argv[i+1]);
if (width == 0)
Cvar_SetValueQuick(&vid_width, width);
if (height)
Cvar_SetValueQuick(&vid_height, height);
+// COMMANDLINEOPTION: Video: -bpp <bits> performs +vid_bitsperpixel <bits> (example -bpp 32 or -bpp 16)
if ((i = COM_CheckParm("-bpp")) != 0)
Cvar_SetQuick(&vid_bitsperpixel, com_argv[i+1]);
}
- Con_DPrint("Starting video system\n");
+ Con_Print("Starting video system\n");
success = VID_Mode(vid_fullscreen.integer, vid_width.integer, vid_height.integer, vid_bitsperpixel.integer);
if (!success)
{