static qboolean multithreadedgl;
static qboolean mouse_avail = true;
static qboolean vid_usingmouse = false;
-static float mouse_x, mouse_y;
+static qboolean vid_usinghidecursor = false;
+static qboolean vid_usingnoaccel = false;
static qboolean vid_isfullscreen = false;
static qboolean vid_usingvsync = false;
*height = scr_height;
}
-static void IN_Activate( qboolean grab )
+void VID_SetMouse(qboolean fullscreengrab, qboolean relative, qboolean hidecursor)
{
- if (grab)
+ if (!mouse_avail || !window)
+ relative = hidecursor = false;
+
+ if (relative)
{
- if (!vid_usingmouse && mouse_avail && window)
+ if(vid_usingmouse && (vid_usingnoaccel != !!apple_mouse_noaccel.integer))
+ VID_SetMouse(false, false, false); // ungrab first!
+ if (!vid_usingmouse)
{
Rect winBounds;
CGPoint winCenter;
SelectWindow(window);
- CGDisplayHideCursor(CGMainDisplayID());
// Put the mouse cursor at the center of the window
GetWindowBounds (window, kWindowContentRgn, &winBounds);
}
}
- mouse_x = mouse_y = 0;
vid_usingmouse = true;
+ vid_usingnoaccel = !!apple_mouse_noaccel.integer;
}
}
else
}
CGAssociateMouseAndMouseCursorPosition(true);
- CGDisplayShowCursor(CGMainDisplayID());
vid_usingmouse = false;
}
}
+
+ if (vid_usinghidecursor != hidecursor)
+ {
+ vid_usinghidecursor = hidecursor;
+ if (hidecursor)
+ CGDisplayHideCursor(CGMainDisplayID());
+ else
+ CGDisplayShowCursor(CGMainDisplayID());
+ }
}
#define GAMMA_TABLE_SIZE 256
-void VID_Finish (qboolean allowmousegrab)
+void VID_Finish (void)
{
- qboolean vid_usemouse;
qboolean vid_usevsync;
- // handle the mouse state when windowed if that's changed
- vid_usemouse = false;
- if (allowmousegrab && vid_mouse.integer && !key_consoleactive && (key_dest != key_game || !cls.demoplayback))
- vid_usemouse = true;
- if (!vid_activewindow)
- vid_usemouse = false;
- if (vid_isfullscreen)
- vid_usemouse = true;
- IN_Activate(vid_usemouse);
-
// handle changes of the vsync option
vid_usevsync = (vid_vsync.integer && !cls.timedemo);
if (vid_usingvsync != vid_usevsync)
if (context == NULL && window == NULL)
return;
- IN_Activate(false);
+ VID_SetMouse(false, false, false);
VID_RestoreSystemGamma();
if (context != NULL)
Sys_Quit(0);
}
-static void VID_BuildAGLAttrib(GLint *attrib, qboolean stencil, qboolean fullscreen, qboolean stereobuffer)
+static void VID_BuildAGLAttrib(GLint *attrib, qboolean stencil, qboolean fullscreen, qboolean stereobuffer, int samples)
{
*attrib++ = AGL_RGBA;
- *attrib++ = AGL_RED_SIZE;*attrib++ = 1;
- *attrib++ = AGL_GREEN_SIZE;*attrib++ = 1;
- *attrib++ = AGL_BLUE_SIZE;*attrib++ = 1;
+ *attrib++ = AGL_RED_SIZE;*attrib++ = stencil ? 8 : 5;
+ *attrib++ = AGL_GREEN_SIZE;*attrib++ = stencil ? 8 : 5;
+ *attrib++ = AGL_BLUE_SIZE;*attrib++ = stencil ? 8 : 5;
*attrib++ = AGL_DOUBLEBUFFER;
- *attrib++ = AGL_DEPTH_SIZE;*attrib++ = 1;
+ *attrib++ = AGL_DEPTH_SIZE;*attrib++ = stencil ? 24 : 16;
// if stencil is enabled, ask for alpha too
if (stencil)
{
*attrib++ = AGL_STENCIL_SIZE;*attrib++ = 8;
- *attrib++ = AGL_ALPHA_SIZE;*attrib++ = 1;
+ *attrib++ = AGL_ALPHA_SIZE;*attrib++ = 8;
}
if (fullscreen)
*attrib++ = AGL_FULLSCREEN;
if (stereobuffer)
*attrib++ = AGL_STEREO;
+#ifdef AGL_SAMPLE_BUFFERS_ARB
+#ifdef AGL_SAMPLES_ARB
+ if (samples > 1)
+ {
+ *attrib++ = AGL_SAMPLE_BUFFERS_ARB;
+ *attrib++ = 1;
+ *attrib++ = AGL_SAMPLES_ARB;
+ *attrib++ = samples;
+ }
+#endif
+#endif
+
*attrib++ = AGL_NONE;
}
-int VID_InitMode(int fullscreen, int width, int height, int bpp, int refreshrate, int stereobuffer)
+int VID_InitMode(int fullscreen, int width, int height, int bpp, int refreshrate, int stereobuffer, int samples)
{
const EventTypeSpec winEvents[] =
{
GetEventTypeCount(winEvents), winEvents, window, NULL);
// Create the desired attribute list
- VID_BuildAGLAttrib(attributes, bpp == 32, fullscreen, stereobuffer);
+ VID_BuildAGLAttrib(attributes, bpp == 32, fullscreen, stereobuffer, samples);
if (!fullscreen)
{
if ((qglGetString = (const GLubyte* (GLAPIENTRY *)(GLenum name))GL_GetProcAddress("glGetString")) == NULL)
Sys_Error("glGetString not found in %s", gl_driver);
- gl_renderer = (const char *)qglGetString(GL_RENDERER);
- gl_vendor = (const char *)qglGetString(GL_VENDOR);
- gl_version = (const char *)qglGetString(GL_VERSION);
- gl_extensions = (const char *)qglGetString(GL_EXTENSIONS);
+ gl_platformextensions = "";
gl_platform = "AGL";
gl_videosyncavailable = true;
multithreadedgl = false;
vid_isfullscreen = fullscreen;
vid_usingmouse = false;
+ vid_usinghidecursor = false;
vid_hidden = false;
vid_activewindow = true;
sound_active = true;
case kEventMouseDragged:
{
HIPoint deltaPos;
+ HIPoint windowPos;
GetEventParameter(theEvent, kEventParamMouseDelta, typeHIPoint, NULL, sizeof(deltaPos), NULL, &deltaPos);
+ GetEventParameter(theEvent, kEventParamWindowMouseLocation, typeHIPoint, NULL, sizeof(windowPos), NULL, &windowPos);
- mouse_x += deltaPos.x;
- mouse_y += deltaPos.y;
+ if (vid_usingmouse)
+ {
+ in_mouse_x += deltaPos.x;
+ in_mouse_y += deltaPos.y;
+ }
+
+ in_windowmouse_x = windowPos.x;
+ in_windowmouse_y = windowPos.y;
break;
}
void IN_Move (void)
{
- if (mouse_avail)
- {
- in_mouse_x = mouse_x;
- in_mouse_y = mouse_y;
- }
- mouse_x = 0;
- mouse_y = 0;
}