changed xmesa_visual and xmesa_buffer structs to directly include GLvisual and GLframebuffer structs instead of pointers

This commit is contained in:
Brian Paul 2001-04-27 21:18:25 +00:00
parent 75978bd85e
commit 1832f1cc86
5 changed files with 88 additions and 102 deletions

View file

@ -1,4 +1,4 @@
/* $Id: fakeglx.c,v 1.48 2001/03/23 21:37:05 brianp Exp $ */
/* $Id: fakeglx.c,v 1.49 2001/04/27 21:18:25 brianp Exp $ */
/*
* Mesa 3-D graphics library
@ -269,16 +269,16 @@ save_glx_visual( Display *dpy, XVisualInfo *vinfo,
if (v->display == dpy
&& v->level == level
&& v->ximage_flag == ximageFlag
&& v->gl_visual->rgbMode == rgbFlag
&& v->gl_visual->doubleBufferMode == dbFlag
&& v->gl_visual->stereoMode == stereoFlag
&& (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->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)) {
&& v->mesa_visual.rgbMode == rgbFlag
&& v->mesa_visual.doubleBufferMode == dbFlag
&& v->mesa_visual.stereoMode == stereoFlag
&& (v->mesa_visual.alphaBits > 0) == alphaFlag
&& (v->mesa_visual.depthBits >= depth_size || depth_size == 0)
&& (v->mesa_visual.stencilBits >= stencil_size || stencil_size == 0)
&& (v->mesa_visual.accumRedBits >= accumRedSize || accumRedSize == 0)
&& (v->mesa_visual.accumGreenBits >= accumGreenSize || accumGreenSize == 0)
&& (v->mesa_visual.accumBlueBits >= accumBlueSize || accumBlueSize == 0)
&& (v->mesa_visual.accumAlphaBits >= accumAlphaSize || accumAlphaSize == 0)) {
/* now either compare XVisualInfo pointers or visual IDs */
if ((!comparePointers && v->visinfo->visualid == vinfo->visualid)
|| (comparePointers && v->vishandle == vinfo)) {
@ -1418,7 +1418,7 @@ Fake_glXGetConfig( Display *dpy, XVisualInfo *visinfo,
*value = glxvis->level;
return 0;
case GLX_RGBA:
if (glxvis->gl_visual->rgbMode) {
if (glxvis->mesa_visual.rgbMode) {
*value = True;
}
else {
@ -1426,43 +1426,43 @@ Fake_glXGetConfig( Display *dpy, XVisualInfo *visinfo,
}
return 0;
case GLX_DOUBLEBUFFER:
*value = (int) glxvis->gl_visual->doubleBufferMode;
*value = (int) glxvis->mesa_visual.doubleBufferMode;
return 0;
case GLX_STEREO:
*value = (int) glxvis->gl_visual->stereoMode;
*value = (int) glxvis->mesa_visual.stereoMode;
return 0;
case GLX_AUX_BUFFERS:
*value = (int) False;
return 0;
case GLX_RED_SIZE:
*value = glxvis->gl_visual->redBits;
*value = glxvis->mesa_visual.redBits;
return 0;
case GLX_GREEN_SIZE:
*value = glxvis->gl_visual->greenBits;
*value = glxvis->mesa_visual.greenBits;
return 0;
case GLX_BLUE_SIZE:
*value = glxvis->gl_visual->blueBits;
*value = glxvis->mesa_visual.blueBits;
return 0;
case GLX_ALPHA_SIZE:
*value = glxvis->gl_visual->alphaBits;
*value = glxvis->mesa_visual.alphaBits;
return 0;
case GLX_DEPTH_SIZE:
*value = glxvis->gl_visual->depthBits;
*value = glxvis->mesa_visual.depthBits;
return 0;
case GLX_STENCIL_SIZE:
*value = glxvis->gl_visual->stencilBits;
*value = glxvis->mesa_visual.stencilBits;
return 0;
case GLX_ACCUM_RED_SIZE:
*value = glxvis->gl_visual->accumRedBits;
*value = glxvis->mesa_visual.accumRedBits;
return 0;
case GLX_ACCUM_GREEN_SIZE:
*value = glxvis->gl_visual->accumGreenBits;
*value = glxvis->mesa_visual.accumGreenBits;
return 0;
case GLX_ACCUM_BLUE_SIZE:
*value = glxvis->gl_visual->accumBlueBits;
*value = glxvis->mesa_visual.accumBlueBits;
return 0;
case GLX_ACCUM_ALPHA_SIZE:
*value = glxvis->gl_visual->accumAlphaBits;
*value = glxvis->mesa_visual.accumAlphaBits;
return 0;
/*
@ -1485,7 +1485,7 @@ Fake_glXGetConfig( Display *dpy, XVisualInfo *visinfo,
}
else if (glxvis->level>0) {
/* overlay */
if (glxvis->gl_visual->rgbMode) {
if (glxvis->mesa_visual.rgbMode) {
*value = GLX_TRANSPARENT_RGB_EXT;
}
else {

View file

@ -1,4 +1,4 @@
/* $Id: xm_api.c,v 1.20 2001/04/10 15:25:45 brianp Exp $ */
/* $Id: xm_api.c,v 1.21 2001/04/27 21:18:25 brianp Exp $ */
/*
* Mesa 3-D graphics library
@ -425,7 +425,10 @@ static void free_xmesa_buffer(int client, XMesaBuffer buffer)
#endif
}
}
_mesa_free_framebuffer_data(&buffer->mesa_buffer);
FREE(buffer);
return;
}
/* continue search */
@ -823,8 +826,8 @@ static GLboolean setup_grayscale( int client, XMesaVisual v,
prevBuffer = find_xmesa_buffer(v->display, cmap, buffer);
if (prevBuffer &&
(buffer->xm_visual->gl_visual->rgbMode ==
prevBuffer->xm_visual->gl_visual->rgbMode)) {
(buffer->xm_visual->mesa_visual.rgbMode ==
prevBuffer->xm_visual->mesa_visual.rgbMode)) {
/* Copy colormap stuff from previous XMesaBuffer which uses same
* X colormap. Do this to avoid time spent in noFaultXAllocColor.
*/
@ -911,8 +914,8 @@ static GLboolean setup_dithered_color( int client, XMesaVisual v,
prevBuffer = find_xmesa_buffer(v->display, cmap, buffer);
if (prevBuffer &&
(buffer->xm_visual->gl_visual->rgbMode ==
prevBuffer->xm_visual->gl_visual->rgbMode)) {
(buffer->xm_visual->mesa_visual.rgbMode ==
prevBuffer->xm_visual->mesa_visual.rgbMode)) {
/* Copy colormap stuff from previous, matching XMesaBuffer.
* Do this to avoid time spent in noFaultXAllocColor.
*/
@ -1275,10 +1278,8 @@ static GLboolean initialize_visual_and_buffer( int client,
b->frontbuffer = window;
assert( v->gl_visual );
/* Setup for single/double buffering */
if (v->gl_visual->doubleBufferMode) {
if (v->mesa_visual.doubleBufferMode) {
/* Double buffered */
#ifndef XFree86Server
b->shm = check_for_xshm( v->display );
@ -1569,23 +1570,16 @@ XMesaVisual XMesaCreateVisual( XMesaDisplay *display,
if (alpha_flag && alpha_bits == 0)
alpha_bits = 8;
v->gl_visual = _mesa_create_visual( rgb_flag, db_flag, stereo_flag,
red_bits, green_bits,
blue_bits, alpha_bits,
v->index_bits,
depth_size,
stencil_size,
accum_red_size, accum_green_size,
accum_blue_size, accum_alpha_size,
0 );
if (!v->gl_visual) {
#ifndef XFree86Server
FREE(v->visinfo);
#endif
FREE(v);
return NULL;
}
_mesa_initialize_visual( &v->mesa_visual,
rgb_flag, db_flag, stereo_flag,
red_bits, green_bits,
blue_bits, alpha_bits,
v->index_bits,
depth_size,
stencil_size,
accum_red_size, accum_green_size,
accum_blue_size, accum_alpha_size,
0 );
return v;
}
@ -1598,7 +1592,6 @@ void XMesaSetVisualDisplay( XMesaDisplay *dpy, XMesaVisual v )
void XMesaDestroyVisual( XMesaVisual v )
{
_mesa_destroy_visual( v->gl_visual );
#ifndef XFree86Server
FREE(v->visinfo);
#endif
@ -1632,7 +1625,7 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list )
return NULL;
}
ctx = c->gl_ctx = _mesa_create_context( v->gl_visual,
ctx = c->gl_ctx = _mesa_create_context( &v->mesa_visual,
share_list ? share_list->gl_ctx : (GLcontext *) NULL,
(void *) c, direct );
if (!c->gl_ctx) {
@ -1797,7 +1790,7 @@ XMesaBuffer XMesaCreateWindowBuffer2( XMesaVisual v, XMesaWindow w,
#endif
/* determine back buffer implementation */
if (v->gl_visual->doubleBufferMode) {
if (v->mesa_visual.doubleBufferMode) {
if (v->ximage_flag) {
b->db_state = BACK_XIMAGE;
}
@ -1809,19 +1802,15 @@ XMesaBuffer XMesaCreateWindowBuffer2( XMesaVisual v, XMesaWindow w,
b->db_state = 0;
}
b->gl_buffer = _mesa_create_framebuffer( v->gl_visual,
v->gl_visual->depthBits > 0,
v->gl_visual->stencilBits > 0,
v->gl_visual->accumRedBits > 0,
v->gl_visual->alphaBits > 0 );
if (!b->gl_buffer) {
free_xmesa_buffer(client, b);
return NULL;
}
_mesa_initialize_framebuffer(&b->mesa_buffer,
&v->mesa_visual,
v->mesa_visual.depthBits > 0,
v->mesa_visual.stencilBits > 0,
v->mesa_visual.accumRedBits > 0,
v->mesa_visual.alphaBits > 0 );
if (!initialize_visual_and_buffer( client, v, b, v->gl_visual->rgbMode,
if (!initialize_visual_and_buffer( client, v, b, v->mesa_visual.rgbMode,
(XMesaDrawable)w, b->cmap )) {
_mesa_destroy_framebuffer( b->gl_buffer );
free_xmesa_buffer(client, b);
return NULL;
}
@ -1833,22 +1822,22 @@ XMesaBuffer XMesaCreateWindowBuffer2( XMesaVisual v, XMesaWindow w,
int attribs[100];
int numAttribs = 0;
int hw;
if (v->gl_visual->depthBits > 0) {
if (v->mesa_visual.depthBits > 0) {
attribs[numAttribs++] = FXMESA_DEPTH_SIZE;
attribs[numAttribs++] = 1;
}
if (v->gl_visual->doubleBufferMode) {
if (v->mesa_visual.doubleBufferMode) {
attribs[numAttribs++] = FXMESA_DOUBLEBUFFER;
}
if (v->gl_visual->accumRedBits > 0) {
if (v->mesa_visual.accumRedBits > 0) {
attribs[numAttribs++] = FXMESA_ACCUM_SIZE;
attribs[numAttribs++] = v->gl_visual->accumRedBits;
attribs[numAttribs++] = v->mesa_visual.accumRedBits;
}
if (v->gl_visual->stencilBits > 0) {
if (v->mesa_visual.stencilBits > 0) {
attribs[numAttribs++] = FXMESA_STENCIL_SIZE;
attribs[numAttribs++] = v->gl_visual->stencilBits;
attribs[numAttribs++] = v->mesa_visual.stencilBits;
}
if (v->gl_visual->alphaBits > 0) {
if (v->mesa_visual.alphaBits > 0) {
attribs[numAttribs++] = FXMESA_ALPHA_SIZE;
attribs[numAttribs++] = 1;
}
@ -1939,7 +1928,7 @@ XMesaBuffer XMesaCreatePixmapBuffer( XMesaVisual v,
b->cmap = cmap;
/* determine back buffer implementation */
if (v->gl_visual->doubleBufferMode) {
if (v->mesa_visual.doubleBufferMode) {
if (v->ximage_flag) {
b->db_state = BACK_XIMAGE;
}
@ -1951,21 +1940,17 @@ XMesaBuffer XMesaCreatePixmapBuffer( XMesaVisual v,
b->db_state = 0;
}
b->gl_buffer = _mesa_create_framebuffer( v->gl_visual,
v->gl_visual->depthBits > 0,
v->gl_visual->stencilBits > 0,
v->gl_visual->accumRedBits +
v->gl_visual->accumGreenBits +
v->gl_visual->accumBlueBits > 0,
v->gl_visual->alphaBits > 0 );
if (!b->gl_buffer) {
free_xmesa_buffer(client, b);
return NULL;
}
_mesa_initialize_framebuffer(&b->mesa_buffer,
&v->mesa_visual,
v->mesa_visual.depthBits > 0,
v->mesa_visual.stencilBits > 0,
v->mesa_visual.accumRedBits +
v->mesa_visual.accumGreenBits +
v->mesa_visual.accumBlueBits > 0,
v->mesa_visual.alphaBits > 0 );
if (!initialize_visual_and_buffer(client, v, b, v->gl_visual->rgbMode,
if (!initialize_visual_and_buffer(client, v, b, v->mesa_visual.rgbMode,
(XMesaDrawable)p, cmap)) {
_mesa_destroy_framebuffer( b->gl_buffer );
free_xmesa_buffer(client, b);
return NULL;
}
@ -2022,7 +2007,6 @@ void XMesaDestroyBuffer( XMesaBuffer b )
if (b->xm_context)
b->xm_context->xm_buffer = NULL;
_mesa_destroy_framebuffer( b->gl_buffer );
free_xmesa_buffer(client, b);
}
@ -2082,7 +2066,9 @@ GLboolean XMesaMakeCurrent2( XMesaContext c, XMesaBuffer drawBuffer,
c->xm_read_buffer = readBuffer;
c->use_read_buffer = (drawBuffer != readBuffer);
_mesa_make_current2(c->gl_ctx, drawBuffer->gl_buffer, readBuffer->gl_buffer);
_mesa_make_current2(c->gl_ctx,
&drawBuffer->mesa_buffer,
&readBuffer->mesa_buffer);
if (c->gl_ctx->Viewport.Width == 0) {
/* initialize viewport to window size */
@ -2091,7 +2077,7 @@ GLboolean XMesaMakeCurrent2( XMesaContext c, XMesaBuffer drawBuffer,
c->gl_ctx->Scissor.Height = drawBuffer->height;
}
if (c->xm_visual->gl_visual->rgbMode) {
if (c->xm_visual->mesa_visual.rgbMode) {
/*
* Must recompute and set these pixel values because colormap
* can be different for different windows.
@ -2170,7 +2156,7 @@ GLboolean XMesaForceCurrent(XMesaContext c)
{
if (c) {
if (c->gl_ctx != _mesa_get_current_context()) {
_mesa_make_current(c->gl_ctx, c->xm_buffer->gl_buffer);
_mesa_make_current(c->gl_ctx, &c->xm_buffer->mesa_buffer);
}
}
else {
@ -2493,7 +2479,7 @@ GLboolean XMesaGetBackBuffer( XMesaBuffer b,
GLboolean XMesaGetDepthBuffer( XMesaBuffer b, GLint *width, GLint *height,
GLint *bytesPerValue, void **buffer )
{
if ((!b->gl_buffer) || (!b->gl_buffer->DepthBuffer)) {
if (!b->mesa_buffer.DepthBuffer) {
*width = 0;
*height = 0;
*bytesPerValue = 0;
@ -2501,10 +2487,10 @@ GLboolean XMesaGetDepthBuffer( XMesaBuffer b, GLint *width, GLint *height,
return GL_FALSE;
}
else {
*width = b->gl_buffer->Width;
*height = b->gl_buffer->Height;
*width = b->mesa_buffer.Width;
*height = b->mesa_buffer.Height;
*bytesPerValue = sizeof(GLdepth);
*buffer = b->gl_buffer->DepthBuffer;
*buffer = b->mesa_buffer.DepthBuffer;
return GL_TRUE;
}
}

View file

@ -1,4 +1,4 @@
/* $Id: xm_dd.c,v 1.22 2001/04/04 21:54:21 brianp Exp $ */
/* $Id: xm_dd.c,v 1.23 2001/04/27 21:18:25 brianp Exp $ */
/*
* Mesa 3-D graphics library
@ -751,7 +751,7 @@ clear_buffers( GLcontext *ctx, GLbitfield mask,
const GLuint *colorMask = (GLuint *) &ctx->Color.ColorMask;
if ((mask & (DD_FRONT_LEFT_BIT | DD_BACK_LEFT_BIT)) &&
xmesa->xm_buffer->gl_buffer->UseSoftwareAlphaBuffers &&
xmesa->xm_buffer->mesa_buffer.UseSoftwareAlphaBuffers &&
ctx->Color.ColorMask[ACOMP]) {
_mesa_clear_alpha_buffers(ctx);
}

View file

@ -1,4 +1,4 @@
/* $Id: xm_line.c,v 1.16 2001/01/23 23:39:37 brianp Exp $ */
/* $Id: xm_line.c,v 1.17 2001/04/27 21:18:25 brianp Exp $ */
/*
* Mesa 3-D graphics library
@ -64,7 +64,7 @@ static void draw_points_ANY_pixmap( GLcontext *ctx, const SWvertex *vert )
XMesaDrawable buffer = xmesa->xm_buffer->buffer;
XMesaGC gc = xmesa->xm_buffer->gc;
if (xmesa->xm_visual->gl_visual->RGBAflag) {
if (xmesa->xm_visual->mesa_visual.RGBAflag) {
register int x, y;
const GLubyte *color = vert->color;
unsigned long pixel = xmesa_color_to_pixel( xmesa,

View file

@ -1,4 +1,4 @@
/* $Id: xmesaP.h,v 1.20 2001/03/19 02:25:36 keithw Exp $ */
/* $Id: xmesaP.h,v 1.21 2001/04/27 21:18:25 brianp Exp $ */
/*
* Mesa 3-D graphics library
@ -75,10 +75,10 @@ typedef void (*clear_func)( GLcontext *ctx,
/*
* "Derived" from gl_visual. Basically corresponds to an XVisualInfo.
* "Derived" from GLvisual. Basically corresponds to an XVisualInfo.
*/
struct xmesa_visual {
GLvisual *gl_visual; /* Device independent visual parameters */
GLvisual mesa_visual; /* Device independent visual parameters */
XMesaDisplay *display; /* The X11 display */
#ifdef XFree86Server
GLint screen_depth; /* The depth of the screen */
@ -156,11 +156,11 @@ struct xmesa_context {
/*
* "Derived" from gl_buffer. Basically corresponds to a GLXDrawable.
* "Derived" from GLframebuffer. Basically corresponds to a GLXDrawable.
*/
struct xmesa_buffer {
GLframebuffer mesa_buffer; /* depth, stencil, accum, etc buffers */
GLboolean wasCurrent; /* was ever the current buffer? */
GLframebuffer *gl_buffer; /* depth, stencil, accum, etc buffers */
XMesaVisual xm_visual; /* the X/Mesa visual */
XMesaContext xm_context; /* the context associated with this buffer */