#include <X11/cursorfont.h>
#include <X11/extensions/XShm.h>
-#if !defined(__APPLE__) && !defined(__MACH__)
+#if !defined(__APPLE__) && !defined(__MACH__) && !defined(SUNOS)
#include <X11/extensions/xf86dga.h>
#endif
#include <X11/extensions/xf86vmode.h>
static qboolean mouse_avail = true;
static qboolean vid_usingmouse = false;
-static qboolean vid_usemouse = false;
static qboolean vid_usingvsync = false;
static qboolean vid_usevsync = false;
-static qboolean ignoremousemove = false;
static float mouse_x, mouse_y;
static int p_mouse_x, p_mouse_y;
-#ifndef __APPLE__
+#if !defined(__APPLE__) && !defined(SUNOS)
cvar_t vid_dga = {CVAR_SAVE, "vid_dga", "1"};
cvar_t vid_dga_mouseaccel = {0, "vid_dga_mouseaccel", "1"};
#endif
static int win_x, win_y;
-static int scr_width, scr_height;
-
static XF86VidModeModeInfo **vidmodes;
static int num_vidmodes;
static qboolean vid_isfullscreen = false;
case XK_KP_Subtract: key = K_KP_MINUS; break;
case XK_KP_Divide: key = K_KP_SLASH; break;
+ case XK_section: key = '~'; break;
+
default:
if (keysym < 32 && keysym > 126)
break;
static void IN_Activate (qboolean grab)
{
- if (!mouse_avail || !vidx11_display || !win)
+ if (!vidx11_display)
return;
-
if (grab)
{
- if (!vid_usingmouse)
+ if (!vid_usingmouse && mouse_avail && win)
{
XWindowAttributes attribs_1;
XSetWindowAttributes attribs_2;
XGrabPointer(vidx11_display, win, True, 0, GrabModeAsync, GrabModeAsync, win, None, CurrentTime);
-#ifndef __APPLE__
+#if !defined(__APPLE__) && !defined(SUNOS)
if (vid_dga.integer)
{
int MajorVersion, MinorVersion;
// unable to query, probably not supported
Con_Print( "Failed to detect XF86DGA Mouse\n" );
Cvar_SetValueQuick(&vid_dga, 0);
- XWarpPointer(vidx11_display, None, win, 0, 0, 0, 0, scr_width / 2, scr_height / 2);
+ XWarpPointer(vidx11_display, None, win, 0, 0, 0, 0, vid.width / 2, vid.height / 2);
}
else
{
}
else
#endif
- XWarpPointer(vidx11_display, None, win, 0, 0, 0, 0, scr_width / 2, scr_height / 2);
+ XWarpPointer(vidx11_display, None, win, 0, 0, 0, 0, vid.width / 2, vid.height / 2);
XGrabKeyboard(vidx11_display, win, False, GrabModeAsync, GrabModeAsync, CurrentTime);
mouse_x = mouse_y = 0;
- ignoremousemove = true;
+ cl_ignoremousemove = true;
vid_usingmouse = true;
}
}
{
if (vid_usingmouse)
{
-#ifndef __APPLE__
- if (vid_dga.integer == 1)
+#if !defined(__APPLE__) && !defined(SUNOS)
+ if (vid_dga.integer)
XF86DGADirectVideo(vidx11_display, DefaultScreen(vidx11_display), 0);
#endif
XUngrabPointer(vidx11_display, CurrentTime);
XUngrabKeyboard(vidx11_display, CurrentTime);
- // inviso cursor
- XUndefineCursor(vidx11_display, win);
+ // inviso cursor
+ if (win)
+ XUndefineCursor(vidx11_display, win);
- ignoremousemove = true;
+ cl_ignoremousemove = true;
vid_usingmouse = false;
}
}
// mouse moved
if (vid_usingmouse)
{
-#ifndef __APPLE__
+#if !defined(__APPLE__) && !defined(SUNOS)
if (vid_dga.integer == 1)
{
mouse_x += event.xmotion.x_root * vid_dga_mouseaccel.value;
{
mouse_x += event.xmotion.x - p_mouse_x;
mouse_y += event.xmotion.y - p_mouse_y;
- if (abs(scr_width/2 - event.xmotion.x) > scr_width / 4 || abs(scr_height/2 - event.xmotion.y) > scr_height / 4)
+ if (abs(vid.width/2 - event.xmotion.x) > vid.width / 4 || abs(vid.height/2 - event.xmotion.y) > vid.height / 4)
dowarp = true;
}
p_mouse_x = event.xmotion.x;
if (dowarp)
{
/* move the mouse to the window center again */
- p_mouse_x = scr_width / 2;
- p_mouse_y = scr_height / 2;
+ p_mouse_x = vid.width / 2;
+ p_mouse_y = vid.height / 2;
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 *prjobj = NULL;
{
void *p = NULL;
if (qglXGetProcAddressARB != NULL)
- p = (void *) qglXGetProcAddressARB(name);
+ p = (void *) qglXGetProcAddressARB((GLubyte *)name);
if (p == NULL)
p = (void *) dlsym(prjobj, name);
return p;
if (!ctx || !vidx11_display)
return;
- vid_hidden = true;
- vid_usingmouse = false;
if (vidx11_display)
{
- VID_RestoreSystemGamma();
IN_Activate(false);
+ VID_RestoreSystemGamma();
// FIXME: glXDestroyContext here?
if (vid_isfullscreen)
XDestroyWindow(vidx11_display, win);
XCloseDisplay(vidx11_display);
}
+ vid_hidden = true;
vid_isfullscreen = false;
vidx11_display = NULL;
win = 0;
signal(SIGTERM, signal_handler);
}
-/*
-=================
-VID_GetWindowSize
-=================
-*/
-void VID_GetWindowSize (int *x, int *y, int *width, int *height)
-{
- *x = *y = 0;
- *width = scr_width;
- *height = scr_height;
-}
-
void VID_Finish (void)
{
+ qboolean vid_usemouse;
+
vid_usevsync = vid_vsync.integer && !cls.timedemo && gl_videosyncavailable;
if (vid_usingvsync != vid_usevsync && gl_videosyncavailable)
{
void VID_Init(void)
{
-#ifndef __APPLE__
+#if !defined(__APPLE__) && !defined(SUNOS)
Cvar_RegisterVariable (&vid_dga);
Cvar_RegisterVariable (&vid_dga_mouseaccel);
#endif
vidmode_ext = true;
}
- if ((qglXChooseVisual = GL_GetProcAddress("glXChooseVisual")) == NULL
- || (qglXCreateContext = GL_GetProcAddress("glXCreateContext")) == NULL
- || (qglXMakeCurrent = GL_GetProcAddress("glXMakeCurrent")) == NULL
- || (qglXSwapBuffers = GL_GetProcAddress("glXSwapBuffers")) == NULL
- || (qglXQueryExtensionsString = GL_GetProcAddress("glXQueryExtensionsString")) == NULL)
+ if ((qglXChooseVisual = (XVisualInfo *(GLAPIENTRY *)(Display *dpy, int screen, int *attribList))GL_GetProcAddress("glXChooseVisual")) == NULL
+ || (qglXCreateContext = (GLXContext (GLAPIENTRY *)(Display *dpy, XVisualInfo *vis, GLXContext shareList, Bool direct))GL_GetProcAddress("glXCreateContext")) == NULL
+ || (qglXDestroyContext = (void (GLAPIENTRY *)(Display *dpy, GLXContext ctx))GL_GetProcAddress("glXDestroyContext")) == NULL
+ || (qglXMakeCurrent = (Bool (GLAPIENTRY *)(Display *dpy, GLXDrawable drawable, GLXContext ctx))GL_GetProcAddress("glXMakeCurrent")) == NULL
+ || (qglXSwapBuffers = (void (GLAPIENTRY *)(Display *dpy, GLXDrawable drawable))GL_GetProcAddress("glXSwapBuffers")) == NULL
+ || (qglXQueryExtensionsString = (const char *(GLAPIENTRY *)(Display *dpy, int screen))GL_GetProcAddress("glXQueryExtensionsString")) == NULL)
{
Con_Printf("glX functions not found in %s\n", gl_driver);
return false;
ctx = qglXCreateContext(vidx11_display, visinfo, NULL, True);
if (!ctx)
- Sys_Error ("glXCreateContext failed\n");
+ {
+ Con_Printf ("glXCreateContext failed\n");
+ return false;
+ }
if (!qglXMakeCurrent(vidx11_display, win, ctx))
- Sys_Error ("glXMakeCurrent failed\n");
+ {
+ Con_Printf ("glXMakeCurrent failed\n");
+ return false;
+ }
XSync(vidx11_display, False);
- scr_width = width;
- scr_height = height;
-
- if ((qglGetString = GL_GetProcAddress("glGetString")) == NULL)
- Sys_Error("glGetString not found in %s", gl_driver);
+ if ((qglGetString = (const GLubyte* (GLAPIENTRY *)(GLenum name))GL_GetProcAddress("glGetString")) == NULL)
+ {
+ Con_Printf ("glGetString not found in %s", gl_driver);
+ return false;
+ }
- gl_renderer = qglGetString(GL_RENDERER);
- gl_vendor = qglGetString(GL_VENDOR);
- gl_version = qglGetString(GL_VERSION);
- gl_extensions = qglGetString(GL_EXTENSIONS);
+ 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_platform = "GLX";
gl_platformextensions = qglXQueryExtensionsString(vidx11_display, vidx11_screen);
vid_usingmouse = false;
vid_usingvsync = false;
- ignoremousemove = true;
vid_hidden = false;
vid_activewindow = true;
GL_Init();