2 * Copyright © 2010 Intel Corporation
3 * Copyright © 2011 Apple Inc.
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Soft-
7 * ware"), to deal in the Software without restriction, including without
8 * limitation the rights to use, copy, modify, merge, publish, distribute,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, provided that the above copyright
11 * notice(s) and this permission notice appear in all copies of the Soft-
12 * ware and that both the above copyright notice(s) and this permission
13 * notice appear in supporting documentation.
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
17 * ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY
18 * RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN
19 * THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE-
20 * QUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
21 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
22 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFOR-
23 * MANCE OF THIS SOFTWARE.
25 * Except as contained in this notice, the name of a copyright holder shall
26 * not be used in advertising or otherwise to promote the sale, use or
27 * other dealings in this Software without prior written authorization of
28 * the copyright holder.
31 * Kristian Høgsberg (krh@bitplanet.net)
34 #if defined(GLX_USE_APPLEGL)
38 #include "glxclient.h"
39 #include "apple_glx_context.h"
40 #include "apple_glx.h"
41 #include "glx_error.h"
44 applegl_destroy_context(struct glx_context
*gc
)
46 apple_glx_destroy_context(&gc
->driContext
, gc
->psc
->dpy
);
50 applegl_bind_context(struct glx_context
*gc
, struct glx_context
*old
,
51 GLXDrawable draw
, GLXDrawable read
)
53 Display
*dpy
= gc
->psc
->dpy
;
54 bool error
= apple_glx_make_current_context(dpy
,
55 (old
&& old
!= &dummyContext
) ? old
->driContext
: NULL
,
56 gc
? gc
->driContext
: NULL
, draw
);
58 apple_glx_diagnostic("%s: error %s\n", __func__
, error
? "YES" : "NO");
60 return 1; /* GLXBadContext is the same as Success (0) */
62 apple_glapi_set_dispatch();
68 applegl_unbind_context(struct glx_context
*gc
, struct glx_context
*new)
73 applegl_wait_gl(struct glx_context
*gc
)
79 applegl_wait_x(struct glx_context
*gc
)
81 Display
*dpy
= gc
->psc
->dpy
;
82 apple_glx_waitx(dpy
, gc
->driContext
);
85 static const struct glx_context_vtable applegl_context_vtable
= {
86 applegl_destroy_context
,
88 applegl_unbind_context
,
92 NULL
, /* bind_tex_image, */
93 NULL
, /* release_tex_image, */
97 applegl_create_context(struct glx_screen
*psc
,
98 struct glx_config
*config
,
99 struct glx_context
*shareList
, int renderType
)
101 struct glx_context
*gc
;
104 Display
*dpy
= psc
->dpy
;
105 int screen
= psc
->scr
;
107 /* TODO: Integrate this with apple_glx_create_context and make
108 * struct apple_glx_context inherit from struct glx_context. */
110 gc
= Xcalloc(1, sizeof (*gc
));
114 if (!glx_context_init(gc
, psc
, config
)) {
119 gc
->vtable
= &applegl_context_vtable
;
120 gc
->driContext
= NULL
;
122 /* TODO: darwin: Integrate with above to do indirect */
123 if(apple_glx_create_context(&gc
->driContext
, dpy
, screen
, config
,
124 shareList
? shareList
->driContext
: NULL
,
125 &errorcode
, &x11error
)) {
126 __glXSendError(dpy
, errorcode
, 0, X_GLXCreateContext
, x11error
);
127 gc
->vtable
->destroy(gc
);
131 gc
->currentContextTag
= -1;
133 gc
->isDirect
= GL_TRUE
;
134 gc
->xid
= 1; /* Just something not None, so we know when to destroy
135 * it in MakeContextCurrent. */
140 struct glx_screen_vtable applegl_screen_vtable
= {
141 applegl_create_context
144 _X_HIDDEN
struct glx_screen
*
145 applegl_create_screen(int screen
, struct glx_display
* priv
)
147 struct glx_screen
*psc
;
149 psc
= Xmalloc(sizeof *psc
);
153 memset(psc
, 0, sizeof *psc
);
154 glx_screen_init(psc
, screen
, priv
);
155 psc
->vtable
= &applegl_screen_vtable
;
161 applegl_create_display(struct glx_display
*glx_dpy
)
163 if(!apple_init_glx(glx_dpy
->dpy
))
166 return GLXBadContext
;