1 /* 2 * Mesa 3-D graphics library 3 * 4 * Copyright (C) 1999-2005 Brian Paul All Rights Reserved. 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a 7 * copy of this software and associated documentation files (the "Software"), 8 * to deal in the Software without restriction, including without limitation 9 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 10 * and/or sell copies of the Software, and to permit persons to whom the 11 * Software is furnished to do so, subject to the following conditions: 12 * 13 * The above copyright notice and this permission notice shall be included 14 * in all copies or substantial portions of the Software. 15 * 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 * 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 can be retrieved 45 * via OSMesaGetIntegerv(OSMESA_MAX_WIDTH/OSMESA_MAX_HEIGHT). 46 */ 47 48 49 #ifndef OSMESA_H 50 #define OSMESA_H 51 52 53 #ifdef __cplusplus 54 extern "C" { 55 #endif 56 57 58 #include <GL/gl.h> 59 60 61 #define OSMESA_MAJOR_VERSION 11 62 #define OSMESA_MINOR_VERSION 2 63 #define OSMESA_PATCH_VERSION 0 64 65 66 67 /* 68 * Values for the format parameter of OSMesaCreateContext() 69 * New in version 2.0. 70 */ 71 #define OSMESA_COLOR_INDEX GL_COLOR_INDEX 72 #define OSMESA_RGBA GL_RGBA 73 #define OSMESA_BGRA 0x1 74 #define OSMESA_ARGB 0x2 75 #define OSMESA_RGB GL_RGB 76 #define OSMESA_BGR 0x4 77 #define OSMESA_RGB_565 0x5 78 79 80 /* 81 * OSMesaPixelStore() parameters: 82 * New in version 2.0. 83 */ 84 #define OSMESA_ROW_LENGTH 0x10 85 #define OSMESA_Y_UP 0x11 86 87 88 /* 89 * Accepted by OSMesaGetIntegerv: 90 */ 91 #define OSMESA_WIDTH 0x20 92 #define OSMESA_HEIGHT 0x21 93 #define OSMESA_FORMAT 0x22 94 #define OSMESA_TYPE 0x23 95 #define OSMESA_MAX_WIDTH 0x24 /* new in 4.0 */ 96 #define OSMESA_MAX_HEIGHT 0x25 /* new in 4.0 */ 97 98 /* 99 * Accepted in OSMesaCreateContextAttrib's attribute list. 100 */ 101 #define OSMESA_DEPTH_BITS 0x30 102 #define OSMESA_STENCIL_BITS 0x31 103 #define OSMESA_ACCUM_BITS 0x32 104 #define OSMESA_PROFILE 0x33 105 #define OSMESA_CORE_PROFILE 0x34 106 #define OSMESA_COMPAT_PROFILE 0x35 107 #define OSMESA_CONTEXT_MAJOR_VERSION 0x36 108 #define OSMESA_CONTEXT_MINOR_VERSION 0x37 109 110 111 typedef struct osmesa_context *OSMesaContext; 112 113 114 /* 115 * Create an Off-Screen Mesa rendering context. The only attribute needed is 116 * an RGBA vs Color-Index mode flag. 117 * 118 * Input: format - one of OSMESA_COLOR_INDEX, OSMESA_RGBA, OSMESA_BGRA, 119 * OSMESA_ARGB, OSMESA_RGB, or OSMESA_BGR. 120 * sharelist - specifies another OSMesaContext with which to share 121 * display lists. NULL indicates no sharing. 122 * Return: an OSMesaContext or 0 if error 123 */ 124 GLAPI OSMesaContext GLAPIENTRY 125 OSMesaCreateContext( GLenum format, OSMesaContext sharelist ); 126 127 128 129 /* 130 * Create an Off-Screen Mesa rendering context and specify desired 131 * size of depth buffer, stencil buffer and accumulation buffer. 132 * If you specify zero for depthBits, stencilBits, accumBits you 133 * can save some memory. 134 * 135 * New in Mesa 3.5 136 */ 137 GLAPI OSMesaContext GLAPIENTRY 138 OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits, 139 GLint accumBits, OSMesaContext sharelist); 140 141 142 /* 143 * Create an Off-Screen Mesa rendering context with attribute list. 144 * The list is composed of (attribute, value) pairs and terminated with 145 * attribute==0. Supported Attributes: 146 * 147 * Attributes Values 148 * -------------------------------------------------------------------------- 149 * OSMESA_FORMAT OSMESA_RGBA*, OSMESA_BGRA, OSMESA_ARGB, etc. 150 * OSMESA_DEPTH_BITS 0*, 16, 24, 32 151 * OSMESA_STENCIL_BITS 0*, 8 152 * OSMESA_ACCUM_BITS 0*, 16 153 * OSMESA_PROFILE OSMESA_COMPAT_PROFILE*, OSMESA_CORE_PROFILE 154 * OSMESA_CONTEXT_MAJOR_VERSION 1*, 2, 3 155 * OSMESA_CONTEXT_MINOR_VERSION 0+ 156 * 157 * Note: * = default value 158 * 159 * We return a context version >= what's specified by OSMESA_CONTEXT_MAJOR/ 160 * MINOR_VERSION for the given profile. For example, if you request a GL 1.4 161 * compat profile, you might get a GL 3.0 compat profile. 162 * Otherwise, null is returned if the version/profile is not supported. 163 * 164 * New in Mesa 11.2 165 */ 166 GLAPI OSMesaContext GLAPIENTRY 167 OSMesaCreateContextAttribs( const int *attribList, OSMesaContext sharelist ); 168 169 170 171 /* 172 * Destroy an Off-Screen Mesa rendering context. 173 * 174 * Input: ctx - the context to destroy 175 */ 176 GLAPI void GLAPIENTRY 177 OSMesaDestroyContext( OSMesaContext ctx ); 178 179 180 181 /* 182 * Bind an OSMesaContext to an image buffer. The image buffer is just a 183 * block of memory which the client provides. Its size must be at least 184 * as large as width*height*sizeof(type). Its address should be a multiple 185 * of 4 if using RGBA mode. 186 * 187 * Image data is stored in the order of glDrawPixels: row-major order 188 * with the lower-left image pixel stored in the first array position 189 * (ie. bottom-to-top). 190 * 191 * Since the only type initially supported is GL_UNSIGNED_BYTE, if the 192 * context is in RGBA mode, each pixel will be stored as a 4-byte RGBA 193 * value. If the context is in color indexed mode, each pixel will be 194 * stored as a 1-byte value. 195 * 196 * If the context's viewport hasn't been initialized yet, it will now be 197 * initialized to (0,0,width,height). 198 * 199 * Input: ctx - the rendering context 200 * buffer - the image buffer memory 201 * type - data type for pixel components, only GL_UNSIGNED_BYTE 202 * supported now 203 * width, height - size of image buffer in pixels, at least 1 204 * Return: GL_TRUE if success, GL_FALSE if error because of invalid ctx, 205 * invalid buffer address, type!=GL_UNSIGNED_BYTE, width<1, height<1, 206 * width>internal limit or height>internal limit. 207 */ 208 GLAPI GLboolean GLAPIENTRY 209 OSMesaMakeCurrent( OSMesaContext ctx, void *buffer, GLenum type, 210 GLsizei width, GLsizei height ); 211 212 213 214 215 /* 216 * Return the current Off-Screen Mesa rendering context handle. 217 */ 218 GLAPI OSMesaContext GLAPIENTRY 219 OSMesaGetCurrentContext( void ); 220 221 222 223 /* 224 * Set pixel store/packing parameters for the current context. 225 * This is similar to glPixelStore. 226 * Input: pname - OSMESA_ROW_LENGTH 227 * specify actual pixels per row in image buffer 228 * 0 = same as image width (default) 229 * OSMESA_Y_UP 230 * zero = Y coordinates increase downward 231 * non-zero = Y coordinates increase upward (default) 232 * value - the value for the parameter pname 233 * 234 * New in version 2.0. 235 */ 236 GLAPI void GLAPIENTRY 237 OSMesaPixelStore( GLint pname, GLint value ); 238 239 240 241 /* 242 * Return an integer value like glGetIntegerv. 243 * Input: pname - 244 * OSMESA_WIDTH return current image width 245 * OSMESA_HEIGHT return current image height 246 * OSMESA_FORMAT return image format 247 * OSMESA_TYPE return color component data type 248 * OSMESA_ROW_LENGTH return row length in pixels 249 * OSMESA_Y_UP returns 1 or 0 to indicate Y axis direction 250 * value - pointer to integer in which to return result. 251 */ 252 GLAPI void GLAPIENTRY 253 OSMesaGetIntegerv( GLint pname, GLint *value ); 254 255 256 257 /* 258 * Return the depth buffer associated with an OSMesa context. 259 * Input: c - the OSMesa context 260 * Output: width, height - size of buffer in pixels 261 * bytesPerValue - bytes per depth value (2 or 4) 262 * buffer - pointer to depth buffer values 263 * Return: GL_TRUE or GL_FALSE to indicate success or failure. 264 * 265 * New in Mesa 2.4. 266 */ 267 GLAPI GLboolean GLAPIENTRY 268 OSMesaGetDepthBuffer( OSMesaContext c, GLint *width, GLint *height, 269 GLint *bytesPerValue, void **buffer ); 270 271 272 273 /* 274 * Return the color buffer associated with an OSMesa context. 275 * Input: c - the OSMesa context 276 * Output: width, height - size of buffer in pixels 277 * format - buffer format (OSMESA_FORMAT) 278 * buffer - pointer to depth buffer values 279 * Return: GL_TRUE or GL_FALSE to indicate success or failure. 280 * 281 * New in Mesa 3.3. 282 */ 283 GLAPI GLboolean GLAPIENTRY 284 OSMesaGetColorBuffer( OSMesaContext c, GLint *width, GLint *height, 285 GLint *format, void **buffer ); 286 287 288 289 /** 290 * This typedef is new in Mesa 6.3. 291 */ 292 typedef void (*OSMESAproc)(); 293 294 295 /* 296 * Return pointer to the named function. 297 * New in Mesa 4.1 298 * Return OSMESAproc in 6.3. 299 */ 300 GLAPI OSMESAproc GLAPIENTRY 301 OSMesaGetProcAddress( const char *funcName ); 302 303 304 305 /** 306 * Enable/disable color clamping, off by default. 307 * New in Mesa 6.4.2 308 */ 309 GLAPI void GLAPIENTRY 310 OSMesaColorClamp(GLboolean enable); 311 312 313 /** 314 * Enable/disable Gallium post-process filters. 315 * This should be called after a context is created, but before it is 316 * made current for the first time. After a context has been made 317 * current, this function has no effect. 318 * If the enable_value param is zero, the filter is disabled. Otherwise 319 * the filter is enabled, and the value may control the filter's quality. 320 * New in Mesa 10.0 321 */ 322 GLAPI void GLAPIENTRY 323 OSMesaPostprocess(OSMesaContext osmesa, const char *filter, 324 unsigned enable_value); 325 326 327 #ifdef __cplusplus 328 } 329 #endif 330 331 332 #endif 333