#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>
// Tell startup code that we have a client
int cl_available = true;
+// note: if we used the XRandR extension we could support refresh rates
+qboolean vid_supportrefreshrate = false;
+
//GLX prototypes
XVisualInfo *(GLAPIENTRY *qglXChooseVisual)(Display *dpy, int screen, int *attribList);
GLXContext (GLAPIENTRY *qglXCreateContext)(Display *dpy, XVisualInfo *vis, GLXContext shareList, Bool direct);
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
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)
+ if (keysym < 32)
break;
if (keysym >= 'A' && keysym <= 'Z')
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;
{
if (vid_usingmouse)
{
-#ifndef __APPLE__
+#if !defined(__APPLE__) && !defined(SUNOS)
if (vid_dga.integer)
XF86DGADirectVideo(vidx11_display, DefaultScreen(vidx11_display), 0);
#endif
}
}
+static keynum_t buttonremap[18] =
+{
+ K_MOUSE1,
+ K_MOUSE3,
+ K_MOUSE2,
+ K_MWHEELUP,
+ K_MWHEELDOWN,
+ K_MOUSE4,
+ K_MOUSE5,
+ K_MOUSE6,
+ K_MOUSE7,
+ K_MOUSE8,
+ K_MOUSE9,
+ K_MOUSE10,
+ K_MOUSE11,
+ K_MOUSE12,
+ K_MOUSE13,
+ K_MOUSE14,
+ K_MOUSE15,
+ K_MOUSE16,
+};
+
static void HandleEvents(void)
{
XEvent event;
// 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;
case ButtonPress:
// mouse button pressed
- switch(event.xbutton.button)
- {
- case 1:
- Key_Event(K_MOUSE1, 0, true);
- break;
- case 2:
- Key_Event(K_MOUSE3, 0, true);
- break;
- case 3:
- Key_Event(K_MOUSE2, 0, true);
- break;
- case 4:
- Key_Event(K_MWHEELUP, 0, true);
- break;
- case 5:
- Key_Event(K_MWHEELDOWN, 0, true);
- break;
- case 6:
- Key_Event(K_MOUSE4, 0, true);
- break;
- case 7:
- Key_Event(K_MOUSE5, 0, true);
- break;
- case 8:
- Key_Event(K_MOUSE6, 0, true);
- break;
- case 9:
- Key_Event(K_MOUSE7, 0, true);
- break;
- case 10:
- Key_Event(K_MOUSE8, 0, true);
- break;
- case 11:
- Key_Event(K_MOUSE9, 0, true);
- break;
- case 12:
- Key_Event(K_MOUSE10, 0, true);
- break;
- default:
- Con_Printf("HandleEvents: ButtonPress gave value %d, 1-12 expected\n", event.xbutton.button);
- break;
- }
+ if (event.xbutton.button <= 18)
+ Key_Event(buttonremap[event.xbutton.button - 1], 0, true);
+ else
+ Con_Printf("HandleEvents: ButtonPress gave value %d, 1-18 expected\n", event.xbutton.button);
break;
case ButtonRelease:
// mouse button released
- switch(event.xbutton.button)
- {
- case 1:
- Key_Event(K_MOUSE1, 0, false);
- break;
- case 2:
- Key_Event(K_MOUSE3, 0, false);
- break;
- case 3:
- Key_Event(K_MOUSE2, 0, false);
- break;
- case 4:
- Key_Event(K_MWHEELUP, 0, false);
- break;
- case 5:
- Key_Event(K_MWHEELDOWN, 0, false);
- break;
- case 6:
- Key_Event(K_MOUSE4, 0, false);
- break;
- case 7:
- Key_Event(K_MOUSE5, 0, false);
- break;
- case 8:
- Key_Event(K_MOUSE6, 0, false);
- break;
- case 9:
- Key_Event(K_MOUSE7, 0, false);
- break;
- case 10:
- Key_Event(K_MOUSE8, 0, false);
- break;
- case 11:
- Key_Event(K_MOUSE9, 0, false);
- break;
- case 12:
- Key_Event(K_MOUSE10, 0, false);
- break;
- default:
- Con_Printf("HandleEvents: ButtonRelease gave value %d, 1-12 expected\n", event.xbutton.button);
- break;
- }
+ if (event.xbutton.button <= 18)
+ Key_Event(buttonremap[event.xbutton.button - 1], 0, false);
+ else
+ Con_Printf("HandleEvents: ButtonRelease gave value %d, 1-18 expected\n", event.xbutton.button);
break;
case CreateNotify:
{
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;
void VID_Init(void)
{
-#ifndef __APPLE__
+#if !defined(__APPLE__) && !defined(SUNOS)
Cvar_RegisterVariable (&vid_dga);
Cvar_RegisterVariable (&vid_dga_mouseaccel);
#endif
*attrib++ = None;
}
-int VID_InitMode(int fullscreen, int width, int height, int bpp)
+int VID_InitMode(int fullscreen, int width, int height, int bpp, int refreshrate)
{
int i;
int attrib[32];
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;
XSync(vidx11_display, False);
- if ((qglGetString = GL_GetProcAddress("glGetString")) == NULL)
+ if ((qglGetString = (const GLubyte* (GLAPIENTRY *)(GLenum name))GL_GetProcAddress("glGetString")) == NULL)
{
- Con_Printf ("glGetString not found in %s", gl_driver);
+ Con_Printf ("glGetString not found in %s\n", 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);