2 * Copyright © 2011 Intel Corporation
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 * DEALINGS IN THE SOFTWARE.
23 #include "glxclient.h"
25 class fake_glx_screen
: public glx_screen
{
27 fake_glx_screen(struct glx_display
*glx_dpy
, int num
, const char *ext
)
29 this->vtable
= &fake_glx_screen::vt
;
30 this->serverGLXexts
= 0;
31 this->effectiveGLXexts
= 0;
38 this->display
= glx_dpy
;
39 this->dpy
= (glx_dpy
!= NULL
) ? glx_dpy
->dpy
: NULL
;
41 this->serverGLXexts
= new char[strlen(ext
) + 1];
42 strcpy((char *) this->serverGLXexts
, ext
);
47 delete [] this->serverGLXexts
;
51 static struct glx_screen_vtable vt
;
54 class fake_glx_screen_direct
: public fake_glx_screen
{
56 fake_glx_screen_direct(struct glx_display
*glx_dpy
, int num
,
58 : fake_glx_screen(glx_dpy
, num
, ext
)
60 this->vtable
= &fake_glx_screen_direct::vt
;
64 static struct glx_screen_vtable vt
;
67 class fake_glx_context
: public glx_context
{
69 fake_glx_context(struct glx_screen
*psc
, struct glx_config
*mode
)
73 this->vtable
= &fake_glx_context::vt
;
74 this->majorOpcode
= 123;
75 this->screen
= psc
->scr
;
78 this->isDirect
= false;
79 this->currentContextTag
= -1;
81 this->client_state_private
= (struct __GLXattributeRec
*) 0xcafebabe;
89 /** Number of context that are allocated (and not freed). */
90 static int contexts_allocated
;
93 static const struct glx_context_vtable vt
;
95 static void destroy(struct glx_context
*gc
)
101 class fake_glx_context_direct
: public fake_glx_context
{
103 fake_glx_context_direct(struct glx_screen
*psc
, struct glx_config
*mode
)
104 : fake_glx_context(psc
, mode
)
106 this->isDirect
= True
;
109 static glx_context
*create(struct glx_screen
*psc
, struct glx_config
*mode
,
110 struct glx_context
*shareList
, int renderType
)
115 return new fake_glx_context_direct(psc
, mode
);
118 static glx_context
*create_attribs(struct glx_screen
*psc
,
119 struct glx_config
*mode
,
120 struct glx_context
*shareList
,
121 unsigned num_attribs
,
122 const uint32_t *attribs
,
130 return new fake_glx_context_direct(psc
, mode
);