1848b8605Smrg/*
2848b8605Smrg * Mesa 3-D graphics library
3848b8605Smrg *
4848b8605Smrg * Copyright (C) 1999-2005  Brian Paul   All Rights Reserved.
5848b8605Smrg *
6848b8605Smrg * Permission is hereby granted, free of charge, to any person obtaining a
7848b8605Smrg * copy of this software and associated documentation files (the "Software"),
8848b8605Smrg * to deal in the Software without restriction, including without limitation
9848b8605Smrg * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10848b8605Smrg * and/or sell copies of the Software, and to permit persons to whom the
11848b8605Smrg * Software is furnished to do so, subject to the following conditions:
12848b8605Smrg *
13848b8605Smrg * The above copyright notice and this permission notice shall be included
14848b8605Smrg * in all copies or substantial portions of the Software.
15848b8605Smrg *
16848b8605Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17848b8605Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18848b8605Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19848b8605Smrg * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20848b8605Smrg * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21848b8605Smrg * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22848b8605Smrg * OTHER DEALINGS IN THE SOFTWARE.
23848b8605Smrg */
24848b8605Smrg
25848b8605Smrg
26848b8605Smrg/*
27848b8605Smrg * Mesa Off-Screen rendering interface.
28848b8605Smrg *
29848b8605Smrg * This is an operating system and window system independent interface to
30848b8605Smrg * Mesa which allows one to render images into a client-supplied buffer in
31848b8605Smrg * main memory.  Such images may manipulated or saved in whatever way the
32848b8605Smrg * client wants.
33848b8605Smrg *
34848b8605Smrg * These are the API functions:
35848b8605Smrg *   OSMesaCreateContext - create a new Off-Screen Mesa rendering context
36848b8605Smrg *   OSMesaMakeCurrent - bind an OSMesaContext to a client's image buffer
37848b8605Smrg *                       and make the specified context the current one.
38848b8605Smrg *   OSMesaDestroyContext - destroy an OSMesaContext
39848b8605Smrg *   OSMesaGetCurrentContext - return thread's current context ID
40848b8605Smrg *   OSMesaPixelStore - controls how pixels are stored in image buffer
41848b8605Smrg *   OSMesaGetIntegerv - return OSMesa state parameters
42848b8605Smrg *
43848b8605Smrg *
44b8e80941Smrg * The limits on the width and height of an image buffer can be retrieved
45b8e80941Smrg * via OSMesaGetIntegerv(OSMESA_MAX_WIDTH/OSMESA_MAX_HEIGHT).
46848b8605Smrg */
47848b8605Smrg
48848b8605Smrg
49848b8605Smrg#ifndef OSMESA_H
50848b8605Smrg#define OSMESA_H
51848b8605Smrg
52848b8605Smrg
53848b8605Smrg#ifdef __cplusplus
54848b8605Smrgextern "C" {
55848b8605Smrg#endif
56848b8605Smrg
57848b8605Smrg
58848b8605Smrg#include <GL/gl.h>
59848b8605Smrg
60848b8605Smrg
61b8e80941Smrg#define OSMESA_MAJOR_VERSION 11
62b8e80941Smrg#define OSMESA_MINOR_VERSION 2
63848b8605Smrg#define OSMESA_PATCH_VERSION 0
64848b8605Smrg
65848b8605Smrg
66848b8605Smrg
67848b8605Smrg/*
68848b8605Smrg * Values for the format parameter of OSMesaCreateContext()
69848b8605Smrg * New in version 2.0.
70848b8605Smrg */
71848b8605Smrg#define OSMESA_COLOR_INDEX	GL_COLOR_INDEX
72848b8605Smrg#define OSMESA_RGBA		GL_RGBA
73848b8605Smrg#define OSMESA_BGRA		0x1
74848b8605Smrg#define OSMESA_ARGB		0x2
75848b8605Smrg#define OSMESA_RGB		GL_RGB
76848b8605Smrg#define OSMESA_BGR		0x4
77848b8605Smrg#define OSMESA_RGB_565		0x5
78848b8605Smrg
79848b8605Smrg
80848b8605Smrg/*
81848b8605Smrg * OSMesaPixelStore() parameters:
82848b8605Smrg * New in version 2.0.
83848b8605Smrg */
84848b8605Smrg#define OSMESA_ROW_LENGTH	0x10
85848b8605Smrg#define OSMESA_Y_UP		0x11
86848b8605Smrg
87848b8605Smrg
88848b8605Smrg/*
89848b8605Smrg * Accepted by OSMesaGetIntegerv:
90848b8605Smrg */
91848b8605Smrg#define OSMESA_WIDTH		0x20
92848b8605Smrg#define OSMESA_HEIGHT		0x21
93848b8605Smrg#define OSMESA_FORMAT		0x22
94848b8605Smrg#define OSMESA_TYPE		0x23
95848b8605Smrg#define OSMESA_MAX_WIDTH	0x24  /* new in 4.0 */
96848b8605Smrg#define OSMESA_MAX_HEIGHT	0x25  /* new in 4.0 */
97848b8605Smrg
98b8e80941Smrg/*
99b8e80941Smrg * Accepted in OSMesaCreateContextAttrib's attribute list.
100b8e80941Smrg */
101b8e80941Smrg#define OSMESA_DEPTH_BITS            0x30
102b8e80941Smrg#define OSMESA_STENCIL_BITS          0x31
103b8e80941Smrg#define OSMESA_ACCUM_BITS            0x32
104b8e80941Smrg#define OSMESA_PROFILE               0x33
105b8e80941Smrg#define OSMESA_CORE_PROFILE          0x34
106b8e80941Smrg#define OSMESA_COMPAT_PROFILE        0x35
107b8e80941Smrg#define OSMESA_CONTEXT_MAJOR_VERSION 0x36
108b8e80941Smrg#define OSMESA_CONTEXT_MINOR_VERSION 0x37
109b8e80941Smrg
110848b8605Smrg
111848b8605Smrgtypedef struct osmesa_context *OSMesaContext;
112848b8605Smrg
113848b8605Smrg
114848b8605Smrg/*
115848b8605Smrg * Create an Off-Screen Mesa rendering context.  The only attribute needed is
116848b8605Smrg * an RGBA vs Color-Index mode flag.
117848b8605Smrg *
118848b8605Smrg * Input:  format - one of OSMESA_COLOR_INDEX, OSMESA_RGBA, OSMESA_BGRA,
119848b8605Smrg *                  OSMESA_ARGB, OSMESA_RGB, or OSMESA_BGR.
120848b8605Smrg *         sharelist - specifies another OSMesaContext with which to share
121848b8605Smrg *                     display lists.  NULL indicates no sharing.
122848b8605Smrg * Return:  an OSMesaContext or 0 if error
123848b8605Smrg */
124848b8605SmrgGLAPI OSMesaContext GLAPIENTRY
125848b8605SmrgOSMesaCreateContext( GLenum format, OSMesaContext sharelist );
126848b8605Smrg
127848b8605Smrg
128848b8605Smrg
129848b8605Smrg/*
130848b8605Smrg * Create an Off-Screen Mesa rendering context and specify desired
131848b8605Smrg * size of depth buffer, stencil buffer and accumulation buffer.
132848b8605Smrg * If you specify zero for depthBits, stencilBits, accumBits you
133848b8605Smrg * can save some memory.
134848b8605Smrg *
135848b8605Smrg * New in Mesa 3.5
136848b8605Smrg */
137848b8605SmrgGLAPI OSMesaContext GLAPIENTRY
138848b8605SmrgOSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits,
139848b8605Smrg                        GLint accumBits, OSMesaContext sharelist);
140848b8605Smrg
141848b8605Smrg
142b8e80941Smrg/*
143b8e80941Smrg * Create an Off-Screen Mesa rendering context with attribute list.
144b8e80941Smrg * The list is composed of (attribute, value) pairs and terminated with
145b8e80941Smrg * attribute==0.  Supported Attributes:
146b8e80941Smrg *
147b8e80941Smrg * Attributes                    Values
148b8e80941Smrg * --------------------------------------------------------------------------
149b8e80941Smrg * OSMESA_FORMAT                 OSMESA_RGBA*, OSMESA_BGRA, OSMESA_ARGB, etc.
150b8e80941Smrg * OSMESA_DEPTH_BITS             0*, 16, 24, 32
151b8e80941Smrg * OSMESA_STENCIL_BITS           0*, 8
152b8e80941Smrg * OSMESA_ACCUM_BITS             0*, 16
153b8e80941Smrg * OSMESA_PROFILE                OSMESA_COMPAT_PROFILE*, OSMESA_CORE_PROFILE
154b8e80941Smrg * OSMESA_CONTEXT_MAJOR_VERSION  1*, 2, 3
155b8e80941Smrg * OSMESA_CONTEXT_MINOR_VERSION  0+
156b8e80941Smrg *
157b8e80941Smrg * Note: * = default value
158b8e80941Smrg *
159b8e80941Smrg * We return a context version >= what's specified by OSMESA_CONTEXT_MAJOR/
160b8e80941Smrg * MINOR_VERSION for the given profile.  For example, if you request a GL 1.4
161b8e80941Smrg * compat profile, you might get a GL 3.0 compat profile.
162b8e80941Smrg * Otherwise, null is returned if the version/profile is not supported.
163b8e80941Smrg *
164b8e80941Smrg * New in Mesa 11.2
165b8e80941Smrg */
166b8e80941SmrgGLAPI OSMesaContext GLAPIENTRY
167b8e80941SmrgOSMesaCreateContextAttribs( const int *attribList, OSMesaContext sharelist );
168b8e80941Smrg
169b8e80941Smrg
170b8e80941Smrg
171848b8605Smrg/*
172848b8605Smrg * Destroy an Off-Screen Mesa rendering context.
173848b8605Smrg *
174848b8605Smrg * Input:  ctx - the context to destroy
175848b8605Smrg */
176848b8605SmrgGLAPI void GLAPIENTRY
177848b8605SmrgOSMesaDestroyContext( OSMesaContext ctx );
178848b8605Smrg
179848b8605Smrg
180848b8605Smrg
181848b8605Smrg/*
182848b8605Smrg * Bind an OSMesaContext to an image buffer.  The image buffer is just a
183848b8605Smrg * block of memory which the client provides.  Its size must be at least
184848b8605Smrg * as large as width*height*sizeof(type).  Its address should be a multiple
185848b8605Smrg * of 4 if using RGBA mode.
186848b8605Smrg *
187848b8605Smrg * Image data is stored in the order of glDrawPixels:  row-major order
188848b8605Smrg * with the lower-left image pixel stored in the first array position
189848b8605Smrg * (ie. bottom-to-top).
190848b8605Smrg *
191848b8605Smrg * Since the only type initially supported is GL_UNSIGNED_BYTE, if the
192848b8605Smrg * context is in RGBA mode, each pixel will be stored as a 4-byte RGBA
193848b8605Smrg * value.  If the context is in color indexed mode, each pixel will be
194848b8605Smrg * stored as a 1-byte value.
195848b8605Smrg *
196848b8605Smrg * If the context's viewport hasn't been initialized yet, it will now be
197848b8605Smrg * initialized to (0,0,width,height).
198848b8605Smrg *
199848b8605Smrg * Input:  ctx - the rendering context
200848b8605Smrg *         buffer - the image buffer memory
201848b8605Smrg *         type - data type for pixel components, only GL_UNSIGNED_BYTE
202848b8605Smrg *                supported now
203848b8605Smrg *         width, height - size of image buffer in pixels, at least 1
204848b8605Smrg * Return:  GL_TRUE if success, GL_FALSE if error because of invalid ctx,
205848b8605Smrg *          invalid buffer address, type!=GL_UNSIGNED_BYTE, width<1, height<1,
206848b8605Smrg *          width>internal limit or height>internal limit.
207848b8605Smrg */
208848b8605SmrgGLAPI GLboolean GLAPIENTRY
209848b8605SmrgOSMesaMakeCurrent( OSMesaContext ctx, void *buffer, GLenum type,
210848b8605Smrg                   GLsizei width, GLsizei height );
211848b8605Smrg
212848b8605Smrg
213848b8605Smrg
214848b8605Smrg
215848b8605Smrg/*
216848b8605Smrg * Return the current Off-Screen Mesa rendering context handle.
217848b8605Smrg */
218848b8605SmrgGLAPI OSMesaContext GLAPIENTRY
219848b8605SmrgOSMesaGetCurrentContext( void );
220848b8605Smrg
221848b8605Smrg
222848b8605Smrg
223848b8605Smrg/*
224848b8605Smrg * Set pixel store/packing parameters for the current context.
225848b8605Smrg * This is similar to glPixelStore.
226848b8605Smrg * Input:  pname - OSMESA_ROW_LENGTH
227848b8605Smrg *                    specify actual pixels per row in image buffer
228848b8605Smrg *                    0 = same as image width (default)
229848b8605Smrg *                 OSMESA_Y_UP
230848b8605Smrg *                    zero = Y coordinates increase downward
231848b8605Smrg *                    non-zero = Y coordinates increase upward (default)
232848b8605Smrg *         value - the value for the parameter pname
233848b8605Smrg *
234848b8605Smrg * New in version 2.0.
235848b8605Smrg */
236848b8605SmrgGLAPI void GLAPIENTRY
237848b8605SmrgOSMesaPixelStore( GLint pname, GLint value );
238848b8605Smrg
239848b8605Smrg
240848b8605Smrg
241848b8605Smrg/*
242848b8605Smrg * Return an integer value like glGetIntegerv.
243848b8605Smrg * Input:  pname -
244848b8605Smrg *                 OSMESA_WIDTH  return current image width
245848b8605Smrg *                 OSMESA_HEIGHT  return current image height
246848b8605Smrg *                 OSMESA_FORMAT  return image format
247848b8605Smrg *                 OSMESA_TYPE  return color component data type
248848b8605Smrg *                 OSMESA_ROW_LENGTH return row length in pixels
249848b8605Smrg *                 OSMESA_Y_UP returns 1 or 0 to indicate Y axis direction
250848b8605Smrg *         value - pointer to integer in which to return result.
251848b8605Smrg */
252848b8605SmrgGLAPI void GLAPIENTRY
253848b8605SmrgOSMesaGetIntegerv( GLint pname, GLint *value );
254848b8605Smrg
255848b8605Smrg
256848b8605Smrg
257848b8605Smrg/*
258848b8605Smrg * Return the depth buffer associated with an OSMesa context.
259848b8605Smrg * Input:  c - the OSMesa context
260848b8605Smrg * Output:  width, height - size of buffer in pixels
261848b8605Smrg *          bytesPerValue - bytes per depth value (2 or 4)
262848b8605Smrg *          buffer - pointer to depth buffer values
263848b8605Smrg * Return:  GL_TRUE or GL_FALSE to indicate success or failure.
264848b8605Smrg *
265848b8605Smrg * New in Mesa 2.4.
266848b8605Smrg */
267848b8605SmrgGLAPI GLboolean GLAPIENTRY
268848b8605SmrgOSMesaGetDepthBuffer( OSMesaContext c, GLint *width, GLint *height,
269848b8605Smrg                      GLint *bytesPerValue, void **buffer );
270848b8605Smrg
271848b8605Smrg
272848b8605Smrg
273848b8605Smrg/*
274848b8605Smrg * Return the color buffer associated with an OSMesa context.
275848b8605Smrg * Input:  c - the OSMesa context
276848b8605Smrg * Output:  width, height - size of buffer in pixels
277848b8605Smrg *          format - buffer format (OSMESA_FORMAT)
278848b8605Smrg *          buffer - pointer to depth buffer values
279848b8605Smrg * Return:  GL_TRUE or GL_FALSE to indicate success or failure.
280848b8605Smrg *
281848b8605Smrg * New in Mesa 3.3.
282848b8605Smrg */
283848b8605SmrgGLAPI GLboolean GLAPIENTRY
284848b8605SmrgOSMesaGetColorBuffer( OSMesaContext c, GLint *width, GLint *height,
285848b8605Smrg                      GLint *format, void **buffer );
286848b8605Smrg
287848b8605Smrg
288848b8605Smrg
289848b8605Smrg/**
290848b8605Smrg * This typedef is new in Mesa 6.3.
291848b8605Smrg */
292848b8605Smrgtypedef void (*OSMESAproc)();
293848b8605Smrg
294848b8605Smrg
295848b8605Smrg/*
296848b8605Smrg * Return pointer to the named function.
297848b8605Smrg * New in Mesa 4.1
298848b8605Smrg * Return OSMESAproc in 6.3.
299848b8605Smrg */
300848b8605SmrgGLAPI OSMESAproc GLAPIENTRY
301848b8605SmrgOSMesaGetProcAddress( const char *funcName );
302848b8605Smrg
303848b8605Smrg
304848b8605Smrg
305848b8605Smrg/**
306848b8605Smrg * Enable/disable color clamping, off by default.
307848b8605Smrg * New in Mesa 6.4.2
308848b8605Smrg */
309848b8605SmrgGLAPI void GLAPIENTRY
310848b8605SmrgOSMesaColorClamp(GLboolean enable);
311848b8605Smrg
312848b8605Smrg
313848b8605Smrg/**
314848b8605Smrg * Enable/disable Gallium post-process filters.
315848b8605Smrg * This should be called after a context is created, but before it is
316848b8605Smrg * made current for the first time.  After a context has been made
317848b8605Smrg * current, this function has no effect.
318848b8605Smrg * If the enable_value param is zero, the filter is disabled.  Otherwise
319848b8605Smrg * the filter is enabled, and the value may control the filter's quality.
320848b8605Smrg * New in Mesa 10.0
321848b8605Smrg */
322848b8605SmrgGLAPI void GLAPIENTRY
323848b8605SmrgOSMesaPostprocess(OSMesaContext osmesa, const char *filter,
324848b8605Smrg                  unsigned enable_value);
325848b8605Smrg
326848b8605Smrg
327848b8605Smrg#ifdef __cplusplus
328848b8605Smrg}
329848b8605Smrg#endif
330848b8605Smrg
331848b8605Smrg
332848b8605Smrg#endif
333