/* * Mesa 3-D graphics library * * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ /* * Mesa Off-Screen rendering interface. * * This is an operating system and window system independent interface to * Mesa which allows one to render images into a client-supplied buffer in * main memory. Such images may manipulated or saved in whatever way the * client wants. * * These are the API functions: * OSMesaCreateContext - create a new Off-Screen Mesa rendering context * OSMesaMakeCurrent - bind an OSMesaContext to a client's image buffer * and make the specified context the current one. * OSMesaDestroyContext - destroy an OSMesaContext * OSMesaGetCurrentContext - return thread's current context ID * OSMesaPixelStore - controls how pixels are stored in image buffer * OSMesaGetIntegerv - return OSMesa state parameters * * * The limits on the width and height of an image buffer can be retrieved * via OSMesaGetIntegerv(OSMESA_MAX_WIDTH/OSMESA_MAX_HEIGHT). */ #ifndef OSMESA_H #define OSMESA_H #ifdef __cplusplus extern "C" { #endif #include <GL/gl.h> #define OSMESA_MAJOR_VERSION 11 #define OSMESA_MINOR_VERSION 2 #define OSMESA_PATCH_VERSION 0 /* * Values for the format parameter of OSMesaCreateContext() * New in version 2.0. */ #define OSMESA_COLOR_INDEX GL_COLOR_INDEX #define OSMESA_RGBA GL_RGBA #define OSMESA_BGRA 0x1 #define OSMESA_ARGB 0x2 #define OSMESA_RGB GL_RGB #define OSMESA_BGR 0x4 #define OSMESA_RGB_565 0x5 /* * OSMesaPixelStore() parameters: * New in version 2.0. */ #define OSMESA_ROW_LENGTH 0x10 #define OSMESA_Y_UP 0x11 /* * Accepted by OSMesaGetIntegerv: */ #define OSMESA_WIDTH 0x20 #define OSMESA_HEIGHT 0x21 #define OSMESA_FORMAT 0x22 #define OSMESA_TYPE 0x23 #define OSMESA_MAX_WIDTH 0x24 /* new in 4.0 */ #define OSMESA_MAX_HEIGHT 0x25 /* new in 4.0 */ /* * Accepted in OSMesaCreateContextAttrib's attribute list. */ #define OSMESA_DEPTH_BITS 0x30 #define OSMESA_STENCIL_BITS 0x31 #define OSMESA_ACCUM_BITS 0x32 #define OSMESA_PROFILE 0x33 #define OSMESA_CORE_PROFILE 0x34 #define OSMESA_COMPAT_PROFILE 0x35 #define OSMESA_CONTEXT_MAJOR_VERSION 0x36 #define OSMESA_CONTEXT_MINOR_VERSION 0x37 typedef struct osmesa_context *OSMesaContext; /* * Create an Off-Screen Mesa rendering context. The only attribute needed is * an RGBA vs Color-Index mode flag. * * Input: format - one of OSMESA_COLOR_INDEX, OSMESA_RGBA, OSMESA_BGRA, * OSMESA_ARGB, OSMESA_RGB, or OSMESA_BGR. * sharelist - specifies another OSMesaContext with which to share * display lists. NULL indicates no sharing. * Return: an OSMesaContext or 0 if error */ GLAPI OSMesaContext GLAPIENTRY OSMesaCreateContext( GLenum format, OSMesaContext sharelist ); /* * Create an Off-Screen Mesa rendering context and specify desired * size of depth buffer, stencil buffer and accumulation buffer. * If you specify zero for depthBits, stencilBits, accumBits you * can save some memory. * * New in Mesa 3.5 */ GLAPI OSMesaContext GLAPIENTRY OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits, GLint accumBits, OSMesaContext sharelist); /* * Create an Off-Screen Mesa rendering context with attribute list. * The list is composed of (attribute, value) pairs and terminated with * attribute==0. Supported Attributes: * * Attributes Values * -------------------------------------------------------------------------- * OSMESA_FORMAT OSMESA_RGBA*, OSMESA_BGRA, OSMESA_ARGB, etc. * OSMESA_DEPTH_BITS 0*, 16, 24, 32 * OSMESA_STENCIL_BITS 0*, 8 * OSMESA_ACCUM_BITS 0*, 16 * OSMESA_PROFILE OSMESA_COMPAT_PROFILE*, OSMESA_CORE_PROFILE * OSMESA_CONTEXT_MAJOR_VERSION 1*, 2, 3 * OSMESA_CONTEXT_MINOR_VERSION 0+ * * Note: * = default value * * We return a context version >= what's specified by OSMESA_CONTEXT_MAJOR/ * MINOR_VERSION for the given profile. For example, if you request a GL 1.4 * compat profile, you might get a GL 3.0 compat profile. * Otherwise, null is returned if the version/profile is not supported. * * New in Mesa 11.2 */ GLAPI OSMesaContext GLAPIENTRY OSMesaCreateContextAttribs( const int *attribList, OSMesaContext sharelist ); /* * Destroy an Off-Screen Mesa rendering context. * * Input: ctx - the context to destroy */ GLAPI void GLAPIENTRY OSMesaDestroyContext( OSMesaContext ctx ); /* * Bind an OSMesaContext to an image buffer. The image buffer is just a * block of memory which the client provides. Its size must be at least * as large as width*height*sizeof(type). Its address should be a multiple * of 4 if using RGBA mode. * * Image data is stored in the order of glDrawPixels: row-major order * with the lower-left image pixel stored in the first array position * (ie. bottom-to-top). * * Since the only type initially supported is GL_UNSIGNED_BYTE, if the * context is in RGBA mode, each pixel will be stored as a 4-byte RGBA * value. If the context is in color indexed mode, each pixel will be * stored as a 1-byte value. * * If the context's viewport hasn't been initialized yet, it will now be * initialized to (0,0,width,height). * * Input: ctx - the rendering context * buffer - the image buffer memory * type - data type for pixel components, only GL_UNSIGNED_BYTE * supported now * width, height - size of image buffer in pixels, at least 1 * Return: GL_TRUE if success, GL_FALSE if error because of invalid ctx, * invalid buffer address, type!=GL_UNSIGNED_BYTE, width<1, height<1, * width>internal limit or height>internal limit. */ GLAPI GLboolean GLAPIENTRY OSMesaMakeCurrent( OSMesaContext ctx, void *buffer, GLenum type, GLsizei width, GLsizei height ); /* * Return the current Off-Screen Mesa rendering context handle. */ GLAPI OSMesaContext GLAPIENTRY OSMesaGetCurrentContext( void ); /* * Set pixel store/packing parameters for the current context. * This is similar to glPixelStore. * Input: pname - OSMESA_ROW_LENGTH * specify actual pixels per row in image buffer * 0 = same as image width (default) * OSMESA_Y_UP * zero = Y coordinates increase downward * non-zero = Y coordinates increase upward (default) * value - the value for the parameter pname * * New in version 2.0. */ GLAPI void GLAPIENTRY OSMesaPixelStore( GLint pname, GLint value ); /* * Return an integer value like glGetIntegerv. * Input: pname - * OSMESA_WIDTH return current image width * OSMESA_HEIGHT return current image height * OSMESA_FORMAT return image format * OSMESA_TYPE return color component data type * OSMESA_ROW_LENGTH return row length in pixels * OSMESA_Y_UP returns 1 or 0 to indicate Y axis direction * value - pointer to integer in which to return result. */ GLAPI void GLAPIENTRY OSMesaGetIntegerv( GLint pname, GLint *value ); /* * Return the depth buffer associated with an OSMesa context. * Input: c - the OSMesa context * Output: width, height - size of buffer in pixels * bytesPerValue - bytes per depth value (2 or 4) * buffer - pointer to depth buffer values * Return: GL_TRUE or GL_FALSE to indicate success or failure. * * New in Mesa 2.4. */ GLAPI GLboolean GLAPIENTRY OSMesaGetDepthBuffer( OSMesaContext c, GLint *width, GLint *height, GLint *bytesPerValue, void **buffer ); /* * Return the color buffer associated with an OSMesa context. * Input: c - the OSMesa context * Output: width, height - size of buffer in pixels * format - buffer format (OSMESA_FORMAT) * buffer - pointer to depth buffer values * Return: GL_TRUE or GL_FALSE to indicate success or failure. * * New in Mesa 3.3. */ GLAPI GLboolean GLAPIENTRY OSMesaGetColorBuffer( OSMesaContext c, GLint *width, GLint *height, GLint *format, void **buffer ); /** * This typedef is new in Mesa 6.3. */ typedef void (*OSMESAproc)(); /* * Return pointer to the named function. * New in Mesa 4.1 * Return OSMESAproc in 6.3. */ GLAPI OSMESAproc GLAPIENTRY OSMesaGetProcAddress( const char *funcName ); /** * Enable/disable color clamping, off by default. * New in Mesa 6.4.2 */ GLAPI void GLAPIENTRY OSMesaColorClamp(GLboolean enable); /** * Enable/disable Gallium post-process filters. * This should be called after a context is created, but before it is * made current for the first time. After a context has been made * current, this function has no effect. * If the enable_value param is zero, the filter is disabled. Otherwise * the filter is enabled, and the value may control the filter's quality. * New in Mesa 10.0 */ GLAPI void GLAPIENTRY OSMesaPostprocess(OSMesaContext osmesa, const char *filter, unsigned enable_value); #ifdef __cplusplus } #endif #endif