Subversion Repositories shark

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
55 pj 1
/* $Id: context.h,v 1.1 2003-02-28 11:41:59 pj Exp $ */
2
 
3
/*
4
 * Mesa 3-D graphics library
5
 * Version:  4.1
6
 *
7
 * Copyright (C) 1999-2001  Brian Paul   All Rights Reserved.
8
 *
9
 * Permission is hereby granted, free of charge, to any person obtaining a
10
 * copy of this software and associated documentation files (the "Software"),
11
 * to deal in the Software without restriction, including without limitation
12
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
13
 * and/or sell copies of the Software, and to permit persons to whom the
14
 * Software is furnished to do so, subject to the following conditions:
15
 *
16
 * The above copyright notice and this permission notice shall be included
17
 * in all copies or substantial portions of the Software.
18
 *
19
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
22
 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
23
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
24
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25
 */
26
 
27
 
28
#ifndef CONTEXT_H
29
#define CONTEXT_H
30
 
31
 
32
#include "glapi.h"
33
#include "mtypes.h"
34
 
35
 
36
/*
37
 * There are three Mesa datatypes which are meant to be used by device
38
 * drivers:
39
 *   GLcontext:  this contains the Mesa rendering state
40
 *   GLvisual:  this describes the color buffer (rgb vs. ci), whether
41
 *              or not there's a depth buffer, stencil buffer, etc.
42
 *   GLframebuffer:  contains pointers to the depth buffer, stencil
43
 *                   buffer, accum buffer and alpha buffers.
44
 *
45
 * These types should be encapsulated by corresponding device driver
46
 * datatypes.  See xmesa.h and xmesaP.h for an example.
47
 *
48
 * In OOP terms, GLcontext, GLvisual, and GLframebuffer are base classes
49
 * which the device driver must derive from.
50
 *
51
 * The following functions create and destroy these datatypes.
52
 */
53
 
54
 
55
/*
56
 * Create/destroy a GLvisual.
57
 */
58
extern GLvisual *
59
_mesa_create_visual( GLboolean rgbFlag,
60
                     GLboolean dbFlag,
61
                     GLboolean stereoFlag,
62
                     GLint redBits,
63
                     GLint greenBits,
64
                     GLint blueBits,
65
                     GLint alphaBits,
66
                     GLint indexBits,
67
                     GLint depthBits,
68
                     GLint stencilBits,
69
                     GLint accumRedBits,
70
                     GLint accumGreenBits,
71
                     GLint accumBlueBits,
72
                     GLint accumAlphaBits,
73
                     GLint numSamples );
74
 
75
extern GLboolean
76
_mesa_initialize_visual( GLvisual *v,
77
                         GLboolean rgbFlag,
78
                         GLboolean dbFlag,
79
                         GLboolean stereoFlag,
80
                         GLint redBits,
81
                         GLint greenBits,
82
                         GLint blueBits,
83
                         GLint alphaBits,
84
                         GLint indexBits,
85
                         GLint depthBits,
86
                         GLint stencilBits,
87
                         GLint accumRedBits,
88
                         GLint accumGreenBits,
89
                         GLint accumBlueBits,
90
                         GLint accumAlphaBits,
91
                         GLint numSamples );
92
 
93
extern void
94
_mesa_destroy_visual( GLvisual *vis );
95
 
96
 
97
 
98
/*
99
 * Create/destroy a GLframebuffer.
100
 */
101
extern GLframebuffer *
102
_mesa_create_framebuffer( const GLvisual *visual,
103
                          GLboolean softwareDepth,
104
                          GLboolean softwareStencil,
105
                          GLboolean softwareAccum,
106
                          GLboolean softwareAlpha );
107
 
108
extern void
109
_mesa_initialize_framebuffer( GLframebuffer *fb,
110
                              const GLvisual *visual,
111
                              GLboolean softwareDepth,
112
                              GLboolean softwareStencil,
113
                              GLboolean softwareAccum,
114
                              GLboolean softwareAlpha );
115
 
116
extern void
117
_mesa_free_framebuffer_data( GLframebuffer *buffer );
118
 
119
extern void
120
_mesa_destroy_framebuffer( GLframebuffer *buffer );
121
 
122
 
123
 
124
/*
125
 * Create/destroy a GLcontext.
126
 */
127
extern GLcontext *
128
_mesa_create_context( const GLvisual *visual,
129
                      GLcontext *share_list,
130
                      void *driver_ctx,
131
                      GLboolean direct );
132
 
133
extern GLboolean
134
_mesa_initialize_context( GLcontext *ctx,
135
                          const GLvisual *visual,
136
                          GLcontext *share_list,
137
                          void *driver_ctx,
138
                          GLboolean direct );
139
 
140
extern void
141
_mesa_free_context_data( GLcontext *ctx );
142
 
143
extern void
144
_mesa_destroy_context( GLcontext *ctx );
145
 
146
 
147
extern void
148
_mesa_copy_context(const GLcontext *src, GLcontext *dst, GLuint mask);
149
 
150
 
151
extern void
152
_mesa_make_current( GLcontext *ctx, GLframebuffer *buffer );
153
 
154
 
155
extern void
156
_mesa_make_current2( GLcontext *ctx, GLframebuffer *drawBuffer,
157
                     GLframebuffer *readBuffer );
158
 
159
 
160
extern GLcontext *
161
_mesa_get_current_context(void);
162
 
163
 
164
 
165
/*
166
 * Macros for fetching current context.
167
 */
168
#ifdef THREADS
169
 
170
#define GET_CURRENT_CONTEXT(C)  GLcontext *C = (GLcontext *) (_glapi_Context ? _glapi_Context : _glapi_get_context())
171
 
172
#else
173
 
174
#define GET_CURRENT_CONTEXT(C)  GLcontext *C = (GLcontext *) _glapi_Context
175
 
176
#endif
177
 
178
 
179
 
180
/* OpenGL SI-style export functions. */
181
 
182
extern GLboolean
183
_mesa_destroyContext(__GLcontext *gc);
184
 
185
extern GLboolean
186
_mesa_loseCurrent(__GLcontext *gc);
187
 
188
extern GLboolean
189
_mesa_makeCurrent(__GLcontext *gc);
190
 
191
extern GLboolean
192
_mesa_shareContext(__GLcontext *gc, __GLcontext *gcShare);
193
 
194
extern GLboolean
195
_mesa_copyContext(__GLcontext *dst, const __GLcontext *src, GLuint mask);
196
 
197
extern GLboolean
198
_mesa_forceCurrent(__GLcontext *gc);
199
 
200
extern GLboolean
201
_mesa_notifyResize(__GLcontext *gc);
202
 
203
extern void
204
_mesa_notifyDestroy(__GLcontext *gc);
205
 
206
extern void
207
_mesa_notifySwapBuffers(__GLcontext *gc);
208
 
209
extern struct __GLdispatchStateRec *
210
_mesa_dispatchExec(__GLcontext *gc);
211
 
212
extern void
213
_mesa_beginDispatchOverride(__GLcontext *gc);
214
 
215
extern void
216
_mesa_endDispatchOverride(__GLcontext *gc);
217
 
218
 
219
 
220
extern struct _glapi_table *
221
_mesa_get_dispatch(GLcontext *ctx);
222
 
223
 
224
 
225
/*
226
 * Miscellaneous
227
 */
228
 
229
extern void
230
_mesa_record_error( GLcontext *ctx, GLenum error );
231
 
232
 
233
extern void
234
_mesa_Finish( void );
235
 
236
extern void
237
_mesa_Flush( void );
238
 
239
 
240
#endif