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