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 2146ddf66e9230ee862ac341c4767cf6b3b2dd2552bKristian Høgsberg/* mode is a struct glx_config * */ 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