updates for separate R/G/B/A accum buffer sizes

This commit is contained in:
Brian Paul 2000-03-31 01:07:13 +00:00
parent b371e0da2b
commit b2e4600183
6 changed files with 75 additions and 27 deletions

View file

@ -413,7 +413,7 @@ int GGIMesaSetVisual(GGIMesaContext ctx, ggi_visual_t vis,
ctx->gl_buffer = gl_create_framebuffer(ctx->gl_vis,
ctx->gl_vis->DepthBits > 0,
ctx->gl_vis->StencilBits > 0,
ctx->gl_vis->AccumBits > 0,
ctx->gl_vis->AccumRedBits > 0,
ctx->gl_vis->AlphaBits > 0);

View file

@ -1046,7 +1046,7 @@ fxMesaContext GLAPIENTRY fxMesaCreateContext(GLuint win,
fxMesa->glBuffer=gl_create_framebuffer(fxMesa->glVis,
GL_FALSE, /* no software depth */
fxMesa->glVis->StencilBits > 0,
fxMesa->glVis->AccumBits > 0,
fxMesa->glVis->AccumRedBits > 0,
fxMesa->glVis->AlphaBits > 0 );
if (!fxMesa->glBuffer) {
errorstr = "gl_create_framebuffer";

View file

@ -1,4 +1,4 @@
/* $Id: osmesa.c,v 1.12 2000/03/28 16:59:39 rjfrank Exp $ */
/* $Id: osmesa.c,v 1.13 2000/03/31 01:07:13 brianp Exp $ */
/*
* Mesa 3-D graphics library
@ -229,7 +229,7 @@ OSMesaCreateContext( GLenum format, OSMesaContext sharelist )
osmesa->gl_buffer = gl_create_framebuffer( osmesa->gl_visual,
osmesa->gl_visual->DepthBits > 0,
osmesa->gl_visual->StencilBits > 0,
osmesa->gl_visual->AccumBits > 0,
osmesa->gl_visual->AccumRedBits > 0,
osmesa->gl_visual->AlphaBits > 0 );
if (!osmesa->gl_buffer) {

View file

@ -1,4 +1,4 @@
/* $Id: svgamesa.c,v 1.4 2000/01/25 00:03:02 brianp Exp $ */
/* $Id: svgamesa.c,v 1.5 2000/03/31 01:07:14 brianp Exp $ */
/*
* Mesa 3-D graphics library
@ -426,7 +426,7 @@ SVGAMesaContext SVGAMesaCreateContext( GLboolean doubleBuffer )
ctx->gl_buffer = gl_create_framebuffer( ctx->gl_vis,
ctx->gl_vis->DepthBits > 0,
ctx->gl_vis->StencilBits > 0,
ctx->gl_vis->AccumBits > 0,
ctx->gl_vis->AccumRedBits > 0,
ctx->gl_vis->AlphaBits > 0 );
ctx->index = 1;

View file

@ -1,4 +1,4 @@
/* $Id: fakeglx.c,v 1.26 2000/03/17 15:33:09 brianp Exp $ */
/* $Id: fakeglx.c,v 1.27 2000/03/31 01:07:14 brianp Exp $ */
/*
* Mesa 3-D graphics library
@ -228,7 +228,9 @@ save_glx_visual( Display *dpy, XVisualInfo *vinfo,
GLboolean rgbFlag, GLboolean alphaFlag, GLboolean dbFlag,
GLboolean stereoFlag,
GLint depth_size, GLint stencil_size,
GLint accum_size, GLint level )
GLint accumRedSize, GLint accumGreenSize,
GLint accumBlueSize, GLint accumAlphaSize,
GLint level )
{
GLboolean ximageFlag = GL_TRUE;
XMesaVisual xmvis;
@ -271,7 +273,10 @@ save_glx_visual( Display *dpy, XVisualInfo *vinfo,
&& (v->gl_visual->AlphaBits > 0) == alphaFlag
&& (v->gl_visual->DepthBits >= depth_size || depth_size == 0)
&& (v->gl_visual->StencilBits >= stencil_size || stencil_size == 0)
&& (v->gl_visual->AccumBits >= accum_size || accum_size == 0)) {
&& (v->gl_visual->AccumRedBits >= accumRedSize || accumRedSize == 0)
&& (v->gl_visual->AccumGreenBits >= accumGreenSize || accumGreenSize == 0)
&& (v->gl_visual->AccumBlueBits >= accumBlueSize || accumBlueSize == 0)
&& (v->gl_visual->AccumAlphaBits >= accumAlphaSize || accumAlphaSize == 0)) {
/* now either compare XVisualInfo pointers or visual IDs */
if ((!comparePointers && v->visinfo->visualid == vinfo->visualid)
|| (comparePointers && v->vishandle == vinfo)) {
@ -287,9 +292,12 @@ save_glx_visual( Display *dpy, XVisualInfo *vinfo,
return NULL;
}
xmvis = XMesaCreateVisual( dpy, vinfo, rgbFlag, alphaFlag, dbFlag,
stereoFlag, ximageFlag,
depth_size, stencil_size, accum_size, level );
xmvis = XMesaCreateVisual2( dpy, vinfo, rgbFlag, alphaFlag, dbFlag,
stereoFlag, ximageFlag,
depth_size, stencil_size,
accumRedSize, accumBlueSize,
accumBlueSize, accumAlphaSize, 0, level,
GLX_NONE_EXT );
if (xmvis) {
VisualTable[NumVisuals] = xmvis;
NumVisuals++;
@ -322,7 +330,7 @@ create_glx_visual( Display *dpy, XVisualInfo *visinfo )
GL_FALSE, /* stereo */
0, /* depth bits */
0, /* stencil bits */
0, /* accum bits */
0,0,0,0, /* accum bits */
vislevel /* level */
);
}
@ -337,7 +345,10 @@ create_glx_visual( Display *dpy, XVisualInfo *visinfo )
GL_FALSE, /* stereo */
DEFAULT_SOFTWARE_DEPTH_BITS,
8 * sizeof(GLstencil),
8 * sizeof(GLaccum),
8 * sizeof(GLaccum), /* r */
8 * sizeof(GLaccum), /* g */
8 * sizeof(GLaccum), /* b */
8 * sizeof(GLaccum), /* a */
0 /* level */
);
}
@ -867,7 +878,10 @@ Fake_glXChooseVisual( Display *dpy, int screen, int *list )
GLboolean stereo_flag = GL_FALSE;
GLint depth_size = 0;
GLint stencil_size = 0;
GLint accum_size = 0;
GLint accumRedSize = 0;
GLint accumGreenSize = 0;
GLint accumBlueSize = 0;
GLint accumAlphaSize = 0;
int level = 0;
int visual_type = DONT_CARE;
int trans_type = DONT_CARE;
@ -934,13 +948,31 @@ Fake_glXChooseVisual( Display *dpy, int screen, int *list )
stencil_size = *parselist++;
break;
case GLX_ACCUM_RED_SIZE:
parselist++;
{
GLint size = *parselist++;
accumRedSize = MAX2( accumRedSize, size );
}
break;
case GLX_ACCUM_GREEN_SIZE:
parselist++;
{
GLint size = *parselist++;
accumGreenSize = MAX2( accumGreenSize, size );
}
break;
case GLX_ACCUM_BLUE_SIZE:
parselist++;
{
GLint size = *parselist++;
accumBlueSize = MAX2( accumBlueSize, size );
}
break;
case GLX_ACCUM_ALPHA_SIZE:
parselist++;
{
GLint size = *parselist++;
accum_size = MAX2( accum_size, size );
accumAlphaSize = MAX2( accumAlphaSize, size );
}
break;
@ -997,7 +1029,7 @@ Fake_glXChooseVisual( Display *dpy, int screen, int *list )
else {
/* Get a color index visual */
vis = choose_x_visual( dpy, screen, rgb_flag, min_ci, visual_type );
accum_size = 0;
accumRedSize = accumGreenSize = accumBlueSize = accumAlphaSize = 0;
}
}
else {
@ -1034,11 +1066,19 @@ Fake_glXChooseVisual( Display *dpy, int screen, int *list )
/* we only support one size of stencil and accum buffers. */
if (stencil_size > 0)
stencil_size = STENCIL_BITS;
if (accum_size > 0)
accum_size = ACCUM_BITS;
if (accumRedSize > 0)
accumRedSize = ACCUM_BITS;
if (accumGreenSize > 0)
accumGreenSize = ACCUM_BITS;
if (accumBlueSize > 0)
accumBlueSize = ACCUM_BITS;
if (accumAlphaSize > 0)
accumAlphaSize = ACCUM_BITS;
if (!save_glx_visual( dpy, vis, rgb_flag, alpha_flag, double_flag,
stereo_flag,
depth_size, stencil_size, accum_size, level ))
stereo_flag, depth_size, stencil_size,
accumRedSize, accumGreenSize,
accumBlueSize, accumAlphaSize,
level ))
return NULL;
}
@ -1396,15 +1436,16 @@ Fake_glXGetConfig( Display *dpy, XVisualInfo *visinfo,
*value = glxvis->gl_visual->StencilBits;
return 0;
case GLX_ACCUM_RED_SIZE:
*value = glxvis->gl_visual->AccumRedBits;
return 0;
case GLX_ACCUM_GREEN_SIZE:
*value = glxvis->gl_visual->AccumGreenBits;
return 0;
case GLX_ACCUM_BLUE_SIZE:
*value = glxvis->gl_visual->AccumBits;
*value = glxvis->gl_visual->AccumBlueBits;
return 0;
case GLX_ACCUM_ALPHA_SIZE:
if (glxvis->gl_visual->AlphaBits > 0)
*value = glxvis->gl_visual->AccumBits;
else
*value = 0;
*value = glxvis->gl_visual->AccumAlphaBits;
return 0;
/*
@ -1461,6 +1502,12 @@ Fake_glXGetConfig( Display *dpy, XVisualInfo *visinfo,
/* undefined */
return 0;
/*
* GLX_EXT_visual_info extension
*/
case GLX_VISUAL_CAVEAT_EXT:
return glxvis->VisualCaveat;
/*
* Extensions
*/

View file

@ -1,4 +1,4 @@
/* $Id: xmesaP.h,v 1.8 2000/02/25 20:36:03 brianp Exp $ */
/* $Id: xmesaP.h,v 1.9 2000/03/31 01:07:14 brianp Exp $ */
/*
* Mesa 3-D graphics library
@ -86,6 +86,7 @@ struct xmesa_visual {
GLint BitsPerPixel; /* True bits per pixel for XImages */
GLint level; /* 0=normal, 1=overlay, etc */
GLint VisualCaveat; /* for GLX_EXT_visual_rating extension */
GLboolean ximage_flag; /* Use XImage for back buffer (not pixmap)? */