From 2bf5d9470d3232763cb49b5589209940d4d5398d Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Fri, 8 Sep 2000 16:41:38 +0000 Subject: [PATCH] added OSMesaCreateContextExt() --- include/GL/osmesa.h | 58 +++++++++++++++++++----------- src/mesa/drivers/osmesa/osmesa.c | 60 ++++++++++++++++++++++++++------ 2 files changed, 86 insertions(+), 32 deletions(-) diff --git a/include/GL/osmesa.h b/include/GL/osmesa.h index 9746d74f919..4af2c69c4e3 100644 --- a/include/GL/osmesa.h +++ b/include/GL/osmesa.h @@ -1,8 +1,8 @@ -/* $Id: osmesa.h,v 1.5 2000/03/28 16:59:39 rjfrank Exp $ */ +/* $Id: osmesa.h,v 1.6 2000/09/08 16:41:38 brianp Exp $ */ /* * Mesa 3-D graphics library - * Version: 3.3 + * Version: 3.5 * * Copyright (C) 1999-2000 Brian Paul All Rights Reserved. * @@ -59,11 +59,11 @@ extern "C" { #endif -#include "GL/gl.h" +#include #define OSMESA_MAJOR_VERSION 3 -#define OSMESA_MINOR_VERSION 3 +#define OSMESA_MINOR_VERSION 5 @@ -114,18 +114,31 @@ typedef struct osmesa_context *OSMesaContext; * display lists. NULL indicates no sharing. * Return: an OSMesaContext or 0 if error */ -GLAPI OSMesaContext GLAPIENTRY OSMesaCreateContext( GLenum format, - OSMesaContext sharelist ); +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); + /* * Destroy an Off-Screen Mesa rendering context. * * Input: ctx - the context to destroy */ -GLAPI void GLAPIENTRY OSMesaDestroyContext( OSMesaContext ctx ); +GLAPI void GLAPIENTRY +OSMesaDestroyContext( OSMesaContext ctx ); @@ -156,9 +169,9 @@ GLAPI void GLAPIENTRY OSMesaDestroyContext( OSMesaContext 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 ); +GLAPI GLboolean GLAPIENTRY +OSMesaMakeCurrent( OSMesaContext ctx, void *buffer, GLenum type, + GLsizei width, GLsizei height ); @@ -166,7 +179,8 @@ GLAPI GLboolean GLAPIENTRY OSMesaMakeCurrent( OSMesaContext ctx, /* * Return the current Off-Screen Mesa rendering context handle. */ -GLAPI OSMesaContext GLAPIENTRY OSMesaGetCurrentContext( void ); +GLAPI OSMesaContext GLAPIENTRY +OSMesaGetCurrentContext( void ); @@ -183,7 +197,8 @@ GLAPI OSMesaContext GLAPIENTRY OSMesaGetCurrentContext( void ); * * New in version 2.0. */ -GLAPI void GLAPIENTRY OSMesaPixelStore( GLint pname, GLint value ); +GLAPI void GLAPIENTRY +OSMesaPixelStore( GLint pname, GLint value ); @@ -198,7 +213,8 @@ GLAPI void GLAPIENTRY OSMesaPixelStore( GLint pname, GLint value ); * 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 ); +GLAPI void GLAPIENTRY +OSMesaGetIntegerv( GLint pname, GLint *value ); @@ -212,10 +228,10 @@ GLAPI void GLAPIENTRY OSMesaGetIntegerv( GLint pname, GLint *value ); * * New in Mesa 2.4. */ -GLAPI GLboolean GLAPIENTRY OSMesaGetDepthBuffer( OSMesaContext c, - GLint *width, GLint *height, - GLint *bytesPerValue, - void **buffer ); +GLAPI GLboolean GLAPIENTRY +OSMesaGetDepthBuffer( OSMesaContext c, GLint *width, GLint *height, + GLint *bytesPerValue, void **buffer ); + /* @@ -228,10 +244,10 @@ GLAPI GLboolean GLAPIENTRY OSMesaGetDepthBuffer( OSMesaContext c, * * New in Mesa 3.3. */ -GLAPI GLboolean GLAPIENTRY OSMesaGetColorBuffer( OSMesaContext c, - GLint *width, GLint *height, - GLint *format, - void **buffer ); +GLAPI GLboolean GLAPIENTRY +OSMesaGetColorBuffer( OSMesaContext c, GLint *width, GLint *height, + GLint *format, void **buffer ); + #if defined(__BEOS__) || defined(__QUICKDRAW__) diff --git a/src/mesa/drivers/osmesa/osmesa.c b/src/mesa/drivers/osmesa/osmesa.c index 56059607118..7f79a1f272e 100644 --- a/src/mesa/drivers/osmesa/osmesa.c +++ b/src/mesa/drivers/osmesa/osmesa.c @@ -1,4 +1,4 @@ -/* $Id: osmesa.c,v 1.19 2000/06/27 21:42:14 brianp Exp $ */ +/* $Id: osmesa.c,v 1.20 2000/09/08 16:41:39 brianp Exp $ */ /* * Mesa 3-D graphics library @@ -99,11 +99,26 @@ static void osmesa_update_state( GLcontext *ctx ); */ OSMesaContext GLAPIENTRY OSMesaCreateContext( GLenum format, OSMesaContext sharelist ) +{ + return OSMesaCreateContextExt(format, DEFAULT_SOFTWARE_DEPTH_BITS, + 8, 16, sharelist); +} + + + +/* + * New in Mesa 3.5 + * + * Create context and specify size of ancillary buffers. + */ +OSMesaContext GLAPIENTRY +OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits, + GLint accumBits, OSMesaContext sharelist ) { OSMesaContext osmesa; GLint rshift, gshift, bshift, ashift; GLint rind, gind, bind; - GLint indexBits, alphaBits; + GLint indexBits, redBits, greenBits, blueBits, alphaBits; GLboolean rgbmode; GLboolean swalpha; GLuint i4 = 1; @@ -119,6 +134,9 @@ OSMesaCreateContext( GLenum format, OSMesaContext sharelist ) } else if (format==OSMESA_RGBA) { indexBits = 0; + redBits = 8; + greenBits = 8; + blueBits = 8; alphaBits = 8; if (little_endian) { rshift = 0; @@ -136,6 +154,9 @@ OSMesaCreateContext( GLenum format, OSMesaContext sharelist ) } else if (format==OSMESA_BGRA) { indexBits = 0; + redBits = 8; + greenBits = 8; + blueBits = 8; alphaBits = 8; if (little_endian) { ashift = 0; @@ -153,6 +174,9 @@ OSMesaCreateContext( GLenum format, OSMesaContext sharelist ) } else if (format==OSMESA_ARGB) { indexBits = 0; + redBits = 8; + greenBits = 8; + blueBits = 8; alphaBits = 8; if (little_endian) { bshift = 0; @@ -170,6 +194,9 @@ OSMesaCreateContext( GLenum format, OSMesaContext sharelist ) } else if (format==OSMESA_RGB) { indexBits = 0; + redBits = 8; + greenBits = 8; + blueBits = 8; alphaBits = 0; bshift = 0; gshift = 8; @@ -183,6 +210,9 @@ OSMesaCreateContext( GLenum format, OSMesaContext sharelist ) } else if (format==OSMESA_BGR) { indexBits = 0; + redBits = 8; + greenBits = 8; + blueBits = 8; alphaBits = 0; bshift = 0; gshift = 8; @@ -201,15 +231,22 @@ OSMesaCreateContext( GLenum format, OSMesaContext sharelist ) osmesa = (OSMesaContext) CALLOC_STRUCT(osmesa_context); if (osmesa) { - osmesa->gl_visual = gl_create_visual( rgbmode, - swalpha, /* software alpha */ - GL_FALSE, /* double buffer */ - GL_FALSE, /* stereo */ - DEFAULT_SOFTWARE_DEPTH_BITS, - STENCIL_BITS, - rgbmode ? ACCUM_BITS : 0, - indexBits, - 8, 8, 8, alphaBits ); + osmesa->gl_visual = _mesa_create_visual( rgbmode, + GL_FALSE, /* double buffer */ + GL_FALSE, /* stereo */ + redBits, + greenBits, + blueBits, + alphaBits, + indexBits, + depthBits, + stencilBits, + accumBits, + accumBits, + accumBits, + alphaBits ? accumBits : 0, + 1 /* num samples */ + ); if (!osmesa->gl_visual) { FREE(osmesa); return NULL; @@ -262,6 +299,7 @@ OSMesaCreateContext( GLenum format, OSMesaContext sharelist ) + /* * Destroy an Off-Screen Mesa rendering context. *