1/*
2 * Mesa 3-D graphics library
3 * Version:  6.5
4 *
5 * Copyright (C) 1999-2005  Brian Paul   All Rights Reserved.
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 */
24
25
26/*
27 * Mesa Off-Screen rendering interface.
28 *
29 * This is an operating system and window system independent interface to
30 * Mesa which allows one to render images into a client-supplied buffer in
31 * main memory.  Such images may manipulated or saved in whatever way the
32 * client wants.
33 *
34 * These are the API functions:
35 *   OSMesaCreateContext - create a new Off-Screen Mesa rendering context
36 *   OSMesaMakeCurrent - bind an OSMesaContext to a client's image buffer
37 *                       and make the specified context the current one.
38 *   OSMesaDestroyContext - destroy an OSMesaContext
39 *   OSMesaGetCurrentContext - return thread's current context ID
40 *   OSMesaPixelStore - controls how pixels are stored in image buffer
41 *   OSMesaGetIntegerv - return OSMesa state parameters
42 *
43 *
44 * The limits on the width and height of an image buffer are MAX_WIDTH and
45 * MAX_HEIGHT as defined in Mesa/src/config.h.  Defaults are 1280 and 1024.
46 * You can increase them as needed but beware that many temporary arrays in
47 * Mesa are dimensioned by MAX_WIDTH or MAX_HEIGHT.
48 */
49
50
51#ifndef OSMESA_H
52#define OSMESA_H
53
54
55#ifdef __cplusplus
56extern "C" {
57#endif
58
59
60#include <GL/gl.h>
61
62
63#define OSMESA_MAJOR_VERSION 6
64#define OSMESA_MINOR_VERSION 5
65#define OSMESA_PATCH_VERSION 0
66
67
68
69/*
70 * Values for the format parameter of OSMesaCreateContext()
71 * New in version 2.0.
72 */
73#define OSMESA_COLOR_INDEX	GL_COLOR_INDEX
74#define OSMESA_RGBA		GL_RGBA
75#define OSMESA_BGRA		0x1
76#define OSMESA_ARGB		0x2
77#define OSMESA_RGB		GL_RGB
78#define OSMESA_BGR		0x4
79#define OSMESA_RGB_565		0x5
80
81
82/*
83 * OSMesaPixelStore() parameters:
84 * New in version 2.0.
85 */
86#define OSMESA_ROW_LENGTH	0x10
87#define OSMESA_Y_UP		0x11
88
89
90/*
91 * Accepted by OSMesaGetIntegerv:
92 */
93#define OSMESA_WIDTH		0x20
94#define OSMESA_HEIGHT		0x21
95#define OSMESA_FORMAT		0x22
96#define OSMESA_TYPE		0x23
97#define OSMESA_MAX_WIDTH	0x24  /* new in 4.0 */
98#define OSMESA_MAX_HEIGHT	0x25  /* new in 4.0 */
99
100
101typedef struct osmesa_context *OSMesaContext;
102
103
104/* See https://bugs.freedesktop.org/show_bug.cgi?id=77749 */
105#if 0 /* defined(__QUICKDRAW__) */
106#pragma export on
107#endif
108
109
110/*
111 * Create an Off-Screen Mesa rendering context.  The only attribute needed is
112 * an RGBA vs Color-Index mode flag.
113 *
114 * Input:  format - one of OSMESA_COLOR_INDEX, OSMESA_RGBA, OSMESA_BGRA,
115 *                  OSMESA_ARGB, OSMESA_RGB, or OSMESA_BGR.
116 *         sharelist - specifies another OSMesaContext with which to share
117 *                     display lists.  NULL indicates no sharing.
118 * Return:  an OSMesaContext or 0 if error
119 */
120GLAPI OSMesaContext GLAPIENTRY
121OSMesaCreateContext( GLenum format, OSMesaContext sharelist );
122
123
124
125/*
126 * Create an Off-Screen Mesa rendering context and specify desired
127 * size of depth buffer, stencil buffer and accumulation buffer.
128 * If you specify zero for depthBits, stencilBits, accumBits you
129 * can save some memory.
130 *
131 * New in Mesa 3.5
132 */
133GLAPI OSMesaContext GLAPIENTRY
134OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits,
135                        GLint accumBits, OSMesaContext sharelist);
136
137
138/*
139 * Destroy an Off-Screen Mesa rendering context.
140 *
141 * Input:  ctx - the context to destroy
142 */
143GLAPI void GLAPIENTRY
144OSMesaDestroyContext( OSMesaContext ctx );
145
146
147
148/*
149 * Bind an OSMesaContext to an image buffer.  The image buffer is just a
150 * block of memory which the client provides.  Its size must be at least
151 * as large as width*height*sizeof(type).  Its address should be a multiple
152 * of 4 if using RGBA mode.
153 *
154 * Image data is stored in the order of glDrawPixels:  row-major order
155 * with the lower-left image pixel stored in the first array position
156 * (ie. bottom-to-top).
157 *
158 * Since the only type initially supported is GL_UNSIGNED_BYTE, if the
159 * context is in RGBA mode, each pixel will be stored as a 4-byte RGBA
160 * value.  If the context is in color indexed mode, each pixel will be
161 * stored as a 1-byte value.
162 *
163 * If the context's viewport hasn't been initialized yet, it will now be
164 * initialized to (0,0,width,height).
165 *
166 * Input:  ctx - the rendering context
167 *         buffer - the image buffer memory
168 *         type - data type for pixel components, only GL_UNSIGNED_BYTE
169 *                supported now
170 *         width, height - size of image buffer in pixels, at least 1
171 * Return:  GL_TRUE if success, GL_FALSE if error because of invalid ctx,
172 *          invalid buffer address, type!=GL_UNSIGNED_BYTE, width<1, height<1,
173 *          width>internal limit or height>internal limit.
174 */
175GLAPI GLboolean GLAPIENTRY
176OSMesaMakeCurrent( OSMesaContext ctx, void *buffer, GLenum type,
177                   GLsizei width, GLsizei height );
178
179
180
181
182/*
183 * Return the current Off-Screen Mesa rendering context handle.
184 */
185GLAPI OSMesaContext GLAPIENTRY
186OSMesaGetCurrentContext( void );
187
188
189
190/*
191 * Set pixel store/packing parameters for the current context.
192 * This is similar to glPixelStore.
193 * Input:  pname - OSMESA_ROW_LENGTH
194 *                    specify actual pixels per row in image buffer
195 *                    0 = same as image width (default)
196 *                 OSMESA_Y_UP
197 *                    zero = Y coordinates increase downward
198 *                    non-zero = Y coordinates increase upward (default)
199 *         value - the value for the parameter pname
200 *
201 * New in version 2.0.
202 */
203GLAPI void GLAPIENTRY
204OSMesaPixelStore( GLint pname, GLint value );
205
206
207
208/*
209 * Return an integer value like glGetIntegerv.
210 * Input:  pname -
211 *                 OSMESA_WIDTH  return current image width
212 *                 OSMESA_HEIGHT  return current image height
213 *                 OSMESA_FORMAT  return image format
214 *                 OSMESA_TYPE  return color component data type
215 *                 OSMESA_ROW_LENGTH return row length in pixels
216 *                 OSMESA_Y_UP returns 1 or 0 to indicate Y axis direction
217 *         value - pointer to integer in which to return result.
218 */
219GLAPI void GLAPIENTRY
220OSMesaGetIntegerv( GLint pname, GLint *value );
221
222
223
224/*
225 * Return the depth buffer associated with an OSMesa context.
226 * Input:  c - the OSMesa context
227 * Output:  width, height - size of buffer in pixels
228 *          bytesPerValue - bytes per depth value (2 or 4)
229 *          buffer - pointer to depth buffer values
230 * Return:  GL_TRUE or GL_FALSE to indicate success or failure.
231 *
232 * New in Mesa 2.4.
233 */
234GLAPI GLboolean GLAPIENTRY
235OSMesaGetDepthBuffer( OSMesaContext c, GLint *width, GLint *height,
236                      GLint *bytesPerValue, void **buffer );
237
238
239
240/*
241 * Return the color buffer associated with an OSMesa context.
242 * Input:  c - the OSMesa context
243 * Output:  width, height - size of buffer in pixels
244 *          format - buffer format (OSMESA_FORMAT)
245 *          buffer - pointer to depth buffer values
246 * Return:  GL_TRUE or GL_FALSE to indicate success or failure.
247 *
248 * New in Mesa 3.3.
249 */
250GLAPI GLboolean GLAPIENTRY
251OSMesaGetColorBuffer( OSMesaContext c, GLint *width, GLint *height,
252                      GLint *format, void **buffer );
253
254
255
256/**
257 * This typedef is new in Mesa 6.3.
258 */
259typedef void (*OSMESAproc)();
260
261
262/*
263 * Return pointer to the named function.
264 * New in Mesa 4.1
265 * Return OSMESAproc in 6.3.
266 */
267GLAPI OSMESAproc GLAPIENTRY
268OSMesaGetProcAddress( const char *funcName );
269
270
271
272/**
273 * Enable/disable color clamping, off by default.
274 * New in Mesa 6.4.2
275 */
276GLAPI void GLAPIENTRY
277OSMesaColorClamp(GLboolean enable);
278
279#ifdef __cplusplus
280}
281#endif
282
283
284#endif
285