X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=vid_glx.c;h=4a95aa1f8914c50a8ef70ef06c3d47ab2a3bfdbe;hp=1e5bb3a9b5b748216ef8867c2cea0bd7b0b2d9ae;hb=426d3967446d906a9612ae09e6748d3dad26c60f;hpb=398fc2a8c3d53f598cf7a53a4b1a38aef1c0c4d9 diff --git a/vid_glx.c b/vid_glx.c index 1e5bb3a9..4a95aa1f 100644 --- a/vid_glx.c +++ b/vid_glx.c @@ -35,11 +35,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include +#if !defined(__APPLE__) && !defined(__MACH__) #include +#endif #include #include "quakedef.h" +// Tell startup code that we have a client int cl_available = true; //GLX prototypes @@ -90,8 +93,10 @@ static qboolean mouse_active = false, usingmouse = false; static float mouse_x, mouse_y; static int p_mouse_x, p_mouse_y; +#ifndef __APPLE__ cvar_t vid_dga = {CVAR_SAVE, "vid_dga", "1"}; cvar_t vid_dga_mouseaccel = {0, "vid_dga_mouseaccel", "1"}; +#endif qboolean vidmode_ext = false; @@ -254,6 +259,7 @@ static void install_grabs(void) XGrabPointer(vidx11_display, win, True, 0, GrabModeAsync, GrabModeAsync, win, None, CurrentTime); +#ifndef __APPLE__ if (vid_dga.integer) { int MajorVersion, MinorVersion; @@ -261,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 @@ -272,6 +278,7 @@ static void install_grabs(void) } } else +#endif XWarpPointer(vidx11_display, None, win, 0, 0, 0, 0, scr_width / 2, scr_height / 2); XGrabKeyboard(vidx11_display, win, False, GrabModeAsync, GrabModeAsync, CurrentTime); @@ -285,8 +292,10 @@ static void uninstall_grabs(void) if (!vidx11_display || !win) return; +#ifndef __APPLE__ if (vid_dga.integer == 1) XF86DGADirectVideo(vidx11_display, DefaultScreen(vidx11_display), 0); +#endif XUngrabPointer(vidx11_display, CurrentTime); XUngrabKeyboard(vidx11_display, CurrentTime); @@ -329,12 +338,14 @@ static void HandleEvents(void) // mouse moved if (usingmouse) { +#ifndef __APPLE__ if (vid_dga.integer == 1) { mouse_x += event.xmotion.x_root * vid_dga_mouseaccel.value; mouse_y += event.xmotion.y_root * vid_dga_mouseaccel.value; } else +#endif { if (!event.xmotion.send_event) @@ -348,8 +359,8 @@ static void HandleEvents(void) p_mouse_y = event.xmotion.y; } } - else - ui_mouseupdate(event.xmotion.x, event.xmotion.y); + //else + // ui_mouseupdate(event.xmotion.x, event.xmotion.y); break; case ButtonPress: @@ -467,31 +478,29 @@ static void HandleEvents(void) case MapNotify: // window restored vid_hidden = false; - vid_allowhwgamma = true; + vid_activewindow = false; + VID_RestoreSystemGamma(); break; case UnmapNotify: // window iconified/rolledup/whatever vid_hidden = true; - vid_allowhwgamma = false; + vid_activewindow = false; VID_RestoreSystemGamma(); break; case FocusIn: // window is now the input focus - vid_allowhwgamma = true; + vid_activewindow = true; break; case FocusOut: // window is no longer the input focus - vid_allowhwgamma = false; + vid_activewindow = false; VID_RestoreSystemGamma(); break; case EnterNotify: // mouse entered window - vid_allowhwgamma = true; break; case LeaveNotify: // mouse left window - vid_allowhwgamma = false; - VID_RestoreSystemGamma(); break; } } @@ -556,6 +565,7 @@ void VID_Shutdown(void) ctx = NULL; GL_CloseLibrary(); + Key_ClearStates (); } void signal_handler(int sig) @@ -597,7 +607,8 @@ void VID_Finish (void) int usemouse; if (r_render.integer) { - qglFinish(); + if (r_speeds.integer || gl_finish.integer) + qglFinish(); qglXSwapBuffers(vidx11_display, win); } @@ -637,9 +648,12 @@ int VID_GetGamma(unsigned short *ramps) void VID_Init(void) { +#ifndef __APPLE__ Cvar_RegisterVariable (&vid_dga); Cvar_RegisterVariable (&vid_dga_mouseaccel); +#endif InitSig(); // trap evil signals +// COMMANDLINEOPTION: -nomouse disables mouse support (see also vid_mouse cvar) if (COM_CheckParm ("-nomouse") || COM_CheckParm("-safe")) mouse_avail = false; } @@ -661,7 +675,7 @@ void VID_BuildGLXAttrib(int *attrib, int stencil) *attrib++ = None; } -int VID_InitMode(int fullscreen, int width, int height, int bpp, int stencil) +int VID_InitMode(int fullscreen, int width, int height, int bpp) { int i; int attrib[32]; @@ -672,7 +686,12 @@ int VID_InitMode(int fullscreen, int width, int height, int bpp, int stencil) int MajorVersion, MinorVersion; const char *drivername; +#if defined(__APPLE__) && defined(__MACH__) + drivername = "/usr/X11R6/lib/libGL.1.dylib"; +#else drivername = "libGL.so.1"; +#endif +// COMMANDLINEOPTION: -gl_driver selects a GL driver library, default is libGL.so.1 (Linux/BSD) or opengl32.dll (windows) or /usr/X11R6/lib/libGL.1.dylib (MacOSX), if you don't know what this is for, you don't need it i = COM_CheckParm("-gl_driver"); if (i && i < com_argc - 1) drivername = com_argv[i + 1]; @@ -684,7 +703,7 @@ int VID_InitMode(int fullscreen, int width, int height, int bpp, int stencil) 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; } @@ -711,11 +730,11 @@ int VID_InitMode(int fullscreen, int width, int height, int bpp, int stencil) return false; } - VID_BuildGLXAttrib(attrib, stencil); + VID_BuildGLXAttrib(attrib, bpp == 32); 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; } @@ -827,12 +846,16 @@ int VID_InitMode(int fullscreen, int width, int height, int bpp, int stencil) gl_platform = "GLX"; gl_platformextensions = qglXQueryExtensionsString(vidx11_display, vidx11_screen); + gl_videosyncavailable = false; + +// COMMANDLINEOPTION: -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: -novideosync disables GLX_SGI_video_sync (required for video sync control on GLX) gl_videosyncavailable = GL_CheckExtension("GLX_SGI_video_sync", videosyncfuncs, "-novideosync", false); usingmouse = false; vid_hidden = false; - vid_allowhwgamma = true; + vid_activewindow = true; GL_Init(); return true; }