fakeglx.c revision 1832f1cc86758fdcbd122edd5bf9e7a29ccade20
11832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul/* $Id: fakeglx.c,v 1.49 2001/04/27 21:18:25 brianp Exp $ */ 2afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 3afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 4afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Mesa 3-D graphics library 5963946d3d7561c2bc7be2e0c739506b8d6d42815Brian Paul * Version: 3.5 65e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * 7262f9e52d6a511fffd1e6746de9d83d89cca9e1aBrian Paul * Copyright (C) 1999-2000 Brian Paul All Rights Reserved. 85e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * 9afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Permission is hereby granted, free of charge, to any person obtaining a 10afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * copy of this software and associated documentation files (the "Software"), 11afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * to deal in the Software without restriction, including without limitation 12afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * the rights to use, copy, modify, merge, publish, distribute, sublicense, 13afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * and/or sell copies of the Software, and to permit persons to whom the 14afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Software is furnished to do so, subject to the following conditions: 155e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * 16afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * The above copyright notice and this permission notice shall be included 17afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * in all copies or substantial portions of the Software. 185e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen * 19afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 20afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 22afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 23afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 24afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 26afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 27afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 28afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 2936cfa38760cc2bd91c08b66bb62c4b6cf9eb5454Brian Paul * This is an emulation of the GLX API which allows Mesa/GLX-based programs 3036cfa38760cc2bd91c08b66bb62c4b6cf9eb5454Brian Paul * to run on X servers which do not have the real GLX extension. 31afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 32afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Thanks to the contributors: 33afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 34ddf69f247fdb246b99ef6525fcfa6eda7b2e2aa7Brian Paul * Initial version: Philip Brown (phil@bolthole.com) 35afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Better glXGetConfig() support: Armin Liebchen (liebchen@asylum.cs.utah.edu) 36afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Further visual-handling refinements: Wolfram Gloger 37afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * (wmglo@Dent.MED.Uni-Muenchen.DE). 38afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 39afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Notes: 40afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Don't be fooled, stereo isn't supported yet. 41afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 42afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 43afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 44afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 45fbd8f212c3866ec98c1d8c9d3db3ddb7e7c479a5Brian Paul#include "glxheader.h" 46426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul#include "glxapi.h" 47afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "GL/xmesa.h" 48afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "context.h" 49afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "config.h" 50afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "macros.h" 5171dea349d2be623b7819389428b0d6a124e8d184Brian Paul#include "mmath.h" 525e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#include "mtypes.h" 5371dea349d2be623b7819389428b0d6a124e8d184Brian Paul#include "xfonts.h" 54afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#include "xmesaP.h" 55afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 56afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 5778fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul/* This indicates the client-side GLX API and GLX encoder version. */ 5878fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul#define CLIENT_MAJOR_VERSION 1 5978fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul#define CLIENT_MINOR_VERSION 2 6078fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul 6178fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul/* This indicates the server-side GLX decoder version. 6278fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul * GLX 1.3 indicates OpenGL 1.2 support 6378fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul */ 6478fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul#define SERVER_MAJOR_VERSION 1 6578fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul#define SERVER_MINOR_VERSION 3 6678fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul 6778fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul/* This is appended onto the glXGetClient/ServerString version strings. */ 68963946d3d7561c2bc7be2e0c739506b8d6d42815Brian Paul#define MESA_GLX_VERSION "Mesa 3.5" 6978fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul 7078fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul/* Who implemented this GLX? */ 7178fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul#define VENDOR "Brian Paul" 7278fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul 7378fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul 74afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 7543c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul/* Silence compiler warnings */ 76e7b16b74bf5d13331b5a88bbbbb9096560297b63Brian Paulextern void Fake_glXDummyFunc( void ); 7743c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paulvoid Fake_glXDummyFunc( void ) 7843c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul{ 7943c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul (void) kernel8; 8043c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul (void) DitherValues; 8143c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul (void) HPCR_DRGB; 8243c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul (void) kernel1; 8343c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul} 8443c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul 8543c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul 8643c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul 87afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#define DONT_CARE -1 88afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 89afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 90afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 91afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#define MAX_VISUALS 100 92afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgstatic XMesaVisual VisualTable[MAX_VISUALS]; 93afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgstatic int NumVisuals = 0; 94afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 95afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 96afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 97afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 98afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * This struct and some code fragments borrowed 99afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * from Mark Kilgard's GLUT library. 100afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 101afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgtypedef struct _OverlayInfo { 102afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Avoid 64-bit portability problems by being careful to use 103afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg longs due to the way XGetWindowProperty is specified. Note 104afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg that these parameters are passed as CARD32s over X 105afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg protocol. */ 106afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg unsigned long overlay_visual; 107afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg long transparent_type; 108afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg long value; 109afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg long layer; 110afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} OverlayInfo; 111afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 112afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 113afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 114afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* Macro to handle c_class vs class field name in XVisualInfo struct */ 115afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#if defined(__cplusplus) || defined(c_plusplus) 116afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#define CLASS c_class 117afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#else 118afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#define CLASS class 119afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#endif 120afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 121afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 122afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 123afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 124afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 125afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Test if the given XVisualInfo is usable for Mesa rendering. 126afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 127afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgstatic GLboolean is_usable_visual( XVisualInfo *vinfo ) 128afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 129afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg switch (vinfo->CLASS) { 130afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case StaticGray: 131afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GrayScale: 132afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Any StaticGray/GrayScale visual works in RGB or CI mode */ 133afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return GL_TRUE; 134afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case StaticColor: 135afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case PseudoColor: 136afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Any StaticColor/PseudoColor visual of at least 4 bits */ 137afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (vinfo->depth>=4) { 138afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return GL_TRUE; 139afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 140afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 141afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return GL_FALSE; 142afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 143afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case TrueColor: 144afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case DirectColor: 145afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Any depth of TrueColor or DirectColor works in RGB mode */ 146afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return GL_TRUE; 147afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 148afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* This should never happen */ 149afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return GL_FALSE; 150afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 151afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 152afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 153afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 154afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 155afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 156afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Return the level (overlay, normal, underlay) of a given XVisualInfo. 157afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Input: dpy - the X display 158afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * vinfo - the XVisualInfo to test 159afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Return: level of the visual: 160afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 0 = normal planes 161afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * >0 = overlay planes 162afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * <0 = underlay planes 163afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 164afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgstatic int level_of_visual( Display *dpy, XVisualInfo *vinfo ) 165afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 166afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg Atom overlayVisualsAtom; 167afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg OverlayInfo *overlay_info = NULL; 168afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int numOverlaysPerScreen; 169afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg Status status; 170afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg Atom actualType; 171afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int actualFormat; 172afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg unsigned long sizeData, bytesLeft; 173afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int i; 174afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 175afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* 176afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * The SERVER_OVERLAY_VISUALS property on the root window contains 177afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * a list of overlay visuals. Get that list now. 178afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 179afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg overlayVisualsAtom = XInternAtom(dpy,"SERVER_OVERLAY_VISUALS", True); 180afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (overlayVisualsAtom == None) { 181afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 182afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 183afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 184afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg status = XGetWindowProperty(dpy, RootWindow( dpy, vinfo->screen ), 185afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg overlayVisualsAtom, 0L, (long) 10000, False, 186afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg overlayVisualsAtom, &actualType, &actualFormat, 187afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg &sizeData, &bytesLeft, 188afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg (unsigned char **) &overlay_info ); 189afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 190afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (status != Success || actualType != overlayVisualsAtom || 191afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg actualFormat != 32 || sizeData < 4) { 192afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* something went wrong */ 193afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XFree((void *) overlay_info); 194afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 195afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 196afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 197afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* search the overlay visual list for the visual ID of interest */ 198afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg numOverlaysPerScreen = (int) (sizeData / 4); 199afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg for (i=0;i<numOverlaysPerScreen;i++) { 200afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg OverlayInfo *ov; 201afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ov = overlay_info + i; 202afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (ov->overlay_visual==vinfo->visualid) { 203afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* found the visual */ 204afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (/*ov->transparent_type==1 &&*/ ov->layer!=0) { 205afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int level = ov->layer; 206afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XFree((void *) overlay_info); 207afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return level; 208afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 209afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 210afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XFree((void *) overlay_info); 211afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 212afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 213afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 214afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 215afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 216afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* The visual ID was not found in the overlay list. */ 217afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XFree((void *) overlay_info); 218afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 219afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 220afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 221afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 222afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 223afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 224afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 225afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Given an XVisualInfo and RGB, Double, and Depth buffer flags, save the 226afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * configuration in our list of GLX visuals. 227afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 228afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgstatic XMesaVisual 229afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgsave_glx_visual( Display *dpy, XVisualInfo *vinfo, 230afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLboolean rgbFlag, GLboolean alphaFlag, GLboolean dbFlag, 231afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLboolean stereoFlag, 232afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLint depth_size, GLint stencil_size, 233b2e460018375f699198073a6167e0ee96ba1d267Brian Paul GLint accumRedSize, GLint accumGreenSize, 234b2e460018375f699198073a6167e0ee96ba1d267Brian Paul GLint accumBlueSize, GLint accumAlphaSize, 235b2e460018375f699198073a6167e0ee96ba1d267Brian Paul GLint level ) 236afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 237afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLboolean ximageFlag = GL_TRUE; 238afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XMesaVisual xmvis; 239afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLint i; 240afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLboolean comparePointers; 241afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 242afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (dbFlag) { 243afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Check if the MESA_BACK_BUFFER env var is set */ 244afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg char *backbuffer = getenv("MESA_BACK_BUFFER"); 245afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (backbuffer) { 246afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (backbuffer[0]=='p' || backbuffer[0]=='P') { 247afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ximageFlag = GL_FALSE; 248afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 249afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else if (backbuffer[0]=='x' || backbuffer[0]=='X') { 250afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ximageFlag = GL_TRUE; 251afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 252afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 253afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg fprintf(stderr, "Mesa: invalid value for MESA_BACK_BUFFER "); 254afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg fprintf(stderr, "environment variable, using an XImage.\n"); 255afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 256afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 257afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 258afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 259afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Comparing IDs uses less memory but sometimes fails. */ 260afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* XXX revisit this after 3.0 is finished. */ 261afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (getenv("MESA_GLX_VISUAL_HACK")) 262afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg comparePointers = GL_TRUE; 263afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else 264afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg comparePointers = GL_FALSE; 265afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 266afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* First check if a matching visual is already in the list */ 267afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg for (i=0; i<NumVisuals; i++) { 268afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XMesaVisual v = VisualTable[i]; 269afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (v->display == dpy 270afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg && v->level == level 271afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg && v->ximage_flag == ximageFlag 2721832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul && v->mesa_visual.rgbMode == rgbFlag 2731832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul && v->mesa_visual.doubleBufferMode == dbFlag 2741832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul && v->mesa_visual.stereoMode == stereoFlag 2751832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul && (v->mesa_visual.alphaBits > 0) == alphaFlag 2761832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul && (v->mesa_visual.depthBits >= depth_size || depth_size == 0) 2771832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul && (v->mesa_visual.stencilBits >= stencil_size || stencil_size == 0) 2781832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul && (v->mesa_visual.accumRedBits >= accumRedSize || accumRedSize == 0) 2791832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul && (v->mesa_visual.accumGreenBits >= accumGreenSize || accumGreenSize == 0) 2801832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul && (v->mesa_visual.accumBlueBits >= accumBlueSize || accumBlueSize == 0) 2811832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul && (v->mesa_visual.accumAlphaBits >= accumAlphaSize || accumAlphaSize == 0)) { 282afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* now either compare XVisualInfo pointers or visual IDs */ 283d0247f53aea8fa8677aadc8a00f75c8993be9ebcBrian Paul if ((!comparePointers && v->visinfo->visualid == vinfo->visualid) 284afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg || (comparePointers && v->vishandle == vinfo)) { 285afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return v; 286afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 287afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 288afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 289afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 290afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Create a new visual and add it to the list. */ 291afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 292afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (NumVisuals>=MAX_VISUALS) { 293afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg fprintf( stderr, "GLX Error: maximum number of visuals exceeded\n"); 294afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return NULL; 295afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 296afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 297c8735e8f8299676e443e6ca0ffd339ab94e013f9Brian Paul xmvis = XMesaCreateVisual( dpy, vinfo, rgbFlag, alphaFlag, dbFlag, 298c8735e8f8299676e443e6ca0ffd339ab94e013f9Brian Paul stereoFlag, ximageFlag, 299c8735e8f8299676e443e6ca0ffd339ab94e013f9Brian Paul depth_size, stencil_size, 300c8735e8f8299676e443e6ca0ffd339ab94e013f9Brian Paul accumRedSize, accumBlueSize, 301c8735e8f8299676e443e6ca0ffd339ab94e013f9Brian Paul accumBlueSize, accumAlphaSize, 0, level, 302c8735e8f8299676e443e6ca0ffd339ab94e013f9Brian Paul GLX_NONE_EXT ); 303afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (xmvis) { 304afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg VisualTable[NumVisuals] = xmvis; 305afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg NumVisuals++; 306afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 307afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return xmvis; 308afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 309afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 310afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 311afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 312afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 313afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Create a GLX visual from a regular XVisualInfo. 314ed30dfa1264ec8875a3162c3c8778bc703bf11d5Brian Paul * This is called when Fake GLX is given an XVisualInfo which wasn't 315ed30dfa1264ec8875a3162c3c8778bc703bf11d5Brian Paul * returned by glXChooseVisual. Since this is the first time we're 316ed30dfa1264ec8875a3162c3c8778bc703bf11d5Brian Paul * considering this visual we'll take a guess at reasonable values 317ed30dfa1264ec8875a3162c3c8778bc703bf11d5Brian Paul * for depth buffer size, stencil size, accum size, etc. 318ed30dfa1264ec8875a3162c3c8778bc703bf11d5Brian Paul * This is the best we can do with a client-side emulation of GLX. 319afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 320afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgstatic XMesaVisual 321afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgcreate_glx_visual( Display *dpy, XVisualInfo *visinfo ) 322afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 323afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int vislevel; 324afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 325afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vislevel = level_of_visual( dpy, visinfo ); 326afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (vislevel) { 327afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Configure this visual as a CI, single-buffered overlay */ 328afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return save_glx_visual( dpy, visinfo, 329afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GL_FALSE, /* rgb */ 330afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GL_FALSE, /* alpha */ 331afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GL_FALSE, /* double */ 332afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GL_FALSE, /* stereo */ 333afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 0, /* depth bits */ 334afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 0, /* stencil bits */ 335b2e460018375f699198073a6167e0ee96ba1d267Brian Paul 0,0,0,0, /* accum bits */ 336afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vislevel /* level */ 337afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ); 338afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 339afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else if (is_usable_visual( visinfo )) { 3408f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul if (getenv("MESA_GLX_FORCE_CI")) { 3418f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul /* Configure this visual as a COLOR INDEX visual. */ 3428f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul return save_glx_visual( dpy, visinfo, 3438f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul GL_FALSE, /* rgb */ 3448f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul GL_FALSE, /* alpha */ 3458f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul GL_TRUE, /* double */ 3468f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul GL_FALSE, /* stereo */ 3478f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul DEFAULT_SOFTWARE_DEPTH_BITS, 3488f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul 8 * sizeof(GLstencil), 3498f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul 0 * sizeof(GLaccum), /* r */ 3508f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul 0 * sizeof(GLaccum), /* g */ 3518f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul 0 * sizeof(GLaccum), /* b */ 3528f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul 0 * sizeof(GLaccum), /* a */ 3538f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul 0 /* level */ 3548f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul ); 3558f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul } 3568f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul else { 3578f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul /* Configure this visual as RGB, double-buffered, depth-buffered. */ 3588f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul /* This is surely wrong for some people's needs but what else */ 3598f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul /* can be done? They should use glXChooseVisual(). */ 3608f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul return save_glx_visual( dpy, visinfo, 3618f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul GL_TRUE, /* rgb */ 3628f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul GL_FALSE, /* alpha */ 3638f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul GL_TRUE, /* double */ 3648f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul GL_FALSE, /* stereo */ 3658f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul DEFAULT_SOFTWARE_DEPTH_BITS, 3668f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul 8 * sizeof(GLstencil), 3678f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul 8 * sizeof(GLaccum), /* r */ 3688f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul 8 * sizeof(GLaccum), /* g */ 3698f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul 8 * sizeof(GLaccum), /* b */ 3708f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul 8 * sizeof(GLaccum), /* a */ 3718f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul 0 /* level */ 3728f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul ); 3738f9a594ac8116ed5cab7f8eca14c17ec3e250dadBrian Paul } 374afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 375afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 376afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg fprintf(stderr,"Mesa: error in glXCreateContext: bad visual\n"); 377afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return NULL; 378afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 379afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 380afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 381afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 382afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 383afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 384afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Find the GLX visual associated with an XVisualInfo. 385afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 386afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgstatic XMesaVisual 387afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgfind_glx_visual( Display *dpy, XVisualInfo *vinfo ) 388afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 389afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int i; 390afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 391afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* First try to match pointers */ 392afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg for (i=0;i<NumVisuals;i++) { 393afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (VisualTable[i]->display==dpy && VisualTable[i]->vishandle==vinfo) { 394afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return VisualTable[i]; 395afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 396afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 397afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* try to match visual id */ 398afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg for (i=0;i<NumVisuals;i++) { 399afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (VisualTable[i]->display==dpy 400afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg && VisualTable[i]->visinfo->visualid == vinfo->visualid) { 401afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return VisualTable[i]; 402afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 403afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 404afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return NULL; 405afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 406afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 407afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 408afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 409afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 410afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Return the transparent pixel value for a GLX visual. 411afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Input: glxvis - the glx_visual 412afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Return: a pixel value or -1 if no transparent pixel 413afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 414afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgstatic int transparent_pixel( XMesaVisual glxvis ) 415afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 416afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg Display *dpy = glxvis->display; 417afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XVisualInfo *vinfo = glxvis->visinfo; 418afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg Atom overlayVisualsAtom; 419afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg OverlayInfo *overlay_info = NULL; 420afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int numOverlaysPerScreen; 421afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg Status status; 422afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg Atom actualType; 423afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int actualFormat; 424afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg unsigned long sizeData, bytesLeft; 425afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int i; 426afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 427afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* 428afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * The SERVER_OVERLAY_VISUALS property on the root window contains 429afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * a list of overlay visuals. Get that list now. 430afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 431afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg overlayVisualsAtom = XInternAtom(dpy,"SERVER_OVERLAY_VISUALS", True); 432afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (overlayVisualsAtom == None) { 433afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return -1; 434afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 435afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 436afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg status = XGetWindowProperty(dpy, RootWindow( dpy, vinfo->screen ), 437afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg overlayVisualsAtom, 0L, (long) 10000, False, 438afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg overlayVisualsAtom, &actualType, &actualFormat, 439afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg &sizeData, &bytesLeft, 440afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg (unsigned char **) &overlay_info ); 441afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 442afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (status != Success || actualType != overlayVisualsAtom || 443afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg actualFormat != 32 || sizeData < 4) { 444afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* something went wrong */ 445afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XFree((void *) overlay_info); 446afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return -1; 447afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 448afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 449afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* search the overlay visual list for the visual ID of interest */ 450afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg numOverlaysPerScreen = (int) (sizeData / 4); 451afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg for (i=0;i<numOverlaysPerScreen;i++) { 452afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg OverlayInfo *ov; 453afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ov = overlay_info + i; 454afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (ov->overlay_visual==vinfo->visualid) { 455afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* found it! */ 456afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (ov->transparent_type==0) { 457afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* type 0 indicates no transparency */ 458afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XFree((void *) overlay_info); 459afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return -1; 460afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 461afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 462afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* ov->value is the transparent pixel */ 463afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XFree((void *) overlay_info); 464afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return ov->value; 465afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 466afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 467afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 468afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 469afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* The visual ID was not found in the overlay list. */ 470afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XFree((void *) overlay_info); 471afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return -1; 472afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 473afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 474afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 475afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 476afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 477afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Try to get an X visual which matches the given arguments. 478afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 479afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgstatic XVisualInfo *get_visual( Display *dpy, int scr, 480afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg unsigned int depth, int xclass ) 481afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 482afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XVisualInfo temp, *vis; 483afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg long mask; 484afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int n; 485afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg unsigned int default_depth; 486afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int default_class; 487afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 488afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg mask = VisualScreenMask | VisualDepthMask | VisualClassMask; 489afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg temp.screen = scr; 490afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg temp.depth = depth; 491afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg temp.CLASS = xclass; 492afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 493afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default_depth = DefaultDepth(dpy,scr); 494afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default_class = DefaultVisual(dpy,scr)->CLASS; 495afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 496afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (depth==default_depth && xclass==default_class) { 497afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* try to get root window's visual */ 498afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg temp.visualid = DefaultVisual(dpy,scr)->visualid; 499afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg mask |= VisualIDMask; 500afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 501afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 502afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vis = XGetVisualInfo( dpy, mask, &temp, &n ); 503afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 504afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* In case bits/pixel > 24, make sure color channels are still <=8 bits. 505afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * An SGI Infinite Reality system, for example, can have 30bpp pixels: 506afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * 10 bits per color channel. Mesa's limited to a max of 8 bits/channel. 507afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 508afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (vis && depth > 24 && (xclass==TrueColor || xclass==DirectColor)) { 50971dea349d2be623b7819389428b0d6a124e8d184Brian Paul if (_mesa_bitcount((GLuint) vis->red_mask ) <= 8 && 51071dea349d2be623b7819389428b0d6a124e8d184Brian Paul _mesa_bitcount((GLuint) vis->green_mask) <= 8 && 51171dea349d2be623b7819389428b0d6a124e8d184Brian Paul _mesa_bitcount((GLuint) vis->blue_mask ) <= 8) { 512afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return vis; 513afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 514afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 515afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XFree((void *) vis); 516afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return NULL; 517afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 518afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 519afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 520afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return vis; 521afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 522afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 523afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 524afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 525afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 526afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Retrieve the value of the given environment variable and find 527afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * the X visual which matches it. 528afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Input: dpy - the display 529afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * screen - the screen number 530afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * varname - the name of the environment variable 531afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Return: an XVisualInfo pointer to NULL if error. 532afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 533afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgstatic XVisualInfo *get_env_visual(Display *dpy, int scr, const char *varname) 534afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 535afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg char value[100], type[100]; 536afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int depth, xclass = -1; 537afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XVisualInfo *vis; 538afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 539afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (!getenv( varname )) { 540afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return NULL; 541afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 542afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 543afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg strncpy( value, getenv(varname), 100 ); 544afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg value[99] = 0; 545afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 546afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg sscanf( value, "%s %d", type, &depth ); 547afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 548afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (strcmp(type,"TrueColor")==0) xclass = TrueColor; 549afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else if (strcmp(type,"DirectColor")==0) xclass = DirectColor; 550afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else if (strcmp(type,"PseudoColor")==0) xclass = PseudoColor; 551afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else if (strcmp(type,"StaticColor")==0) xclass = StaticColor; 552afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else if (strcmp(type,"GrayScale")==0) xclass = GrayScale; 553afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else if (strcmp(type,"StaticGray")==0) xclass = StaticGray; 554afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 555afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (xclass>-1 && depth>0) { 556afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vis = get_visual( dpy, scr, depth, xclass ); 557afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (vis) { 558afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return vis; 559afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 560afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 561afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 562afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg fprintf( stderr, "Mesa: GLX unable to find visual class=%s, depth=%d.\n", 563afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg type, depth ); 564afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return NULL; 565afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 566afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 567afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 568afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 569afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 570afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Select an X visual which satisfies the RGBA/CI flag and minimum depth. 571afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Input: dpy, screen - X display and screen number 572afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * rgba - GL_TRUE = RGBA mode, GL_FALSE = CI mode 573afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * min_depth - minimum visual depth 574afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * preferred_class - preferred GLX visual class or DONT_CARE 575afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Return: pointer to an XVisualInfo or NULL. 576afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 577afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgstatic XVisualInfo *choose_x_visual( Display *dpy, int screen, 578afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLboolean rgba, int min_depth, 579afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int preferred_class ) 580afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 581afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XVisualInfo *vis; 582db6aa58267cad3f502f03ab80b9deb6b75320a91Brian Paul int xclass, visclass = 0; 583afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int depth; 584afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 585afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (rgba) { 586afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg Atom hp_cr_maps = XInternAtom(dpy, "_HP_RGB_SMOOTH_MAP_LIST", True); 587afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* First see if the MESA_RGB_VISUAL env var is defined */ 588afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vis = get_env_visual( dpy, screen, "MESA_RGB_VISUAL" ); 589afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (vis) { 590afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return vis; 591afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 592afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Otherwise, search for a suitable visual */ 593afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (preferred_class==DONT_CARE) { 594afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg for (xclass=0;xclass<6;xclass++) { 595afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg switch (xclass) { 596afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case 0: visclass = TrueColor; break; 597afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case 1: visclass = DirectColor; break; 598afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case 2: visclass = PseudoColor; break; 599afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case 3: visclass = StaticColor; break; 600afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case 4: visclass = GrayScale; break; 601afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case 5: visclass = StaticGray; break; 602afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 603afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (min_depth==0) { 604afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* start with shallowest */ 605afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg for (depth=0;depth<=32;depth++) { 606afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (visclass==TrueColor && depth==8 && !hp_cr_maps) { 607afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Special case: try to get 8-bit PseudoColor before */ 608afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* 8-bit TrueColor */ 609afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vis = get_visual( dpy, screen, 8, PseudoColor ); 610afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (vis) { 611afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return vis; 612afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 613afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 614afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vis = get_visual( dpy, screen, depth, visclass ); 615afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (vis) { 616afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return vis; 617afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 618afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 619afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 620afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 621afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* start with deepest */ 622afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg for (depth=32;depth>=min_depth;depth--) { 623afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (visclass==TrueColor && depth==8 && !hp_cr_maps) { 624afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Special case: try to get 8-bit PseudoColor before */ 625afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* 8-bit TrueColor */ 626afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vis = get_visual( dpy, screen, 8, PseudoColor ); 627afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (vis) { 628afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return vis; 629afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 630afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 631afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vis = get_visual( dpy, screen, depth, visclass ); 632afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (vis) { 633afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return vis; 634afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 635afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 636afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 637afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 638afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 639afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 640afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* search for a specific visual class */ 641afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg switch (preferred_class) { 642afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_TRUE_COLOR_EXT: visclass = TrueColor; break; 643afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_DIRECT_COLOR_EXT: visclass = DirectColor; break; 644afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_PSEUDO_COLOR_EXT: visclass = PseudoColor; break; 645afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_STATIC_COLOR_EXT: visclass = StaticColor; break; 646afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_GRAY_SCALE_EXT: visclass = GrayScale; break; 647afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_STATIC_GRAY_EXT: visclass = StaticGray; break; 648afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: return NULL; 649afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 650afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (min_depth==0) { 651afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* start with shallowest */ 652afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg for (depth=0;depth<=32;depth++) { 653afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vis = get_visual( dpy, screen, depth, visclass ); 654afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (vis) { 655afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return vis; 656afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 657afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 658afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 659afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 660afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* start with deepest */ 661afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg for (depth=32;depth>=min_depth;depth--) { 662afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vis = get_visual( dpy, screen, depth, visclass ); 663afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (vis) { 664afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return vis; 665afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 666afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 667afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 668afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 669afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 670afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 671afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* First see if the MESA_CI_VISUAL env var is defined */ 672afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vis = get_env_visual( dpy, screen, "MESA_CI_VISUAL" ); 673afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (vis) { 674afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return vis; 675afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 676afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Otherwise, search for a suitable visual, starting with shallowest */ 677afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (preferred_class==DONT_CARE) { 678afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg for (xclass=0;xclass<4;xclass++) { 679afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg switch (xclass) { 680afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case 0: visclass = PseudoColor; break; 681afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case 1: visclass = StaticColor; break; 682afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case 2: visclass = GrayScale; break; 683afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case 3: visclass = StaticGray; break; 684afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 685afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* try 8-bit up through 16-bit */ 686afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg for (depth=8;depth<=16;depth++) { 687afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vis = get_visual( dpy, screen, depth, visclass ); 688afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (vis) { 689afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return vis; 690afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 691afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 692afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* try min_depth up to 8-bit */ 693afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg for (depth=min_depth;depth<8;depth++) { 694afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vis = get_visual( dpy, screen, depth, visclass ); 695afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (vis) { 696afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return vis; 697afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 698afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 699afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 700afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 701afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 702afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* search for a specific visual class */ 703afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg switch (preferred_class) { 704afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_TRUE_COLOR_EXT: visclass = TrueColor; break; 705afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_DIRECT_COLOR_EXT: visclass = DirectColor; break; 706afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_PSEUDO_COLOR_EXT: visclass = PseudoColor; break; 707afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_STATIC_COLOR_EXT: visclass = StaticColor; break; 708afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_GRAY_SCALE_EXT: visclass = GrayScale; break; 709afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_STATIC_GRAY_EXT: visclass = StaticGray; break; 710afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: return NULL; 711afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 712afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* try 8-bit up through 16-bit */ 713afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg for (depth=8;depth<=16;depth++) { 714afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vis = get_visual( dpy, screen, depth, visclass ); 715afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (vis) { 716afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return vis; 717afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 718afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 719afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* try min_depth up to 8-bit */ 720afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg for (depth=min_depth;depth<8;depth++) { 721afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vis = get_visual( dpy, screen, depth, visclass ); 722afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (vis) { 723afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return vis; 724afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 725afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 726afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 727afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 728afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 729afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* didn't find a visual */ 730afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return NULL; 731afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 732afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 733afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 734afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 735afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 736afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Find the deepest X over/underlay visual of at least min_depth. 737afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Input: dpy, screen - X display and screen number 738afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * level - the over/underlay level 739afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * trans_type - transparent pixel type: GLX_NONE_EXT, 740afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * GLX_TRANSPARENT_RGB_EXT, GLX_TRANSPARENT_INDEX_EXT, 741afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * or DONT_CARE 742afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * trans_value - transparent pixel value or DONT_CARE 743afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * min_depth - minimum visual depth 744afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * preferred_class - preferred GLX visual class or DONT_CARE 745afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Return: pointer to an XVisualInfo or NULL. 746afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 747afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgstatic XVisualInfo *choose_x_overlay_visual( Display *dpy, int scr, 74842f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul GLboolean rgbFlag, 749afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int level, int trans_type, 750afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int trans_value, 751afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int min_depth, 752afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int preferred_class ) 753afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 754afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg Atom overlayVisualsAtom; 755afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg OverlayInfo *overlay_info; 756afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int numOverlaysPerScreen; 757afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg Status status; 758afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg Atom actualType; 759afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int actualFormat; 760afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg unsigned long sizeData, bytesLeft; 761afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int i; 762afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XVisualInfo *deepvis; 763afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int deepest; 764afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 765afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /*DEBUG int tt, tv; */ 766afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 767afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg switch (preferred_class) { 768afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_TRUE_COLOR_EXT: preferred_class = TrueColor; break; 769afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_DIRECT_COLOR_EXT: preferred_class = DirectColor; break; 770afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_PSEUDO_COLOR_EXT: preferred_class = PseudoColor; break; 771afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_STATIC_COLOR_EXT: preferred_class = StaticColor; break; 772afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_GRAY_SCALE_EXT: preferred_class = GrayScale; break; 773afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_STATIC_GRAY_EXT: preferred_class = StaticGray; break; 774afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: preferred_class = DONT_CARE; 775afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 776afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 777afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* 778afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * The SERVER_OVERLAY_VISUALS property on the root window contains 779afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * a list of overlay visuals. Get that list now. 780afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 781afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg overlayVisualsAtom = XInternAtom(dpy,"SERVER_OVERLAY_VISUALS", True); 782afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (overlayVisualsAtom == (Atom) None) { 783afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return NULL; 784afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 785afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 786afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg status = XGetWindowProperty(dpy, RootWindow( dpy, scr ), 787afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg overlayVisualsAtom, 0L, (long) 10000, False, 788afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg overlayVisualsAtom, &actualType, &actualFormat, 789afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg &sizeData, &bytesLeft, 790afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg (unsigned char **) &overlay_info ); 791afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 792afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (status != Success || actualType != overlayVisualsAtom || 793afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg actualFormat != 32 || sizeData < 4) { 794afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* something went wrong */ 795afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return NULL; 796afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 797afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 798afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Search for the deepest overlay which satisifies all criteria. */ 799afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg deepest = min_depth; 800afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg deepvis = NULL; 801afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 802afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg numOverlaysPerScreen = (int) (sizeData / 4); 803afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg for (i=0;i<numOverlaysPerScreen;i++) { 804afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XVisualInfo *vislist, vistemplate; 805afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int count; 806afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg OverlayInfo *ov; 807afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg ov = overlay_info + i; 808afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 809afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (ov->layer!=level) { 810afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* failed overlay level criteria */ 811afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg continue; 812afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 813afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (!(trans_type==DONT_CARE 814afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg || (trans_type==GLX_TRANSPARENT_INDEX_EXT 815afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg && ov->transparent_type>0) 816afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg || (trans_type==GLX_NONE_EXT && ov->transparent_type==0))) { 817afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* failed transparent pixel type criteria */ 818afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg continue; 819afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 820afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (trans_value!=DONT_CARE && trans_value!=ov->value) { 821afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* failed transparent pixel value criteria */ 822afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg continue; 823afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 824afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 825afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* get XVisualInfo and check the depth */ 826afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vistemplate.visualid = ov->overlay_visual; 827afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vistemplate.screen = scr; 828afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vislist = XGetVisualInfo( dpy, VisualIDMask | VisualScreenMask, 829afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg &vistemplate, &count ); 830afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 831afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (count!=1) { 832afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* something went wrong */ 833afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg continue; 834afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 835afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (preferred_class!=DONT_CARE && preferred_class!=vislist->CLASS) { 836afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* wrong visual class */ 837afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg continue; 838afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 839afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 84042f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul /* if RGB was requested, make sure we have True/DirectColor */ 84142f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul if (rgbFlag && vislist->CLASS != TrueColor 84242f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul && vislist->CLASS != DirectColor) 84342f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul continue; 84442f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul 84542f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul /* if CI was requested, make sure we have a color indexed visual */ 84642f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul if (!rgbFlag 84742f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul && (vislist->CLASS == TrueColor || vislist->CLASS == DirectColor)) 84842f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul continue; 84942f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul 850afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (deepvis==NULL || vislist->depth > deepest) { 851afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* YES! found a satisfactory visual */ 852afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (deepvis) { 85380af3614d88c0cac160e787de7f34b37e96cb626Brian Paul XFree( deepvis ); 854afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 855afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg deepest = vislist->depth; 856afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg deepvis = vislist; 857afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* DEBUG tt = ov->transparent_type;*/ 858afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* DEBUG tv = ov->value; */ 859afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 860afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 861afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 862afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/*DEBUG 863afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (deepvis) { 864afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg printf("chose 0x%x: layer=%d depth=%d trans_type=%d trans_value=%d\n", 865afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg deepvis->visualid, level, deepvis->depth, tt, tv ); 866afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 867afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg*/ 868afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return deepvis; 869afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 870afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 871afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 872afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 873426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic XVisualInfo * 874426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXChooseVisual( Display *dpy, int screen, int *list ) 875afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 876afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int *parselist; 877afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XVisualInfo *vis; 878afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int min_ci = 0; 879afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int min_red=0, min_green=0, min_blue=0; 880afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLboolean rgb_flag = GL_FALSE; 881afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLboolean alpha_flag = GL_FALSE; 882afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLboolean double_flag = GL_FALSE; 883afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLboolean stereo_flag = GL_FALSE; 884afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLint depth_size = 0; 885afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLint stencil_size = 0; 886b2e460018375f699198073a6167e0ee96ba1d267Brian Paul GLint accumRedSize = 0; 887b2e460018375f699198073a6167e0ee96ba1d267Brian Paul GLint accumGreenSize = 0; 888b2e460018375f699198073a6167e0ee96ba1d267Brian Paul GLint accumBlueSize = 0; 889b2e460018375f699198073a6167e0ee96ba1d267Brian Paul GLint accumAlphaSize = 0; 890afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int level = 0; 891afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int visual_type = DONT_CARE; 892afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int trans_type = DONT_CARE; 893afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int trans_value = DONT_CARE; 894e1210b176926349b258c7ec77b7f36716025c82aBrian Paul GLint caveat = DONT_CARE; 895afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 896afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg parselist = list; 897afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 898afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg while (*parselist) { 899afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 900afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg switch (*parselist) { 901afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_USE_GL: 902afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* ignore */ 903afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg parselist++; 904afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 905afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_BUFFER_SIZE: 906afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg parselist++; 907afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg min_ci = *parselist++; 908afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 909afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_LEVEL: 910afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg parselist++; 911afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg level = *parselist++; 912afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 913afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_RGBA: 914afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg rgb_flag = GL_TRUE; 915afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg parselist++; 916afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 917afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_DOUBLEBUFFER: 918afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg double_flag = GL_TRUE; 919afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg parselist++; 920afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 921afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_STEREO: 922afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg stereo_flag = GL_TRUE; 923afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return NULL; 924afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_AUX_BUFFERS: 925afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* ignore */ 926afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg parselist++; 927afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg parselist++; 928afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 929afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_RED_SIZE: 930afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg parselist++; 931afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg min_red = *parselist++; 932afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 933afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_GREEN_SIZE: 934afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg parselist++; 935afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg min_green = *parselist++; 936afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 937afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_BLUE_SIZE: 938afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg parselist++; 939afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg min_blue = *parselist++; 940afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 941afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_ALPHA_SIZE: 942afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg parselist++; 943afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg { 944afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLint size = *parselist++; 945afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg alpha_flag = size>0 ? 1 : 0; 946afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 947afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 948afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_DEPTH_SIZE: 949afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg parselist++; 950afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg depth_size = *parselist++; 951afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 952afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_STENCIL_SIZE: 953afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg parselist++; 954afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg stencil_size = *parselist++; 955afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 956afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_ACCUM_RED_SIZE: 957b2e460018375f699198073a6167e0ee96ba1d267Brian Paul parselist++; 958b2e460018375f699198073a6167e0ee96ba1d267Brian Paul { 959b2e460018375f699198073a6167e0ee96ba1d267Brian Paul GLint size = *parselist++; 960b2e460018375f699198073a6167e0ee96ba1d267Brian Paul accumRedSize = MAX2( accumRedSize, size ); 961b2e460018375f699198073a6167e0ee96ba1d267Brian Paul } 962b2e460018375f699198073a6167e0ee96ba1d267Brian Paul break; 963afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_ACCUM_GREEN_SIZE: 964b2e460018375f699198073a6167e0ee96ba1d267Brian Paul parselist++; 965b2e460018375f699198073a6167e0ee96ba1d267Brian Paul { 966b2e460018375f699198073a6167e0ee96ba1d267Brian Paul GLint size = *parselist++; 967b2e460018375f699198073a6167e0ee96ba1d267Brian Paul accumGreenSize = MAX2( accumGreenSize, size ); 968b2e460018375f699198073a6167e0ee96ba1d267Brian Paul } 969b2e460018375f699198073a6167e0ee96ba1d267Brian Paul break; 970afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_ACCUM_BLUE_SIZE: 971b2e460018375f699198073a6167e0ee96ba1d267Brian Paul parselist++; 972b2e460018375f699198073a6167e0ee96ba1d267Brian Paul { 973b2e460018375f699198073a6167e0ee96ba1d267Brian Paul GLint size = *parselist++; 974b2e460018375f699198073a6167e0ee96ba1d267Brian Paul accumBlueSize = MAX2( accumBlueSize, size ); 975b2e460018375f699198073a6167e0ee96ba1d267Brian Paul } 976b2e460018375f699198073a6167e0ee96ba1d267Brian Paul break; 977afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_ACCUM_ALPHA_SIZE: 978afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg parselist++; 979afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg { 980afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg GLint size = *parselist++; 981b2e460018375f699198073a6167e0ee96ba1d267Brian Paul accumAlphaSize = MAX2( accumAlphaSize, size ); 982afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 983afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 984afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 985afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* 986afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * GLX_EXT_visual_info extension 987afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 988afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_X_VISUAL_TYPE_EXT: 989afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg parselist++; 990afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg visual_type = *parselist++; 991afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 992afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_TRANSPARENT_TYPE_EXT: 993afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg parselist++; 994afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg trans_type = *parselist++; 995afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 996afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_TRANSPARENT_INDEX_VALUE_EXT: 997afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg parselist++; 998afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg trans_value = *parselist++; 999afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 1000afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_TRANSPARENT_RED_VALUE_EXT: 1001afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_TRANSPARENT_GREEN_VALUE_EXT: 1002afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_TRANSPARENT_BLUE_VALUE_EXT: 1003afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_TRANSPARENT_ALPHA_VALUE_EXT: 1004afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* ignore */ 1005afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg parselist++; 1006afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg parselist++; 1007afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 10085e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 1009e1210b176926349b258c7ec77b7f36716025c82aBrian Paul /* 1010e1210b176926349b258c7ec77b7f36716025c82aBrian Paul * GLX_EXT_visual_info extension 1011e1210b176926349b258c7ec77b7f36716025c82aBrian Paul */ 1012e1210b176926349b258c7ec77b7f36716025c82aBrian Paul case GLX_VISUAL_CAVEAT_EXT: 1013e1210b176926349b258c7ec77b7f36716025c82aBrian Paul parselist++; 1014e1210b176926349b258c7ec77b7f36716025c82aBrian Paul caveat = *parselist++; /* ignored for now */ 1015e1210b176926349b258c7ec77b7f36716025c82aBrian Paul break; 1016e1210b176926349b258c7ec77b7f36716025c82aBrian Paul 1017afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case None: 1018afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg break; 1019afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 1020afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* undefined attribute */ 1021afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return NULL; 1022afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1023afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1024afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1025afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* 1026afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Since we're only simulating the GLX extension this function will never 1027afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * find any real GL visuals. Instead, all we can do is try to find an RGB 1028afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * or CI visual of appropriate depth. Other requested attributes such as 1029afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * double buffering, depth buffer, etc. will be associated with the X 1030afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * visual and stored in the VisualTable[]. 1031afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 1032afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (level==0) { 1033afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* normal color planes */ 1034afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (rgb_flag) { 1035afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Get an RGB visual */ 1036afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int min_rgb = min_red + min_green + min_blue; 1037afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (min_rgb>1 && min_rgb<8) { 1038afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* a special case to be sure we can get a monochrome visual */ 1039afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg min_rgb = 1; 1040afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1041afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vis = choose_x_visual( dpy, screen, rgb_flag, min_rgb, visual_type ); 1042afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1043afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 1044afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Get a color index visual */ 1045afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg vis = choose_x_visual( dpy, screen, rgb_flag, min_ci, visual_type ); 1046b2e460018375f699198073a6167e0ee96ba1d267Brian Paul accumRedSize = accumGreenSize = accumBlueSize = accumAlphaSize = 0; 1047afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1048afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1049afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 1050afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* over/underlay planes */ 105142f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul if (rgb_flag) { 105242f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul /* rgba overlay */ 105342f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul int min_rgb = min_red + min_green + min_blue; 105442f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul if (min_rgb>1 && min_rgb<8) { 105542f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul /* a special case to be sure we can get a monochrome visual */ 105642f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul min_rgb = 1; 105742f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul } 105842f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul vis = choose_x_overlay_visual( dpy, screen, rgb_flag, level, 105942f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul trans_type, trans_value, min_rgb, visual_type ); 106042f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul } 106142f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul else { 106242f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul /* color index overlay */ 106342f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul vis = choose_x_overlay_visual( dpy, screen, rgb_flag, level, 106442f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul trans_type, trans_value, min_ci, visual_type ); 106542f252fc06e6fd0bb8c95cb9d238c1416b5d50e7Brian Paul } 1066afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1067afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1068afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (vis) { 1069ed30dfa1264ec8875a3162c3c8778bc703bf11d5Brian Paul /* Note: we're not exactly obeying the glXChooseVisual rules here. 1070ed30dfa1264ec8875a3162c3c8778bc703bf11d5Brian Paul * When GLX_DEPTH_SIZE = 1 is specified we're supposed to choose the 10712c7e6334ec81c2fab2cce9e0fe52cd30256e37eaBrian Paul * largest depth buffer size, which is 32bits/value. Instead, we 1072ed30dfa1264ec8875a3162c3c8778bc703bf11d5Brian Paul * return 16 to maintain performance with earlier versions of Mesa. 1073ed30dfa1264ec8875a3162c3c8778bc703bf11d5Brian Paul */ 10742c7e6334ec81c2fab2cce9e0fe52cd30256e37eaBrian Paul if (depth_size > 24) 10752c7e6334ec81c2fab2cce9e0fe52cd30256e37eaBrian Paul depth_size = 31; /* 32 causes int overflow problems */ 1076ed30dfa1264ec8875a3162c3c8778bc703bf11d5Brian Paul else if (depth_size > 16) 1077ed30dfa1264ec8875a3162c3c8778bc703bf11d5Brian Paul depth_size = 24; 10782c7e6334ec81c2fab2cce9e0fe52cd30256e37eaBrian Paul else if (depth_size > 0) 10792c7e6334ec81c2fab2cce9e0fe52cd30256e37eaBrian Paul depth_size = DEFAULT_SOFTWARE_DEPTH_BITS; /*16*/ 10802c7e6334ec81c2fab2cce9e0fe52cd30256e37eaBrian Paul 1081ed30dfa1264ec8875a3162c3c8778bc703bf11d5Brian Paul /* we only support one size of stencil and accum buffers. */ 1082ed30dfa1264ec8875a3162c3c8778bc703bf11d5Brian Paul if (stencil_size > 0) 1083ed30dfa1264ec8875a3162c3c8778bc703bf11d5Brian Paul stencil_size = STENCIL_BITS; 10846d62d7f32189d6a7b053420d16495217dc62f66fBrian Paul if (accumRedSize > 0 || accumGreenSize > 0 || accumBlueSize > 0 || 10856d62d7f32189d6a7b053420d16495217dc62f66fBrian Paul accumAlphaSize > 0) { 1086b2e460018375f699198073a6167e0ee96ba1d267Brian Paul accumRedSize = ACCUM_BITS; 1087b2e460018375f699198073a6167e0ee96ba1d267Brian Paul accumGreenSize = ACCUM_BITS; 1088b2e460018375f699198073a6167e0ee96ba1d267Brian Paul accumBlueSize = ACCUM_BITS; 10896d62d7f32189d6a7b053420d16495217dc62f66fBrian Paul accumAlphaSize = alpha_flag ? ACCUM_BITS : 0; 10906d62d7f32189d6a7b053420d16495217dc62f66fBrian Paul } 10916d62d7f32189d6a7b053420d16495217dc62f66fBrian Paul 1092afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (!save_glx_visual( dpy, vis, rgb_flag, alpha_flag, double_flag, 1093b2e460018375f699198073a6167e0ee96ba1d267Brian Paul stereo_flag, depth_size, stencil_size, 1094b2e460018375f699198073a6167e0ee96ba1d267Brian Paul accumRedSize, accumGreenSize, 1095b2e460018375f699198073a6167e0ee96ba1d267Brian Paul accumBlueSize, accumAlphaSize, 1096b2e460018375f699198073a6167e0ee96ba1d267Brian Paul level )) 1097afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return NULL; 1098afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1099afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1100afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return vis; 1101afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1102afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1103afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1104afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1105afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1106426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic GLXContext 1107426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXCreateContext( Display *dpy, XVisualInfo *visinfo, 1108426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul GLXContext share_list, Bool direct ) 1109afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 1110afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XMesaVisual glxvis; 11117a1f3a37a10b162b067239dafa19fc6865a41f14Keith Whitwell XMesaContext xmctx; 1112afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1113afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* deallocate unused windows/buffers */ 1114afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XMesaGarbageCollect(); 1115afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1116afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg glxvis = find_glx_visual( dpy, visinfo ); 1117afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (!glxvis) { 1118afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* This visual wasn't found with glXChooseVisual() */ 1119afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg glxvis = create_glx_visual( dpy, visinfo ); 1120afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (!glxvis) { 1121afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* unusable visual */ 1122afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return NULL; 1123afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1124afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1125afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 11267a1f3a37a10b162b067239dafa19fc6865a41f14Keith Whitwell xmctx = XMesaCreateContext( glxvis, (XMesaContext) share_list ); 11277a1f3a37a10b162b067239dafa19fc6865a41f14Keith Whitwell if (xmctx) { 1128afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* set the direct/indirect flag */ 1129afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg xmctx->direct = direct; 1130afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 11317a1f3a37a10b162b067239dafa19fc6865a41f14Keith Whitwell return (GLXContext) xmctx; 1132afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1133afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1134afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1135afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgstatic GLXContext MakeCurrent_PrevContext = 0; 1136086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paulstatic GLXDrawable MakeCurrent_PrevDrawable = 0; 1137086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paulstatic GLXDrawable MakeCurrent_PrevReadable = 0; 1138086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paulstatic XMesaBuffer MakeCurrent_PrevDrawBuffer = 0; 1139086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paulstatic XMesaBuffer MakeCurrent_PrevReadBuffer = 0; 1140afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1141086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul/* GLX 1.3 and later */ 1142426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic Bool 1143426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXMakeContextCurrent( Display *dpy, GLXDrawable draw, 11447a1f3a37a10b162b067239dafa19fc6865a41f14Keith Whitwell GLXDrawable read, GLXContext ctx ) 1145086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul{ 11467a1f3a37a10b162b067239dafa19fc6865a41f14Keith Whitwell if (ctx && draw && read) { 1147086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul XMesaBuffer drawBuffer, readBuffer; 11487a1f3a37a10b162b067239dafa19fc6865a41f14Keith Whitwell XMesaContext xmctx = (XMesaContext) ctx; 1149086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul 1150086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul /* Find the XMesaBuffer which corresponds to the GLXDrawable 'draw' */ 11517a1f3a37a10b162b067239dafa19fc6865a41f14Keith Whitwell if (ctx == MakeCurrent_PrevContext 11527a1f3a37a10b162b067239dafa19fc6865a41f14Keith Whitwell && draw == MakeCurrent_PrevDrawable) { 1153086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul drawBuffer = MakeCurrent_PrevDrawBuffer; 1154086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul } 1155086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul else { 1156086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul drawBuffer = XMesaFindBuffer( dpy, draw ); 1157086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul } 1158086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul if (!drawBuffer) { 1159086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul /* drawable must be a new window! */ 11607a1f3a37a10b162b067239dafa19fc6865a41f14Keith Whitwell drawBuffer = XMesaCreateWindowBuffer2( xmctx->xm_visual, draw, (XMesaContext) ctx ); 1161086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul if (!drawBuffer) { 1162086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul /* Out of memory, or context/drawable depth mismatch */ 1163086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul return False; 1164086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul } 1165086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul } 1166086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul 1167086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul /* Find the XMesaBuffer which corresponds to the GLXDrawable 'read' */ 11687a1f3a37a10b162b067239dafa19fc6865a41f14Keith Whitwell if (ctx == MakeCurrent_PrevContext 1169086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul && read == MakeCurrent_PrevReadable) { 1170086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul readBuffer = MakeCurrent_PrevReadBuffer; 1171086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul } 1172086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul else { 1173086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul readBuffer = XMesaFindBuffer( dpy, read ); 1174086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul } 1175086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul if (!readBuffer) { 1176086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul /* drawable must be a new window! */ 11777a1f3a37a10b162b067239dafa19fc6865a41f14Keith Whitwell readBuffer = XMesaCreateWindowBuffer2( xmctx->xm_visual, read, (XMesaContext) ctx ); 1178086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul if (!readBuffer) { 1179086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul /* Out of memory, or context/drawable depth mismatch */ 1180086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul return False; 1181086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul } 1182086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul } 1183086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul 11847a1f3a37a10b162b067239dafa19fc6865a41f14Keith Whitwell MakeCurrent_PrevContext = ctx; 1185086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul MakeCurrent_PrevDrawable = draw; 1186086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul MakeCurrent_PrevReadable = read; 1187086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul MakeCurrent_PrevDrawBuffer = drawBuffer; 1188086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul MakeCurrent_PrevReadBuffer = readBuffer; 1189086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul 1190086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul /* Now make current! */ 11917a1f3a37a10b162b067239dafa19fc6865a41f14Keith Whitwell return (Bool) XMesaMakeCurrent2((XMesaContext) ctx, drawBuffer, readBuffer); 1192086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul } 11937a1f3a37a10b162b067239dafa19fc6865a41f14Keith Whitwell else if (!ctx && !draw && !read) { 1194086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul /* release current context w/out assigning new one. */ 1195086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul XMesaMakeCurrent( NULL, NULL ); 1196086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul MakeCurrent_PrevContext = 0; 1197086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul MakeCurrent_PrevDrawable = 0; 1198086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul MakeCurrent_PrevReadable = 0; 1199086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul MakeCurrent_PrevDrawBuffer = 0; 1200086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul MakeCurrent_PrevReadBuffer = 0; 1201086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul return True; 1202086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul } 1203086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul else { 1204086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul /* The args must either all be non-zero or all zero. 1205086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul * This is an error. 1206086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul */ 1207086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul return False; 1208086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul } 1209086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul} 1210086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul 1211086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul 1212426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1213426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic Bool 1214426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXMakeCurrent( Display *dpy, GLXDrawable drawable, GLXContext ctx ) 1215426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul{ 1216426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul return Fake_glXMakeContextCurrent( dpy, drawable, drawable, ctx ); 1217426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul} 1218426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1219426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1220426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1221426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic GLXPixmap 1222426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXCreateGLXPixmap( Display *dpy, XVisualInfo *visinfo, Pixmap pixmap ) 1223afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 1224afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XMesaVisual v; 1225afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XMesaBuffer b; 1226afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1227afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg v = find_glx_visual( dpy, visinfo ); 1228afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (!v) { 1229afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg v = create_glx_visual( dpy, visinfo ); 1230afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (!v) { 1231afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* unusable visual */ 1232afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1233afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1234afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1235afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1236afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg b = XMesaCreatePixmapBuffer( v, pixmap, 0 ); 1237afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (!b) { 1238afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1239afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1240afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return b->frontbuffer; 1241afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1242afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1243afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1244afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#ifdef GLX_MESA_pixmap_colormap 1245426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic GLXPixmap 1246426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXCreateGLXPixmapMESA( Display *dpy, XVisualInfo *visinfo, 1247426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul Pixmap pixmap, Colormap cmap ) 1248afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 1249afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XMesaVisual v; 1250afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XMesaBuffer b; 1251afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1252afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg v = find_glx_visual( dpy, visinfo ); 1253afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (!v) { 1254afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg v = create_glx_visual( dpy, visinfo ); 1255afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (!v) { 1256afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* unusable visual */ 1257afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1258afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1259afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1260afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1261afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg b = XMesaCreatePixmapBuffer( v, pixmap, cmap ); 1262afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (!b) { 1263afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1264afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1265afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return b->frontbuffer; 1266afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1267afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg#endif 1268afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1269afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1270426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic void 1271426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXDestroyGLXPixmap( Display *dpy, GLXPixmap pixmap ) 1272afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 1273afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XMesaBuffer b = XMesaFindBuffer(dpy, pixmap); 1274afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (b) { 1275afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XMesaDestroyBuffer(b); 1276afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1277afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else if (getenv("MESA_DEBUG")) { 1278afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg fprintf( stderr, "Mesa: glXDestroyGLXPixmap: invalid pixmap\n"); 1279afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1280afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1281afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1282afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 12834c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul 1284426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic void 1285426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXCopyContext( Display *dpy, GLXContext src, GLXContext dst, 12863994b77bab8c62a4c1a4dffdfba233ef46662b99Brian Paul unsigned long mask ) 1287afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 12887a1f3a37a10b162b067239dafa19fc6865a41f14Keith Whitwell XMesaContext xm_src = (XMesaContext) src; 12897a1f3a37a10b162b067239dafa19fc6865a41f14Keith Whitwell XMesaContext xm_dst = (XMesaContext) dst; 1290afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg (void) dpy; 12917a1f3a37a10b162b067239dafa19fc6865a41f14Keith Whitwell _mesa_copy_context( xm_src->gl_ctx, xm_dst->gl_ctx, (GLuint) mask ); 1292afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1293afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1294afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1295afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1296426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic Bool 1297426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXQueryExtension( Display *dpy, int *errorb, int *event ) 1298afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 1299afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Mesa's GLX isn't really an X extension but we try to act like one. */ 1300afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg (void) dpy; 1301afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg (void) errorb; 1302afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg (void) event; 1303afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return True; 1304afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1305afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1306afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1307e7b16b74bf5d13331b5a88bbbbb9096560297b63Brian Paulextern void _kw_ungrab_all( Display *dpy ); 1308afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtgvoid _kw_ungrab_all( Display *dpy ) 1309afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 1310afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XUngrabPointer( dpy, CurrentTime ); 1311afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XUngrabKeyboard( dpy, CurrentTime ); 1312afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1313afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1314afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1315426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic void 1316426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXDestroyContext( Display *dpy, GLXContext ctx ) 1317afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 1318afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg (void) dpy; 1319afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg MakeCurrent_PrevContext = 0; 1320afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg MakeCurrent_PrevDrawable = 0; 1321086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul MakeCurrent_PrevReadable = 0; 1322086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul MakeCurrent_PrevDrawBuffer = 0; 1323086a151f942b2bcd8b9fbc56255e45b8c89b705eBrian Paul MakeCurrent_PrevReadBuffer = 0; 13247a1f3a37a10b162b067239dafa19fc6865a41f14Keith Whitwell XMesaDestroyContext( (XMesaContext) ctx ); 1325afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XMesaGarbageCollect(); 1326afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1327afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1328afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1329afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1330426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic Bool 1331426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXIsDirect( Display *dpy, GLXContext ctx ) 1332afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 1333afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg (void) dpy; 13347a1f3a37a10b162b067239dafa19fc6865a41f14Keith Whitwell return ((XMesaContext) ctx)->direct; 1335afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1336afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1337afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1338afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1339426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic void 1340426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXSwapBuffers( Display *dpy, GLXDrawable drawable ) 1341afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 1342afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XMesaBuffer buffer = XMesaFindBuffer( dpy, drawable ); 1343afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1344afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (buffer) { 1345afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XMesaSwapBuffers(buffer); 1346afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1347afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else if (getenv("MESA_DEBUG")) { 1348afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg fprintf(stderr, "Mesa Warning: glXSwapBuffers: invalid drawable\n"); 1349afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1350afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1351afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1352afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 13534c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul 13544c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_MESA_copy_sub_buffer 1355426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic void 1356426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXCopySubBufferMESA( Display *dpy, GLXDrawable drawable, 1357426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul int x, int y, int width, int height ) 1358afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 1359afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XMesaBuffer buffer = XMesaFindBuffer( dpy, drawable ); 1360afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (buffer) { 1361afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XMesaCopySubBuffer(buffer, x, y, width, height); 1362afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1363afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else if (getenv("MESA_DEBUG")) { 1364afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg fprintf(stderr, "Mesa Warning: glXCopySubBufferMESA: invalid drawable\n"); 1365afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1366afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 13674c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#endif 1368afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1369afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1370afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1371426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic Bool 1372426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXQueryVersion( Display *dpy, int *maj, int *min ) 1373afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 1374afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg (void) dpy; 1375afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* Return GLX version, not Mesa version */ 137678fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul assert(CLIENT_MAJOR_VERSION == SERVER_MAJOR_VERSION); 137778fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul *maj = CLIENT_MAJOR_VERSION; 137878fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul *min = MIN2( CLIENT_MINOR_VERSION, SERVER_MINOR_VERSION ); 1379afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return True; 1380afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1381afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1382afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1383afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1384afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* 1385afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Query the GLX attributes of the given XVisualInfo. 1386afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 1387426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic int 1388426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXGetConfig( Display *dpy, XVisualInfo *visinfo, 1389426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul int attrib, int *value ) 1390afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 1391afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XMesaVisual glxvis; 1392afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1393afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg glxvis = find_glx_visual( dpy, visinfo ); 1394afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (!glxvis) { 1395afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* this visual wasn't obtained with glXChooseVisual */ 1396afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg glxvis = create_glx_visual( dpy, visinfo ); 1397afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (!glxvis) { 1398afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* this visual can't be used for GL rendering */ 1399afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (attrib==GLX_USE_GL) { 1400afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg *value = (int) False; 1401afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1402afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1403afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 1404afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /*fprintf( stderr, "Mesa: Error in glXGetConfig: bad visual\n");*/ 1405afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return GLX_BAD_VISUAL; 1406afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1407afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1408afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1409afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1410afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg switch(attrib) { 1411afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_USE_GL: 1412afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg *value = (int) True; 1413afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1414afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_BUFFER_SIZE: 1415afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg *value = visinfo->depth; 1416afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1417afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_LEVEL: 1418afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg *value = glxvis->level; 1419afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1420afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_RGBA: 14211832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul if (glxvis->mesa_visual.rgbMode) { 1422afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg *value = True; 1423afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1424afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 1425afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg *value = False; 1426afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1427afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1428afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_DOUBLEBUFFER: 14291832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul *value = (int) glxvis->mesa_visual.doubleBufferMode; 1430afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1431afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_STEREO: 14321832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul *value = (int) glxvis->mesa_visual.stereoMode; 1433afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1434afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_AUX_BUFFERS: 1435afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg *value = (int) False; 1436afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1437afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_RED_SIZE: 14381832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul *value = glxvis->mesa_visual.redBits; 1439afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1440afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_GREEN_SIZE: 14411832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul *value = glxvis->mesa_visual.greenBits; 1442afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1443afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_BLUE_SIZE: 14441832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul *value = glxvis->mesa_visual.blueBits; 1445afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1446afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_ALPHA_SIZE: 14471832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul *value = glxvis->mesa_visual.alphaBits; 1448afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1449afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_DEPTH_SIZE: 14501832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul *value = glxvis->mesa_visual.depthBits; 1451afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1452afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_STENCIL_SIZE: 14531832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul *value = glxvis->mesa_visual.stencilBits; 1454afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1455afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_ACCUM_RED_SIZE: 14561832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul *value = glxvis->mesa_visual.accumRedBits; 1457b2e460018375f699198073a6167e0ee96ba1d267Brian Paul return 0; 1458afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_ACCUM_GREEN_SIZE: 14591832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul *value = glxvis->mesa_visual.accumGreenBits; 1460b2e460018375f699198073a6167e0ee96ba1d267Brian Paul return 0; 1461afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_ACCUM_BLUE_SIZE: 14621832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul *value = glxvis->mesa_visual.accumBlueBits; 1463afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1464afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_ACCUM_ALPHA_SIZE: 14651832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul *value = glxvis->mesa_visual.accumAlphaBits; 1466afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1467afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1468afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* 1469afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * GLX_EXT_visual_info extension 1470afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 1471afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_X_VISUAL_TYPE_EXT: 1472afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg switch (glxvis->visinfo->CLASS) { 1473afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case StaticGray: *value = GLX_STATIC_GRAY_EXT; return 0; 1474afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GrayScale: *value = GLX_GRAY_SCALE_EXT; return 0; 1475afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case StaticColor: *value = GLX_STATIC_GRAY_EXT; return 0; 1476afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case PseudoColor: *value = GLX_PSEUDO_COLOR_EXT; return 0; 1477afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case TrueColor: *value = GLX_TRUE_COLOR_EXT; return 0; 1478afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case DirectColor: *value = GLX_DIRECT_COLOR_EXT; return 0; 1479afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1480afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1481afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_TRANSPARENT_TYPE_EXT: 1482afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (glxvis->level==0) { 1483afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* normal planes */ 1484afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg *value = GLX_NONE_EXT; 1485afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1486afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else if (glxvis->level>0) { 1487afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* overlay */ 14881832f1cc86758fdcbd122edd5bf9e7a29ccade20Brian Paul if (glxvis->mesa_visual.rgbMode) { 1489afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg *value = GLX_TRANSPARENT_RGB_EXT; 1490afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1491afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else { 1492afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg *value = GLX_TRANSPARENT_INDEX_EXT; 1493afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1494afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1495afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg else if (glxvis->level<0) { 1496afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* underlay */ 1497afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg *value = GLX_NONE_EXT; 1498afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1499afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1500afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_TRANSPARENT_INDEX_VALUE_EXT: 1501afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg { 1502afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg int pixel = transparent_pixel( glxvis ); 1503afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg if (pixel>=0) { 1504afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg *value = pixel; 1505afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1506afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* else undefined */ 1507afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1508afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1509afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_TRANSPARENT_RED_VALUE_EXT: 1510afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* undefined */ 1511afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1512afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_TRANSPARENT_GREEN_VALUE_EXT: 1513afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* undefined */ 1514afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1515afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_TRANSPARENT_BLUE_VALUE_EXT: 1516afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* undefined */ 1517afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1518afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_TRANSPARENT_ALPHA_VALUE_EXT: 1519afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* undefined */ 1520afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return 0; 1521afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1522afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg /* 1523b2e460018375f699198073a6167e0ee96ba1d267Brian Paul * GLX_EXT_visual_info extension 1524b2e460018375f699198073a6167e0ee96ba1d267Brian Paul */ 1525b2e460018375f699198073a6167e0ee96ba1d267Brian Paul case GLX_VISUAL_CAVEAT_EXT: 1526fc68be6b111473a0bf8f991468f973bb9dd275f4Brian Paul /* test for zero, just in case */ 1527962f4269153ba954e137aab94ff4eaad4a7b02aeBrian Paul if (glxvis->VisualCaveat > 0) 1528962f4269153ba954e137aab94ff4eaad4a7b02aeBrian Paul *value = glxvis->VisualCaveat; 1529962f4269153ba954e137aab94ff4eaad4a7b02aeBrian Paul else 1530962f4269153ba954e137aab94ff4eaad4a7b02aeBrian Paul *value = GLX_NONE_EXT; 1531962f4269153ba954e137aab94ff4eaad4a7b02aeBrian Paul return 0; 1532b2e460018375f699198073a6167e0ee96ba1d267Brian Paul 1533b2e460018375f699198073a6167e0ee96ba1d267Brian Paul /* 1534afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg * Extensions 1535afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg */ 1536afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 1537afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return GLX_BAD_ATTRIBUTE; 1538afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1539afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1540afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1541afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1542afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1543426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic void 1544426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXWaitGL( void ) 1545afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 1546afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XMesaContext xmesa = XMesaGetCurrentContext(); 1547afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XMesaFlush( xmesa ); 1548afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1549afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1550afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1551afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1552426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic void 1553426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXWaitX( void ) 1554afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 1555afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XMesaContext xmesa = XMesaGetCurrentContext(); 1556afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg XMesaFlush( xmesa ); 1557afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1558afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1559afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 156043c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul/* 156143c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul * Return the extensions string, which is 3Dfx-dependant. 156243c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul */ 156343c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paulstatic const char *get_extensions( void ) 156443c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul{ 156543c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul#ifdef FX 156643c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul const char *fx = getenv("MESA_GLX_FX"); 156743c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul if (fx && fx[0] != 'd') { 1568e1210b176926349b258c7ec77b7f36716025c82aBrian Paul return "GLX_MESA_pixmap_colormap GLX_EXT_visual_info GLX_EXT_visual_rating GLX_MESA_release_buffers GLX_MESA_copy_sub_buffer GLX_SGI_video_sync GLX_MESA_set_3dfx_mode GLX_ARB_get_proc_address"; 156943c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul } 157043c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul#endif 1571e1210b176926349b258c7ec77b7f36716025c82aBrian Paul return "GLX_MESA_pixmap_colormap GLX_EXT_visual_info GLX_EXT_visual_rating GLX_MESA_release_buffers GLX_MESA_copy_sub_buffer GLX_SGI_video_sync GLX_ARB_get_proc_address"; 157243c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul} 1573afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1574afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1575afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1576afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* GLX 1.1 and later */ 1577426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic const char * 1578426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXQueryExtensionsString( Display *dpy, int screen ) 1579afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 1580afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg (void) dpy; 1581afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg (void) screen; 158243c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul return get_extensions(); 1583afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1584afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1585afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1586afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1587afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* GLX 1.1 and later */ 1588426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic const char * 1589426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXQueryServerString( Display *dpy, int screen, int name ) 1590afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 159178fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul static char version[1000]; 159278fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul sprintf(version, "%d.%d %s", SERVER_MAJOR_VERSION, SERVER_MINOR_VERSION, 159378fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul MESA_GLX_VERSION); 1594afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1595afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg (void) dpy; 1596afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg (void) screen; 1597afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1598afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg switch (name) { 1599afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_EXTENSIONS: 160043c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul return get_extensions(); 1601afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_VENDOR: 160278fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul return VENDOR; 1603afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_VERSION: 1604afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return version; 1605afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 1606afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return NULL; 1607afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1608afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1609afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1610afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1611afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1612afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg/* GLX 1.1 and later */ 1613426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic const char * 1614426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXGetClientString( Display *dpy, int name ) 1615afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 161678fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul static char version[1000]; 161778fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul sprintf(version, "%d.%d %s", CLIENT_MAJOR_VERSION, CLIENT_MINOR_VERSION, 161878fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul MESA_GLX_VERSION); 1619afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1620afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg (void) dpy; 1621afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1622afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg switch (name) { 1623afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_EXTENSIONS: 162443c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul return get_extensions(); 1625afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_VENDOR: 162678fc78e0f68a20ae90f3d4aaf361751a9185a0b9Brian Paul return VENDOR; 1627afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg case GLX_VERSION: 1628afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return version; 1629afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg default: 1630afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return NULL; 1631afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg } 1632afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1633afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1634afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1635afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1636426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul/* 1637426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul * GLX 1.3 and later 1638426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul */ 1639426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 16405605798e56ca6e9f968623f33b58ee7ca90594afBrian Paulstatic GLXFBConfig * 1641426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXChooseFBConfig( Display *dpy, int screen, 1642426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul const int *attribList, int *nitems ) 1643426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul{ 1644426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) dpy; 1645426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) screen; 1646426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) attribList; 1647426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) nitems; 1648426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul return 0; 1649426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul} 1650426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1651426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1652426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic int 1653426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXGetFBConfigAttrib( Display *dpy, GLXFBConfig config, 1654426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul int attribute, int *value ) 1655426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul{ 1656426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) dpy; 1657426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) config; 1658426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) attribute; 1659426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) value; 1660426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul return 0; 1661426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul} 1662426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1663426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 16645605798e56ca6e9f968623f33b58ee7ca90594afBrian Paulstatic GLXFBConfig * 16655605798e56ca6e9f968623f33b58ee7ca90594afBrian PaulFake_glXGetFBConfigs( Display *dpy, int screen, int *nelements ) 16665605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul{ 16675605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul (void) dpy; 16685605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul (void) screen; 16695605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul (void) nelements; 16705605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul return 0; 16715605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul} 16725605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul 16735605798e56ca6e9f968623f33b58ee7ca90594afBrian Paul 1674426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic XVisualInfo * 1675426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXGetVisualFromFBConfig( Display *dpy, GLXFBConfig config ) 1676426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul{ 1677426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) dpy; 1678426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) config; 1679426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul return 0; 1680426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul} 1681426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1682426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1683426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic GLXWindow 1684426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXCreateWindow( Display *dpy, GLXFBConfig config, Window win, 1685426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul const int *attribList ) 1686426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul{ 1687426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) dpy; 1688426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) config; 1689426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) win; 1690426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) attribList; 1691426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul return 0; 1692426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul} 1693426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1694426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1695426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic void 1696426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXDestroyWindow( Display *dpy, GLXWindow window ) 1697426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul{ 1698426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) dpy; 1699426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) window; 1700426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul return; 1701426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul} 1702426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1703426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1704426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic GLXPixmap 1705426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXCreatePixmap( Display *dpy, GLXFBConfig config, Pixmap pixmap, 1706426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul const int *attribList ) 1707426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul{ 1708426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) dpy; 1709426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) config; 1710426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) pixmap; 1711426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) attribList; 1712426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul return 0; 1713426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul} 1714426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1715426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1716426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic void 1717426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXDestroyPixmap( Display *dpy, GLXPixmap pixmap ) 1718426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul{ 1719426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) dpy; 1720426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) pixmap; 1721426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul return; 1722426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul} 1723426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1724426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1725426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic GLXPbuffer 1726426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXCreatePbuffer( Display *dpy, GLXFBConfig config, 1727426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul const int *attribList ) 1728426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul{ 1729426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) dpy; 1730426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) config; 1731426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) attribList; 1732426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul return 0; 1733426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul} 1734426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1735426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1736426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic void 1737426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXDestroyPbuffer( Display *dpy, GLXPbuffer pbuf ) 1738426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul{ 1739426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) dpy; 1740426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) pbuf; 1741426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul} 1742426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1743426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1744426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic void 1745426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXQueryDrawable( Display *dpy, GLXDrawable draw, int attribute, 1746426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul unsigned int *value ) 1747426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul{ 1748426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) dpy; 1749426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) draw; 1750426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) attribute; 1751426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) value; 1752426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul} 1753426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1754426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1755426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic GLXContext 1756426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXCreateNewContext( Display *dpy, GLXFBConfig config, 1757426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul int renderType, GLXContext shareList, Bool direct ) 1758426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul{ 1759426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) dpy; 1760426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) config; 1761426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) renderType; 1762426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) shareList; 1763426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) direct; 1764426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul return 0; 1765426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul} 1766426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1767426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1768426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic int 1769426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXQueryContext( Display *dpy, GLXContext ctx, int attribute, int *value ) 1770426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul{ 1771426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) dpy; 1772426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) ctx; 1773426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) attribute; 1774426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) value; 1775426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul return 0; 1776426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul} 1777426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1778426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1779426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic void 1780426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXSelectEvent( Display *dpy, GLXDrawable drawable, unsigned long mask ) 1781426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul{ 1782426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) dpy; 1783426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) drawable; 1784426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) mask; 1785426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul} 1786426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1787426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1788426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic void 1789426cb9f58f194a1e30e0908e8fc971bdcae06960Brian PaulFake_glXGetSelectedEvent( Display *dpy, GLXDrawable drawable, 1790426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul unsigned long *mask ) 1791426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul{ 1792426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) dpy; 1793426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) drawable; 1794426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) mask; 1795426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul} 1796b82d993b03320818f88f792a9e713f7ed491bfcbBrian Paul 1797b82d993b03320818f88f792a9e713f7ed491bfcbBrian Paul 1798b82d993b03320818f88f792a9e713f7ed491bfcbBrian Paul 1799783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_SGI_swap_control 1800783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1801783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic int 1802783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXSwapIntervalSGI(int interval) 1803783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 1804783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) interval; 1805783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return 0; 1806783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 1807783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1808783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 1809783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1810783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1811783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_SGI_video_sync 1812783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1813783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic int 1814783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXGetVideoSyncSGI(unsigned int *count) 1815783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 1816783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) count; 1817783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return 0; 1818783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 1819783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1820783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic int 1821783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXWaitVideoSyncSGI(int divisor, int remainder, unsigned int *count) 1822783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 1823783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) divisor; 1824783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) remainder; 1825783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) count; 1826783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return 0; 1827783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 1828783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1829783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 1830783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1831783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1832783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_SGI_make_current_read 1833783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1834426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic Bool 1835783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXMakeCurrentReadSGI(Display *dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx) 1836afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 1837783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 1838783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) draw; 1839783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) read; 1840783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) ctx; 1841afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg return False; 1842afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1843783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1844783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic GLXDrawable 1845783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXGetCurrentReadDrawableSGI(void) 1846783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 1847783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return 0; 1848783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 1849783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 18504c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#endif 1851afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1852afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg 1853783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#if defined(_VL_H) && defined(GLX_SGIX_video_source) 18544c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul 1855783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic GLXVideoSourceSGIX 1856783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXCreateGLXVideoSourceSGIX(Display *dpy, int screen, VLServer server, VLPath path, int nodeClass, VLNode drainNode) 1857afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg{ 1858783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 1859783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) screen; 1860783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) server; 1861783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) path; 1862783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) nodeClass; 1863783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) drainNode; 1864783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return 0; 1865783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 1866783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1867783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic void 1868783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXDestroyGLXVideoSourceSGIX(Display *dpy, GLXVideoSourceSGIX src) 1869783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 1870783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 1871783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) src; 1872afb833d4e89c312460a4ab9ed6a7a8ca4ebbfe1cjtg} 1873783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 18744c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#endif 18754c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul 187689a42b7e736bd9b0ab090906cab0cd047a6ec12eBrian Paul 1877783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_EXT_import_context 187889a42b7e736bd9b0ab090906cab0cd047a6ec12eBrian Paul 1879783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic void 1880783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXFreeContextEXT(Display *dpy, GLXContext context) 1881783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 1882783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 1883783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) context; 1884783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 1885426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1886783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic GLXContextID 1887783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXGetContextIDEXT(const GLXContext context) 1888783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 1889783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) context; 1890783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return 0; 1891783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 1892783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1893783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic Display * 1894783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXGetCurrentDisplayEXT(void) 1895783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 1896783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return glXGetCurrentDisplay(); 1897783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 1898783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1899783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic GLXContext 1900783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXImportContextEXT(Display *dpy, GLXContextID contextID) 1901783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 1902783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 1903783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) contextID; 1904783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return 0; 1905783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 1906426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1907426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic int 1908783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXQueryContextInfoEXT(Display *dpy, GLXContext context, int attribute, int *value) 1909426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul{ 1910783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 1911783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) context; 1912783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) attribute; 1913783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) value; 1914426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul return 0; 1915426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul} 1916426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1917783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 1918783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1919783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1920783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_SGIX_fbconfig 1921426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1922426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstatic int 1923783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXGetFBConfigAttribSGIX(Display *dpy, GLXFBConfigSGIX config, int attribute, int *value) 1924783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 1925783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 1926783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) config; 1927783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) attribute; 1928783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) value; 1929783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return 0; 1930783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 1931783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1932783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic GLXFBConfigSGIX * 1933783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXChooseFBConfigSGIX(Display *dpy, int screen, int *attrib_list, int *nelements) 1934783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 1935783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 1936783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) screen; 1937783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) attrib_list; 1938783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) nelements; 1939783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return 0; 1940783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 1941783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1942783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic GLXPixmap 1943783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXCreateGLXPixmapWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, Pixmap pixmap) 1944783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 1945783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 1946783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) config; 1947783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) pixmap; 1948783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return 0; 1949783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 1950783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1951783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic GLXContext 1952783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXCreateContextWithConfigSGIX(Display *dpy, GLXFBConfigSGIX config, int render_type, GLXContext share_list, Bool direct) 1953783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 1954783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 1955783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) config; 1956783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) render_type; 1957783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) share_list; 1958783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) direct; 1959783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return 0; 1960783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 1961783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1962783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic XVisualInfo * 1963783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXGetVisualFromFBConfigSGIX(Display *dpy, GLXFBConfigSGIX config) 1964783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 1965783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 1966783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) config; 1967783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return NULL; 1968783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 1969783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1970783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic GLXFBConfigSGIX 1971783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXGetFBConfigFromVisualSGIX(Display *dpy, XVisualInfo *vis) 1972426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul{ 1973783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 1974783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) vis; 1975426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul return 0; 1976426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul} 1977426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1978426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul#endif 1979426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1980426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 1981783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_SGIX_pbuffer 1982783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1983783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic GLXPbufferSGIX 1984783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXCreateGLXPbufferSGIX(Display *dpy, GLXFBConfigSGIX config, unsigned int width, unsigned int height, int *attrib_list) 1985783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 1986783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 1987783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) config; 1988783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) width; 1989783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) height; 1990783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) attrib_list; 1991783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return 0; 1992783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 1993783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 1994783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic void 1995783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXDestroyGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf) 1996783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 1997783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 1998783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) pbuf; 1999783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 2000783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2001783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic int 2002783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXQueryGLXPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuf, int attribute, unsigned int *value) 2003783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 2004783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 2005783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) pbuf; 2006783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) attribute; 2007783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) value; 2008783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return 0; 2009783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 2010783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2011783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic void 2012783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXSelectEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long mask) 2013783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 2014783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 2015783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) drawable; 2016783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) mask; 2017783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 2018783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2019783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic void 2020783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXGetSelectedEventSGIX(Display *dpy, GLXDrawable drawable, unsigned long *mask) 2021783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 2022783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 2023783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) drawable; 2024783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) mask; 2025783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 2026783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2027783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 2028783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2029783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2030783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_SGI_cushion 2031783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2032783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic void 2033783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXCushionSGI(Display *dpy, Window win, float cushion) 2034783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 2035783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 2036783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) win; 2037783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) cushion; 2038783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 2039783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2040783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 2041783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2042783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2043783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_SGIX_video_resize 2044783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2045783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic int 2046783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXBindChannelToWindowSGIX(Display *dpy, int screen, int channel , Window window) 2047783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 2048783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 2049783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) screen; 2050783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) channel; 2051783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) window; 2052783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return 0; 2053783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 2054783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2055783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic int 2056783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXChannelRectSGIX(Display *dpy, int screen, int channel, int x, int y, int w, int h) 2057783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 2058783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 2059783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) screen; 2060783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) channel; 2061783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) x; 2062783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) y; 2063783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) w; 2064783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) h; 2065783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return 0; 2066783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 2067783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2068783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic int 2069783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXQueryChannelRectSGIX(Display *dpy, int screen, int channel, int *x, int *y, int *w, int *h) 2070783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 2071783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 2072783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) screen; 2073783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) channel; 2074783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) x; 2075783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) y; 2076783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) w; 2077783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) h; 2078783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return 0; 2079783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 2080783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2081783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic int 2082783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXQueryChannelDeltasSGIX(Display *dpy, int screen, int channel, int *dx, int *dy, int *dw, int *dh) 2083783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 2084783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 2085783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) screen; 2086783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) channel; 2087783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dx; 2088783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dy; 2089783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dw; 2090783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dh; 2091783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return 0; 2092783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 2093783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2094783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic int 2095783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXChannelRectSyncSGIX(Display *dpy, int screen, int channel, GLenum synctype) 2096783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 2097783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 2098783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) screen; 2099783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) channel; 2100783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) synctype; 2101783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return 0; 2102783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 2103783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2104783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 2105783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2106783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2107783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#if defined(_DM_BUFFER_H_) && defined(GLX_SGIX_dmbuffer) 2108783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2109783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic Bool 2110783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXAssociateDMPbufferSGIX(Display *dpy, GLXPbufferSGIX pbuffer, DMparams *params, DMbuffer dmbuffer) 2111783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 2112783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 2113783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) pbuffer; 2114783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) params; 2115783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dmbuffer; 2116783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return False; 2117783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 2118783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2119783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 2120783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2121783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2122783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_SGIX_swap_group 2123783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2124783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic void 2125783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXJoinSwapGroupSGIX(Display *dpy, GLXDrawable drawable, GLXDrawable member) 2126783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 2127783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 2128783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) drawable; 2129783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) member; 2130783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 2131783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2132783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 2133783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2134783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2135783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_SGIX_swap_barrier 2136783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2137783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic void 2138783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXBindSwapBarrierSGIX(Display *dpy, GLXDrawable drawable, int barrier) 2139783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 2140783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 2141783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) drawable; 2142783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) barrier; 2143783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 2144783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2145783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic Bool 2146783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXQueryMaxSwapBarriersSGIX(Display *dpy, int screen, int *max) 2147783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 2148783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 2149783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) screen; 2150783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) max; 2151783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return False; 2152783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 2153783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2154783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 2155783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2156783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2157783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_SUN_get_transparent_index 2158783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2159783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic Status 2160783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXGetTransparentIndexSUN(Display *dpy, Window overlay, Window underlay, long *pTransparent) 2161783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 2162783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) dpy; 2163783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) overlay; 2164783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) underlay; 2165783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul (void) pTransparent; 2166783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return 0; 2167783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 2168783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2169783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 2170783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2171783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2172783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_MESA_release_buffers 2173783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul/* 2174783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul * Release the depth, stencil, accum buffers attached to a GLXDrawable 2175783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul * (a window or pixmap) prior to destroying the GLXDrawable. 2176783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul */ 2177783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic Bool 2178783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXReleaseBuffersMESA( Display *dpy, GLXDrawable d ) 2179783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 2180783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul XMesaBuffer b = XMesaFindBuffer(dpy, d); 2181783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul if (b) { 2182783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul XMesaDestroyBuffer(b); 2183783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return True; 2184783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul } 2185783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return False; 2186783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 2187783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 2188783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2189783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2190783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2191783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_MESA_set_3dfx_mode 2192783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paulstatic Bool 2193783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian PaulFake_glXSet3DfxModeMESA( int mode ) 2194783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul{ 2195783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul return XMesaSetFXmode( mode ); 2196783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul} 2197783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 2198783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2199783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2200783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 220143c9c2cfae458cf0d7618af5f25d57c0a5ebae08Brian Paul 2202e7b16b74bf5d13331b5a88bbbbb9096560297b63Brian Paulextern struct _glxapi_table *_mesa_GetGLXDispatchTable(void); 2203426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paulstruct _glxapi_table *_mesa_GetGLXDispatchTable(void) 2204426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul{ 2205426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul static struct _glxapi_table glx; 2206426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 2207426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul /* be sure our dispatch table size <= libGL's table */ 2208426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul { 220901915e90e6912f06d43d443a09157f7bbc96ddc5Brian Paul GLuint size = sizeof(struct _glxapi_table) / sizeof(void *); 2210426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul (void) size; 2211426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul assert(_glxapi_get_dispatch_table_size() >= size); 2212426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul } 2213426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 2214426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul /* initialize the whole table to no-ops */ 2215426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul _glxapi_set_no_op_table(&glx); 2216426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 2217426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul /* now initialize the table with the functions I implement */ 2218426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.ChooseVisual = Fake_glXChooseVisual; 2219426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.CopyContext = Fake_glXCopyContext; 2220426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.CreateContext = Fake_glXCreateContext; 2221426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.CreateGLXPixmap = Fake_glXCreateGLXPixmap; 2222426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.DestroyContext = Fake_glXDestroyContext; 2223426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.DestroyGLXPixmap = Fake_glXDestroyGLXPixmap; 2224426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.GetConfig = Fake_glXGetConfig; 2225426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul /*glx.GetCurrentContext = Fake_glXGetCurrentContext;*/ 2226426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul /*glx.GetCurrentDrawable = Fake_glXGetCurrentDrawable;*/ 2227426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.IsDirect = Fake_glXIsDirect; 2228426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.MakeCurrent = Fake_glXMakeCurrent; 2229426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.QueryExtension = Fake_glXQueryExtension; 2230426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.QueryVersion = Fake_glXQueryVersion; 2231426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.SwapBuffers = Fake_glXSwapBuffers; 2232426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.UseXFont = Fake_glXUseXFont; 2233426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.WaitGL = Fake_glXWaitGL; 2234426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.WaitX = Fake_glXWaitX; 2235426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 22364c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_VERSION_1_1 2237426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.GetClientString = Fake_glXGetClientString; 2238426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.QueryExtensionsString = Fake_glXQueryExtensionsString; 2239426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.QueryServerString = Fake_glXQueryServerString; 2240426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul#endif 2241426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 22424c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_VERSION_1_2 2243426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul /*glx.GetCurrentDisplay = Fake_glXGetCurrentDisplay;*/ 2244426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul#endif 2245426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 22464c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_VERSION_1_3 2247426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.ChooseFBConfig = Fake_glXChooseFBConfig; 2248426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.CreateNewContext = Fake_glXCreateNewContext; 2249426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.CreatePbuffer = Fake_glXCreatePbuffer; 2250426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.CreatePixmap = Fake_glXCreatePixmap; 2251426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.CreateWindow = Fake_glXCreateWindow; 2252426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.DestroyPbuffer = Fake_glXDestroyPbuffer; 2253426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.DestroyPixmap = Fake_glXDestroyPixmap; 2254426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.DestroyWindow = Fake_glXDestroyWindow; 2255426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul /*glx.GetCurrentReadDrawable = Fake_glXGetCurrentReadDrawable;*/ 2256426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.GetFBConfigAttrib = Fake_glXGetFBConfigAttrib; 225771dea349d2be623b7819389428b0d6a124e8d184Brian Paul glx.GetFBConfigs = Fake_glXGetFBConfigs; 2258426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.GetSelectedEvent = Fake_glXGetSelectedEvent; 2259426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.GetVisualFromFBConfig = Fake_glXGetVisualFromFBConfig; 2260426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.MakeContextCurrent = Fake_glXMakeContextCurrent; 2261426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.QueryContext = Fake_glXQueryContext; 2262426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.QueryDrawable = Fake_glXQueryDrawable; 2263426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.SelectEvent = Fake_glXSelectEvent; 2264426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul#endif 2265426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 2266783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_SGI_swap_control 2267783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.SwapIntervalSGI = Fake_glXSwapIntervalSGI; 2268783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 2269783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 22704c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_SGI_video_sync 2271426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.GetVideoSyncSGI = Fake_glXGetVideoSyncSGI; 2272426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.WaitVideoSyncSGI = Fake_glXWaitVideoSyncSGI; 2273426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul#endif 2274426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 2275783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_SGI_make_current_read 2276783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.MakeCurrentReadSGI = Fake_glXMakeCurrentReadSGI; 2277783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.GetCurrentReadDrawableSGI = Fake_glXGetCurrentReadDrawableSGI; 2278783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 2279783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2280783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#if defined(_VL_H) && defined(GLX_SGIX_video_source) 2281783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.CreateGLXVideoSourceSGIX = Fake_glXCreateGLXVideoSourceSGIX; 2282783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.DestroyGLXVideoSourceSGIX = Fake_glXDestroyGLXVideoSourceSGIX; 2283783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 2284783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2285783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_EXT_import_context 2286783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.FreeContextEXT = Fake_glXFreeContextEXT; 2287783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.GetContextIDEXT = Fake_glXGetContextIDEXT; 2288783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.GetCurrentDisplayEXT = Fake_glXGetCurrentDisplayEXT; 2289783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.ImportContextEXT = Fake_glXImportContextEXT; 2290783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.QueryContextInfoEXT = Fake_glXQueryContextInfoEXT; 22914536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul#endif 22924536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul 22934536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul#ifdef GLX_SGIX_fbconfig 2294783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.GetFBConfigAttribSGIX = Fake_glXGetFBConfigAttribSGIX; 2295783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.ChooseFBConfigSGIX = Fake_glXChooseFBConfigSGIX; 2296783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.CreateGLXPixmapWithConfigSGIX = Fake_glXCreateGLXPixmapWithConfigSGIX; 2297783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.CreateContextWithConfigSGIX = Fake_glXCreateContextWithConfigSGIX; 2298783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.GetVisualFromFBConfigSGIX = Fake_glXGetVisualFromFBConfigSGIX; 2299783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.GetFBConfigFromVisualSGIX = Fake_glXGetFBConfigFromVisualSGIX; 2300783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 2301783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2302783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_SGIX_pbuffer 2303783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.CreateGLXPbufferSGIX = Fake_glXCreateGLXPbufferSGIX; 2304783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.DestroyGLXPbufferSGIX = Fake_glXDestroyGLXPbufferSGIX; 2305783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.QueryGLXPbufferSGIX = Fake_glXQueryGLXPbufferSGIX; 2306783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.SelectEventSGIX = Fake_glXSelectEventSGIX; 2307783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.GetSelectedEventSGIX = Fake_glXGetSelectedEventSGIX; 2308783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 2309783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2310783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_SGI_cushion 2311783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.CushionSGI = Fake_glXCushionSGI; 2312783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 2313783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2314783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_SGIX_video_resize 2315783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.BindChannelToWindowSGIX = Fake_glXBindChannelToWindowSGIX; 2316783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.ChannelRectSGIX = Fake_glXChannelRectSGIX; 2317783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.QueryChannelRectSGIX = Fake_glXQueryChannelRectSGIX; 2318783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.QueryChannelDeltasSGIX = Fake_glXQueryChannelDeltasSGIX; 2319783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.ChannelRectSyncSGIX = Fake_glXChannelRectSyncSGIX; 2320783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 2321783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2322783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#if defined(_DM_BUFFER_H_) && defined(GLX_SGIX_dmbuffer) 2323783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.AssociateDMPbufferSGIX = NULL; 2324783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 2325783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2326783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_SGIX_swap_group 2327783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.JoinSwapGroupSGIX = Fake_glXJoinSwapGroupSGIX; 2328783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 2329783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2330783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_SGIX_swap_barrier 2331783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.BindSwapBarrierSGIX = Fake_glXBindSwapBarrierSGIX; 2332783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.QueryMaxSwapBarriersSGIX = Fake_glXQueryMaxSwapBarriersSGIX; 2333783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#endif 2334783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul 2335783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul#ifdef GLX_SUN_get_transparent_index 2336783d7dfcbf40f727c85915b3e5ea5ff6682eaa48Brian Paul glx.GetTransparentIndexSUN = Fake_glXGetTransparentIndexSUN; 23374536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul#endif 23384536021a62e02fceaa6e8eb889b0f61743109cc4Brian Paul 23394c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_MESA_copy_sub_buffer 2340426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.CopySubBufferMESA = Fake_glXCopySubBufferMESA; 2341426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul#endif 2342426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 23434c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_MESA_release_buffers 2344426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.ReleaseBuffersMESA = Fake_glXReleaseBuffersMESA; 2345426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul#endif 2346426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 23474c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_MESA_pixmap_colormap 2348426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.CreateGLXPixmapMESA = Fake_glXCreateGLXPixmapMESA; 2349426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul#endif 2350426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 23514c07bd5709830bd11cb29d4d8b8a56e757dc0365Brian Paul#ifdef GLX_MESA_set_3dfx_mode 2352426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul glx.Set3DfxModeMESA = Fake_glXSet3DfxModeMESA; 2353426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul#endif 2354426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul 2355426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul return &glx; 2356426cb9f58f194a1e30e0908e8fc971bdcae06960Brian Paul} 2357