/*
* Mesa 3-D graphics library
- * Version: 7.1
*
* Copyright (C) 1999-2007 Brian Paul All Rights Reserved.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
*/
/**
#undef __WIN32__
#endif
+#include <stdio.h>
#include "glxheader.h"
#include "xmesaP.h"
+#include "main/api_exec.h"
#include "main/context.h"
#include "main/extensions.h"
#include "main/framebuffer.h"
#include "main/macros.h"
#include "main/renderbuffer.h"
#include "main/teximage.h"
+#include "main/version.h"
#include "main/vtxfmt.h"
-#include "glapi/glthread.h"
#include "swrast/swrast.h"
#include "swrast/s_renderbuffer.h"
#include "swrast_setup/swrast_setup.h"
/**
* Global X driver lock
*/
-_glthread_Mutex _xmesa_lock;
+mtx_t _xmesa_lock;
* Do this by calling XGetWindowAttributes() for the window and
* checking if we catch an X error.
* Input: dpy - the display
- * win - the window to check for existance
+ * win - the window to check for existence
* Return: GL_TRUE - window exists
* GL_FALSE - window doesn't exist
*/
{
Status stat;
- _glthread_LOCK_MUTEX(_xmesa_lock);
+ mtx_lock(&_xmesa_lock);
XSync(b->xm_visual->display, 0); /* added for Chromium */
stat = get_drawable_size(dpy, b->frontxrb->pixmap, width, height);
- _glthread_UNLOCK_MUTEX(_xmesa_lock);
+ mtx_unlock(&_xmesa_lock);
if (!stat) {
/* probably querying a window that's recently been destroyed */
{
XMesaBuffer b;
- ASSERT(type == WINDOW || type == PIXMAP || type == PBUFFER);
+ assert(type == WINDOW || type == PIXMAP || type == PBUFFER);
b = (XMesaBuffer) CALLOC_STRUCT(xmesa_buffer);
if (!b)
b->frontxrb->Parent = b;
b->frontxrb->drawable = d;
b->frontxrb->pixmap = (XMesaPixmap) d;
- _mesa_add_renderbuffer(&b->mesa_buffer, BUFFER_FRONT_LEFT,
- &b->frontxrb->Base.Base);
+ _mesa_attach_and_own_rb(&b->mesa_buffer, BUFFER_FRONT_LEFT,
+ &b->frontxrb->Base.Base);
/*
* Back renderbuffer
/* determine back buffer implementation */
b->db_mode = vis->ximage_flag ? BACK_XIMAGE : BACK_PIXMAP;
- _mesa_add_renderbuffer(&b->mesa_buffer, BUFFER_BACK_LEFT,
- &b->backxrb->Base.Base);
+ _mesa_attach_and_own_rb(&b->mesa_buffer, BUFFER_BACK_LEFT,
+ &b->backxrb->Base.Base);
}
/*
const int xclass = v->visualType;
- ASSERT(!b || b->xm_visual == v);
+ assert(!b || b->xm_visual == v);
/* Save true bits/pixel */
v->BitsPerPixel = bits_per_pixel(v);
}
v->mesa_visual.indexBits = 0;
- if (_mesa_getenv("MESA_NO_DITHER")) {
+ if (getenv("MESA_NO_DITHER")) {
v->dithered_pf = v->undithered_pf;
}
* which can help Brian figure out what's going on when a user
* reports bugs.
*/
- if (_mesa_getenv("MESA_INFO")) {
+ if (getenv("MESA_INFO")) {
printf("X/Mesa visual = %p\n", (void *) v);
printf("X/Mesa dithered pf = %u\n", v->dithered_pf);
printf("X/Mesa undithered pf = %u\n", v->undithered_pf);
/* Do window-specific initializations */
/* these should have been set in create_xmesa_buffer */
- ASSERT(b->frontxrb->drawable == window);
- ASSERT(b->frontxrb->pixmap == (XMesaPixmap) window);
+ assert(b->frontxrb->drawable == window);
+ assert(b->frontxrb->pixmap == (XMesaPixmap) window);
/* Setup for single/double buffering */
if (v->mesa_visual.doubleBufferMode) {
GLint red_bits, green_bits, blue_bits, alpha_bits;
/* For debugging only */
- if (_mesa_getenv("MESA_XSYNC")) {
+ if (getenv("MESA_XSYNC")) {
/* This makes debugging X easier.
* In your debugger, set a breakpoint on _XError to stop when an
* X protocol error is generated.
* the struct but we may need some of the information contained in it
* at a later time.
*/
- v->visinfo = (XVisualInfo *) malloc(sizeof(*visinfo));
+ v->visinfo = malloc(sizeof(*visinfo));
if(!v->visinfo) {
free(v);
return NULL;
memcpy(v->visinfo, visinfo, sizeof(*visinfo));
/* check for MESA_GAMMA environment variable */
- gamma = _mesa_getenv("MESA_GAMMA");
+ gamma = getenv("MESA_GAMMA");
if (gamma) {
v->RedGamma = v->GreenGamma = v->BlueGamma = 0.0;
sscanf( gamma, "%f %f %f", &v->RedGamma, &v->GreenGamma, &v->BlueGamma );
alpha_bits = v->mesa_visual.alphaBits;
}
- _mesa_initialize_visual( &v->mesa_visual,
- db_flag, stereo_flag,
- red_bits, green_bits,
- blue_bits, alpha_bits,
- depth_size,
- stencil_size,
- accum_red_size, accum_green_size,
- accum_blue_size, accum_alpha_size,
- 0 );
+ if (!_mesa_initialize_visual(&v->mesa_visual,
+ db_flag, stereo_flag,
+ red_bits, green_bits,
+ blue_bits, alpha_bits,
+ depth_size,
+ stencil_size,
+ accum_red_size, accum_green_size,
+ accum_blue_size, accum_alpha_size,
+ 0)) {
+ free(v->visinfo);
+ free(v);
+ return NULL;
+ }
/* XXX minor hack */
v->mesa_visual.level = level;
TNLcontext *tnl;
if (firstTime) {
- _glthread_INIT_MUTEX(_xmesa_lock);
+ mtx_init(&_xmesa_lock, mtx_plain);
firstTime = GL_FALSE;
}
}
_mesa_enable_sw_extensions(mesaCtx);
- _mesa_enable_1_3_extensions(mesaCtx);
- _mesa_enable_1_4_extensions(mesaCtx);
- _mesa_enable_1_5_extensions(mesaCtx);
- _mesa_enable_2_0_extensions(mesaCtx);
- _mesa_enable_2_1_extensions(mesaCtx);
- if (mesaCtx->Mesa_DXTn) {
- _mesa_enable_extension(mesaCtx, "GL_EXT_texture_compression_s3tc");
- _mesa_enable_extension(mesaCtx, "GL_S3_s3tc");
- }
- _mesa_enable_extension(mesaCtx, "GL_3DFX_texture_compression_FXT1");
+
#if ENABLE_EXT_timer_query
- _mesa_enable_extension(mesaCtx, "GL_EXT_timer_query");
+ mesaCtx->Extensions.EXT_timer_query = GL_TRUE;
#endif
/* finish up xmesa context initializations */
+ c->direct = GL_TRUE;
c->swapbytes = CHECK_BYTE_ORDER(v) ? GL_FALSE : GL_TRUE;
c->xm_visual = v;
c->xm_buffer = NULL; /* set later by XMesaMakeCurrent */
_mesa_meta_init(mesaCtx);
+ _mesa_override_extensions(mesaCtx);
_mesa_compute_version(mesaCtx);
/* Exec table initialization requires the version to be computed */
- _mesa_initialize_exec_table(mesaCtx);
+ _mesa_initialize_dispatch_tables(mesaCtx);
_mesa_initialize_vbo_vtxfmt(mesaCtx);
return c;
struct gl_context *ctx = xmctx ? &xmctx->mesa : NULL;
_mesa_resize_framebuffer(ctx, &(drawBuffer->mesa_buffer), width, height);
}
- drawBuffer->mesa_buffer.Initialized = GL_TRUE; /* XXX TEMPORARY? */
}
}
+Display *XMesaGetCurrentDisplay(void)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ XMesaContext xmctx = XMESA_CONTEXT(ctx);
+ return xmctx ? xmctx->display : NULL;
+}
+
+
GLboolean XMesaSetFXmode( GLint mode )
{
/* Copy Ximage (back buf) from client memory to server window */
#if defined(USE_XSHM)
if (b->shm) {
- /*_glthread_LOCK_MUTEX(_xmesa_lock);*/
+ /*mtx_lock(&_xmesa_lock);*/
XShmPutImage( b->xm_visual->display, b->frontxrb->drawable,
b->swapgc,
b->backxrb->ximage, 0, 0,
0, 0, b->mesa_buffer.Width, b->mesa_buffer.Height,
False );
- /*_glthread_UNLOCK_MUTEX(_xmesa_lock);*/
+ /*mtx_unlock(&_xmesa_lock);*/
}
else
#endif
{
- /*_glthread_LOCK_MUTEX(_xmesa_lock);*/
+ /*mtx_lock(&_xmesa_lock);*/
XMesaPutImage( b->xm_visual->display, b->frontxrb->drawable,
b->swapgc,
b->backxrb->ximage, 0, 0,
0, 0, b->mesa_buffer.Width, b->mesa_buffer.Height );
- /*_glthread_UNLOCK_MUTEX(_xmesa_lock);*/
+ /*mtx_unlock(&_xmesa_lock);*/
}
}
else if (b->backxrb->pixmap) {
/* Copy pixmap (back buf) to window (front buf) on server */
- /*_glthread_LOCK_MUTEX(_xmesa_lock);*/
+ /*mtx_lock(&_xmesa_lock);*/
XMesaCopyArea( b->xm_visual->display,
b->backxrb->pixmap, /* source drawable */
b->frontxrb->drawable, /* dest. drawable */
0, 0, b->mesa_buffer.Width, b->mesa_buffer.Height,
0, 0 /* dest region */
);
- /*_glthread_UNLOCK_MUTEX(_xmesa_lock);*/
+ /*mtx_unlock(&_xmesa_lock);*/
}
}
XSync( b->xm_visual->display, False );