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