apple_glx_drawable.h revision a1cb3babbef2af222b839a058694acc82a7074f1
1ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/*
2ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston Copyright (c) 2008, 2009 Apple Inc.
3ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
4ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston Permission is hereby granted, free of charge, to any person
5ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston obtaining a copy of this software and associated documentation files
6ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston (the "Software"), to deal in the Software without restriction,
7ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston including without limitation the rights to use, copy, modify, merge,
8ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston publish, distribute, sublicense, and/or sell copies of the Software,
9ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston and to permit persons to whom the Software is furnished to do so,
10ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston subject to the following conditions:
11ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
12ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston The above copyright notice and this permission notice shall be
13ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston included in all copies or substantial portions of the Software.
14ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
15ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston NONINFRINGEMENT.  IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT
19ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston DEALINGS IN THE SOFTWARE.
23ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
24ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston Except as contained in this notice, the name(s) of the above
25ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston copyright holders shall not be used in advertising or otherwise to
26ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston promote the sale, use or other dealings in this Software without
27ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston prior written authorization.
28ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston*/
29ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#ifndef APPLE_GLX_DRAWABLE_H
30ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#define APPLE_GLX_DRAWABLE_H
31ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
32a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston/* Must be first for:
33a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston * <rdar://problem/6953344>
34a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston */
35a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston#include "apple_glx_context.h"
36a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston
37ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#include <pthread.h>
38ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#include <stdbool.h>
39ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#include <limits.h>
40ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#include <GL/glx.h>
41ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#define XP_NO_X_HEADERS
42ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#include <Xplugin.h>
43ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#undef XP_NO_X_HEADERS
44ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
45ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonenum
46ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{
47ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   APPLE_GLX_DRAWABLE_SURFACE = 1,
48ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   APPLE_GLX_DRAWABLE_PBUFFER,
49ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   APPLE_GLX_DRAWABLE_PIXMAP
50ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston};
51ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
52ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/* The flag for the find routine. */
53ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonenum
54ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{
55ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   APPLE_GLX_DRAWABLE_LOCK = 2,
56ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   APPLE_GLX_DRAWABLE_REFERENCE = 4
57ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston};
58ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
59ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstruct apple_glx_context;
60ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstruct apple_glx_drawable;
61ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
62ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstruct apple_glx_surface
63ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{
64ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   xp_surface_id surface_id;
65ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   unsigned int uid;
66ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   bool pending_destroy;
67ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston};
68ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
69ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstruct apple_glx_pbuffer
70ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{
71ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   GLXPbuffer xid;              /* our pixmap */
72ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   int width, height;
73ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   GLint fbconfigID;
74ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   CGLPBufferObj buffer_obj;
75ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   unsigned long event_mask;
76ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston};
77ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
78ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstruct apple_glx_pixmap
79ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{
80ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   GLXPixmap xpixmap;
81ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   void *buffer;
82ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   int width, height, pitch, /*bytes per pixel */ bpp;
83ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   size_t size;
84ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   char path[PATH_MAX];
85ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   int fd;
86ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   CGLPixelFormatObj pixel_format_obj;
87ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   CGLContextObj context_obj;
88ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   GLint fbconfigID;
89ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston};
90ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
91ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstruct apple_glx_drawable_callbacks
92ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{
93ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   int type;
94ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     bool(*make_current) (struct apple_glx_context * ac,
95ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                          struct apple_glx_drawable * d);
96ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   void (*destroy) (Display * dpy, struct apple_glx_drawable * d);
97ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston};
98ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
99ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstruct apple_glx_drawable
100ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{
101ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   Display *display;
102ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   int reference_count;
103ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   GLXDrawable drawable;
104ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   int type;                    /* APPLE_GLX_DRAWABLE_* */
105ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
106ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   union
107ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   {
108ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      struct apple_glx_pixmap pixmap;
109ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      struct apple_glx_pbuffer pbuffer;
110ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston      struct apple_glx_surface surface;
111ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   } types;
112ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
113ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   struct apple_glx_drawable_callbacks callbacks;
114ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
115ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   /*
116ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston    * This mutex protects the reference count and any other drawable data.
117ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston    * It's used to prevent an early release of a drawable.
118ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston    */
119ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   pthread_mutex_t mutex;
120ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   void (*lock) (struct apple_glx_drawable * agd);
121ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   void (*unlock) (struct apple_glx_drawable * agd);
122ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
123ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   void (*reference) (struct apple_glx_drawable * agd);
124ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   void (*release) (struct apple_glx_drawable * agd);
125ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
126ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     bool(*destroy) (struct apple_glx_drawable * agd);
127ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
128ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     bool(*is_pbuffer) (struct apple_glx_drawable * agd);
129ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
130ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     bool(*is_pixmap) (struct apple_glx_drawable * agd);
131ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
132ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/*BEGIN These are used for the mixed mode drawing... */
133ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   int width, height;
134ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   int row_bytes;
135ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   char path[PATH_MAX];
136ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   int fd;                      /* The file descriptor for this drawable's shared memory. */
137ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   void *buffer;                /* The memory for the drawable.  Typically shared memory. */
138ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston   size_t buffer_length;
139ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston     /*END*/ struct apple_glx_drawable *previous, *next;
140ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston};
141ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
142ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstruct apple_glx_context;
143ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
144ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/* May return NULL if not found */
145ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstruct apple_glx_drawable *apple_glx_find_drawable(Display * dpy,
146ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                                                   GLXDrawable drawable);
147ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
148ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/* Returns true on error and locks the agd result with a reference. */
149ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonbool apple_glx_drawable_create(Display * dpy,
150ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                               int screen,
151ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                               GLXDrawable drawable,
152ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                               struct apple_glx_drawable **agd,
153ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                               struct apple_glx_drawable_callbacks
154ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                               *callbacks);
155ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
156ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/* Returns true on error */
157ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonbool apple_glx_create_drawable(Display * dpy,
158ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                               struct apple_glx_context *ac,
159ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                               GLXDrawable drawable,
160ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                               struct apple_glx_drawable **agd);
161ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
162ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonvoid apple_glx_garbage_collect_drawables(Display * dpy);
163ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
164ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/*
165ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston * This returns the total number of drawables.
166ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston * It's mostly intended for debugging and introspection.
167ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston */
168ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonunsigned int apple_glx_get_drawable_count(void);
169ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
170ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstruct apple_glx_drawable *apple_glx_drawable_find_by_type(GLXDrawable
171ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                                                           drawable, int type,
172ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                                                           int flags);
173ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
174ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstruct apple_glx_drawable *apple_glx_drawable_find(GLXDrawable drawable,
175ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                                                   int flags);
176ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
177ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
178ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonbool apple_glx_drawable_destroy_by_type(Display * dpy, GLXDrawable drawable,
179ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                                        int type);
180ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
181ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstruct apple_glx_drawable *apple_glx_drawable_find_by_uid(unsigned int uid,
182ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                                                          int flags);
183ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
184ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/* Surfaces */
185ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
186ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonbool apple_glx_surface_create(Display * dpy, int screen, GLXDrawable drawable,
187ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                              struct apple_glx_drawable **resultptr);
188ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
189ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonvoid apple_glx_surface_destroy(unsigned int uid);
190ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
191ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/* Pbuffers */
192ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
193ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/* Returns true if an error occurred. */
194ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonbool apple_glx_pbuffer_create(Display * dpy, GLXFBConfig config,
195ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                              int width, int height, int *errorcode,
196ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                              GLXPbuffer * pbuf);
197ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
198ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/* Returns true if the pbuffer was invalid. */
199ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonbool apple_glx_pbuffer_destroy(Display * dpy, GLXPbuffer pbuf);
200ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
201ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/* Returns true if the pbuffer was valid and the attribute. */
202ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonbool apple_glx_pbuffer_query(GLXDrawable d, int attribute,
203ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                             unsigned int *value);
204ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
205ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/* Returns true if the GLXDrawable is a valid GLXPbuffer, and the mask is set. */
206ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonbool apple_glx_pbuffer_set_event_mask(GLXDrawable d, unsigned long mask);
207ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
208ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/* Returns true if the GLXDrawable is a valid GLXPbuffer, and the *mask is set. */
209ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonbool apple_glx_pbuffer_get_event_mask(GLXDrawable d, unsigned long *mask);
210ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
211ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
212ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/* Pixmaps */
213ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
214ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/* mode is a __GLcontextModes * */
215ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/* Returns true if an error occurred. */
216ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonbool apple_glx_pixmap_create(Display * dpy, int screen, Pixmap pixmap,
217ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                             const void *mode);
218ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
219ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston/* Returns true if an error occurred. */
220ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonbool apple_glx_pixmap_destroy(Display * dpy, Pixmap pixmap);
221ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
222ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonbool apple_glx_pixmap_query(GLXPixmap pixmap, int attribute,
223ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston                            unsigned int *value);
224ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
225ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
226ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston
227ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#endif
228