]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - vid_shared.c
default to insert mode instead of replace mode in console
[xonotic/darkplaces.git] / vid_shared.c
index f6078467cc19ecff2a2801190848fdd92e77d629..2eb39f3a770b64a6d16eef3ef97819489fc8b515 100644 (file)
@@ -1,5 +1,6 @@
 
 #include "quakedef.h"
+#include "cdaudio.h"
 
 // global video state
 viddef_t vid;
@@ -20,7 +21,7 @@ int gl_textureunits = 1;
 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;
@@ -67,7 +68,7 @@ cvar_t vid_width = {CVAR_SAVE, "vid_width", "640"};
 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"};
@@ -110,8 +111,10 @@ const char *gl_platformextensions;
 char gl_driver[256];
 
 // GL_ARB_multitexture
+void (GLAPIENTRY *qglMultiTexCoord1f) (GLenum, GLfloat);
 void (GLAPIENTRY *qglMultiTexCoord2f) (GLenum, GLfloat, GLfloat);
 void (GLAPIENTRY *qglMultiTexCoord3f) (GLenum, GLfloat, GLfloat, GLfloat);
+void (GLAPIENTRY *qglMultiTexCoord4f) (GLenum, GLfloat, GLfloat, GLfloat, GLfloat);
 void (GLAPIENTRY *qglActiveTexture) (GLenum);
 void (GLAPIENTRY *qglClientActiveTexture) (GLenum);
 
@@ -169,9 +172,10 @@ void (GLAPIENTRY *qglTexCoordPointer)(GLint size, GLenum type, GLsizei stride, c
 void (GLAPIENTRY *qglArrayElement)(GLint i);
 
 void (GLAPIENTRY *qglColor4f)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
-void (GLAPIENTRY *qglTexCoord2f)(GLfloat s, GLfloat t);
+void (GLAPIENTRY *qglTexCoord1f)(GLfloat s);
 void (GLAPIENTRY *qglTexCoord2f)(GLfloat s, GLfloat t);
 void (GLAPIENTRY *qglTexCoord3f)(GLfloat s, GLfloat t, GLfloat r);
+void (GLAPIENTRY *qglTexCoord4f)(GLfloat s, GLfloat t, GLfloat r, GLfloat q);
 void (GLAPIENTRY *qglVertex2f)(GLfloat x, GLfloat y);
 void (GLAPIENTRY *qglVertex3f)(GLfloat x, GLfloat y, GLfloat z);
 void (GLAPIENTRY *qglBegin)(GLenum mode);
@@ -334,14 +338,14 @@ int GL_CheckExtension(const char *name, const dllfunction_t *funcs, const char *
        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;
        }
 
@@ -360,12 +364,12 @@ int GL_CheckExtension(const char *name, const dllfunction_t *funcs, const char *
                // 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;
        }
 }
@@ -404,8 +408,10 @@ static dllfunction_t opengl110funcs[] =
        {"glTexCoordPointer", (void **) &qglTexCoordPointer},
        {"glArrayElement", (void **) &qglArrayElement},
        {"glColor4f", (void **) &qglColor4f},
+       {"glTexCoord1f", (void **) &qglTexCoord1f},
        {"glTexCoord2f", (void **) &qglTexCoord2f},
        {"glTexCoord3f", (void **) &qglTexCoord3f},
+       {"glTexCoord4f", (void **) &qglTexCoord4f},
        {"glVertex2f", (void **) &qglVertex2f},
        {"glVertex3f", (void **) &qglVertex3f},
        {"glBegin", (void **) &qglBegin},
@@ -473,8 +479,10 @@ static dllfunction_t drawrangeelementsextfuncs[] =
 
 static dllfunction_t multitexturefuncs[] =
 {
+       {"glMultiTexCoord1fARB", (void **) &qglMultiTexCoord1f},
        {"glMultiTexCoord2fARB", (void **) &qglMultiTexCoord2f},
        {"glMultiTexCoord3fARB", (void **) &qglMultiTexCoord3f},
+       {"glMultiTexCoord4fARB", (void **) &qglMultiTexCoord4f},
        {"glActiveTextureARB", (void **) &qglActiveTexture},
        {"glClientActiveTextureARB", (void **) &qglClientActiveTexture},
        {NULL, NULL}
@@ -622,13 +630,13 @@ void VID_CheckExtensions(void)
        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))
@@ -731,23 +739,23 @@ void IN_PostMove(void)
 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;
@@ -775,13 +783,21 @@ void IN_Mouse(usercmd_t *cmd, float mx, float my)
        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;
 
@@ -793,9 +809,9 @@ void IN_Mouse(usercmd_t *cmd, float mx, float my)
        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;
        }
 }
 
@@ -830,7 +846,7 @@ void VID_UpdateGamma(qboolean force)
         && cachewhite[1] == v_color_white_g.value
         && cachewhite[2] == v_color_white_b.value)
                return;
-               
+
        forcenextframe = false;
 
        if (vid_activewindow && v_hwgamma.integer)
@@ -890,7 +906,7 @@ void VID_UpdateGamma(qboolean force)
                                        nt[x] = lhrandom(1, 8.2);
                                }
                        }
-                       
+
                        for (x = 0;x < 3;x++)
                        {
                                nt[x] -= host_realframetime;
@@ -902,13 +918,16 @@ void VID_UpdateGamma(qboolean force)
                                n[x] += nd[x] * host_realframetime;
                                n[x] -= floor(n[x]);
                        }
-               
+
                        for (x = 0, ramp = vid_gammaramps;x < 3;x++)
                                for (y = 0, t = n[x] - 0.75f;y < 256;y++, t += 0.75f * (2.0f / 256.0f))
                                        *ramp++ = cos(t*(M_PI*2.0)) * 32767.0f + 32767.0f;
                }
 
                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
        {
@@ -948,7 +967,7 @@ void VID_Shared_Init(void)
        Cvar_RegisterVariable(&v_color_white_b);
 
        Cvar_RegisterVariable(&v_hwgamma);
-       
+
        Cvar_RegisterVariable(&v_psycho);
 
        Cvar_RegisterVariable(&vid_fullscreen);
@@ -995,12 +1014,10 @@ static void VID_OpenSystems(void)
 {
        R_Modules_Start();
        S_Startup();
-       CDAudio_Startup();
 }
 
 static void VID_CloseSystems(void)
 {
-       CDAudio_Shutdown();
        S_Shutdown();
        R_Modules_Shutdown();
 }
@@ -1060,7 +1077,7 @@ void VID_Open(void)
                        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)
        {