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_CONTEXT_H 30ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#define APPLE_GLX_CONTEXT_H 31ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 32a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston/* <rdar://problem/6953344> */ 33a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston#define glTexImage1D glTexImage1D_OSX 34a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston#define glTexImage2D glTexImage2D_OSX 35a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston#define glTexImage3D glTexImage3D_OSX 36a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston#include <OpenGL/CGLTypes.h> 37a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston#include <OpenGL/CGLContext.h> 38a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston#undef glTexImage1D 39a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston#undef glTexImage2D 40a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston#undef glTexImage3D 41a1cb3babbef2af222b839a058694acc82a7074f1Jeremy Huddleston 42ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#include <stdbool.h> 43ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#include <X11/Xlib.h> 44ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#include <GL/glx.h> 45ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#define XP_NO_X_HEADERS 46ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#include <Xplugin.h> 47ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#undef XP_NO_X_HEADERS 48ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 49ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#include "apple_glx_drawable.h" 50ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 51ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonstruct apple_glx_context 52ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston{ 53ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston CGLContextObj context_obj; 54ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston CGLPixelFormatObj pixel_format_obj; 55ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston struct apple_glx_drawable *drawable; 56ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston pthread_t thread_id; 57ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston int screen; 58ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston bool double_buffered; 59ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston bool uses_stereo; 60ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston bool need_update; 61ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston bool is_current; /* True if the context is current in some thread. */ 62ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston bool made_current; /* True if the context has ever been made current. */ 63ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 64ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston /* 65ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston * last_surface is set by the pending_destroy code handler for a drawable. 66ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston * Due to a CG difference, we have to recreate a surface if the window 67ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston * is unmapped and mapped again. 68ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston */ 69ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston Window last_surface_window; 70ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston struct apple_glx_context *previous, *next; 71ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston}; 72ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 73ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonbool apple_glx_create_context(void **ptr, Display * dpy, int screen, 74ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston const void *mode, void *sharedContext, 75ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston int *errorptr, bool * x11errorptr); 76ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonvoid apple_glx_destroy_context(void **ptr, Display * dpy); 77ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 78ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonbool apple_glx_make_current_context(Display * dpy, void *oldptr, void *ptr, 79ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston GLXDrawable drawable); 80ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonbool apple_glx_is_current_drawable(Display * dpy, void *ptr, 81ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston GLXDrawable drawable); 82ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 83ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonbool apple_glx_copy_context(void *currentptr, void *srcptr, void *destptr, 84ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston unsigned long mask, int *errorptr, 85ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston bool * x11errorptr); 86ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 87ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonint apple_glx_context_surface_changed(unsigned int uid, pthread_t caller); 88ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 89ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonvoid apple_glx_context_update(Display * dpy, void *ptr); 90ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 91ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddlestonbool apple_glx_context_uses_stereo(void *ptr); 92ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston 93ad503c41557606d15b0420c824369456f6d20a8fJeremy Huddleston#endif /*APPLE_GLX_CONTEXT_H */ 94