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