X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=vid_glx.c;h=a96e3f9f7faf0e4327336a1970987387e8f6aae9;hb=b630803cb4f4b853046761445f98fefe010b713d;hp=ec9a998b71e0ea795daf4b070f32a2329972c593;hpb=49cfc77279303131ad6a3e3ed057f283970771b1;p=xonotic%2Fdarkplaces.git diff --git a/vid_glx.c b/vid_glx.c index ec9a998b..a96e3f9f 100644 --- a/vid_glx.c +++ b/vid_glx.c @@ -42,6 +42,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "quakedef.h" +// Tell startup code that we have a client int cl_available = true; //GLX prototypes @@ -88,7 +89,7 @@ Atom wm_delete_window_atom; static qboolean mouse_avail = true; -static qboolean mouse_active = false, usingmouse = false; +static qboolean mouse_active = false, usingmouse = false, ignoremousemove = false; static float mouse_x, mouse_y; static int p_mouse_x, p_mouse_y; @@ -266,7 +267,7 @@ static void install_grabs(void) if (!XF86DGAQueryVersion(vidx11_display, &MajorVersion, &MinorVersion)) { // unable to query, probalby not supported - Con_Printf( "Failed to detect XF86DGA Mouse\n" ); + Con_Print( "Failed to detect XF86DGA Mouse\n" ); vid_dga.integer = 0; } else @@ -284,6 +285,7 @@ static void install_grabs(void) mouse_active = true; mouse_x = mouse_y = 0; + ignoremousemove = true; } static void uninstall_grabs(void) @@ -303,6 +305,7 @@ static void uninstall_grabs(void) XUndefineCursor(vidx11_display, win); mouse_active = false; + ignoremousemove = true; } static void HandleEvents(void) @@ -512,6 +515,13 @@ static void HandleEvents(void) XWarpPointer(vidx11_display, None, win, 0, 0, 0, 0, p_mouse_x, p_mouse_y); } + // if told to ignore one mouse move, do so + if (ignoremousemove) + { + ignoremousemove = false; + mouse_x = 0; + mouse_y = 0; + } } static void IN_DeactivateMouse( void ) @@ -533,7 +543,6 @@ static void IN_ActivateMouse( void ) if (!mouse_active) { - mouse_x = mouse_y = 0; // don't spazz install_grabs(); mouse_active = true; } @@ -606,7 +615,8 @@ void VID_Finish (void) int usemouse; if (r_render.integer) { - qglFinish(); + if (r_speeds.integer || gl_finish.integer) + qglFinish(); qglXSwapBuffers(vidx11_display, win); } @@ -651,6 +661,7 @@ void VID_Init(void) Cvar_RegisterVariable (&vid_dga_mouseaccel); #endif InitSig(); // trap evil signals +// COMMANDLINEOPTION: Input: -nomouse disables mouse support (see also vid_mouse cvar) if (COM_CheckParm ("-nomouse") || COM_CheckParm("-safe")) mouse_avail = false; } @@ -686,8 +697,11 @@ int VID_InitMode(int fullscreen, int width, int height, int bpp) #if defined(__APPLE__) && defined(__MACH__) drivername = "/usr/X11R6/lib/libGL.1.dylib"; #else - drivername = "libGL.so.1" + drivername = "libGL.so.1"; #endif +// COMMANDLINEOPTION: Linux GLX: -gl_driver selects a GL driver library, default is libGL.so.1, useful only for using fxmesa or similar, if you don't know what this is for, you don't need it +// COMMANDLINEOPTION: BSD GLX: -gl_driver selects a GL driver library, default is libGL.so.1, useful only for using fxmesa or similar, if you don't know what this is for, you don't need it +// LordHavoc: although this works on MacOSX, it's useless there (as there is only one system libGL) i = COM_CheckParm("-gl_driver"); if (i && i < com_argc - 1) drivername = com_argv[i + 1]; @@ -699,7 +713,7 @@ int VID_InitMode(int fullscreen, int width, int height, int bpp) if (!(vidx11_display = XOpenDisplay(NULL))) { - Con_Printf("Couldn't open the X display\n"); + Con_Print("Couldn't open the X display\n"); return false; } @@ -730,7 +744,7 @@ int VID_InitMode(int fullscreen, int width, int height, int bpp) visinfo = qglXChooseVisual(vidx11_display, vidx11_screen, attrib); if (!visinfo) { - Con_Printf("Couldn't get an RGB, Double-buffered, Depth visual\n"); + Con_Print("Couldn't get an RGB, Double-buffered, Depth visual\n"); return false; } @@ -842,10 +856,19 @@ int VID_InitMode(int fullscreen, int width, int height, int bpp) gl_platform = "GLX"; gl_platformextensions = qglXQueryExtensionsString(vidx11_display, vidx11_screen); + gl_videosyncavailable = false; + +// COMMANDLINEOPTION: Linux GLX: -nogetprocaddress disables GLX_ARB_get_proc_address (not required, more formal method of getting extension functions) +// COMMANDLINEOPTION: BSD GLX: -nogetprocaddress disables GLX_ARB_get_proc_address (not required, more formal method of getting extension functions) +// COMMANDLINEOPTION: MacOSX GLX: -nogetprocaddress disables GLX_ARB_get_proc_address (not required, more formal method of getting extension functions) GL_CheckExtension("GLX_ARB_get_proc_address", getprocaddressfuncs, "-nogetprocaddress", false); +// COMMANDLINEOPTION: Linux GLX: -novideosync disables GLX_SGI_video_sync +// COMMANDLINEOPTION: BSD GLX: -novideosync disables GLX_SGI_video_sync +// COMMANDLINEOPTION: MacOSX GLX: -novideosync disables GLX_SGI_video_sync gl_videosyncavailable = GL_CheckExtension("GLX_SGI_video_sync", videosyncfuncs, "-novideosync", false); usingmouse = false; + ignoremousemove = true; vid_hidden = false; vid_activewindow = true; GL_Init();