-/* $Id: context.h,v 1.6 1999/12/17 12:21:39 brianp Exp $ */
+/* $Id: context.h,v 1.14 2000/03/19 01:10:11 brianp Exp $ */
/*
* Mesa 3-D graphics library
* Version: 3.3
*
- * Copyright (C) 1999 Brian Paul All Rights Reserved.
+ * Copyright (C) 1999-2000 Brian Paul All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
#define CONTEXT_H
+#include "glapi.h"
#include "types.h"
extern void gl_destroy_visual( GLvisual *vis );
+/*
+ * Create/destroy a GLframebuffer. A GLframebuffer is like a GLX drawable.
+ * It bundles up the depth buffer, stencil buffer and accum buffers into a
+ * single entity.
+ */
+extern GLframebuffer *gl_create_framebuffer( GLvisual *visual,
+ GLboolean softwareDepth,
+ GLboolean softwareStencil,
+ GLboolean softwareAccum,
+ GLboolean softwareAlpha );
+
+extern void gl_destroy_framebuffer( GLframebuffer *buffer );
+
+
+
/*
* Create/destroy a GLcontext. A GLcontext is like a GLX context. It
* contains the rendering state.
void *driver_ctx,
GLboolean direct);
-extern void gl_destroy_context( GLcontext *ctx );
+extern GLboolean gl_initialize_context_data( GLcontext *ctx,
+ GLvisual *visual,
+ GLcontext *share_list,
+ void *driver_ctx,
+ GLboolean direct );
-/* Called by the driver after both the context and driver are fully
- * initialized. Currently just reads the config file.
- */
-extern void gl_context_initialize( GLcontext *ctx );
+extern void gl_free_context_data( GLcontext *ctx );
-
-extern void gl_copy_context(const GLcontext *src, GLcontext *dst, GLuint mask);
+extern void gl_destroy_context( GLcontext *ctx );
-/*
- * Create/destroy a GLframebuffer. A GLframebuffer is like a GLX drawable.
- * It bundles up the depth buffer, stencil buffer and accum buffers into a
- * single entity.
- */
-extern GLframebuffer *gl_create_framebuffer( GLvisual *visual,
- GLboolean softwareDepth,
- GLboolean softwareStencil,
- GLboolean softwareAccum,
- GLboolean softwareAlpha );
+extern void gl_context_initialize( GLcontext *ctx );
-extern void gl_destroy_framebuffer( GLframebuffer *buffer );
+extern void gl_copy_context(const GLcontext *src, GLcontext *dst, GLuint mask);
extern void gl_make_current( GLcontext *ctx, GLframebuffer *buffer );
+
extern void gl_make_current2( GLcontext *ctx, GLframebuffer *drawBuffer,
GLframebuffer *readBuffer );
-extern GLcontext *gl_get_current_context(void);
+extern GLcontext *gl_get_current_context(void);
-#ifdef THREADS
/*
- * A seperate GLcontext for each thread
+ * Macros for fetching current context, input buffer, etc.
*/
-#define GET_CURRENT_CONTEXT(C) GLcontext *C = gl_get_current_context()
-#define GET_IMMEDIATE struct immediate *IM = (gl_get_current_context())->input;
+#ifdef THREADS
+
+#define GET_CURRENT_CONTEXT(C) GLcontext *C = (GLcontext *) (_glapi_Context ? _glapi_Context : _glapi_get_context())
+
+#define GET_IMMEDIATE struct immediate *IM = ((GLcontext *) (_glapi_Context ? _glapi_Context : _glapi_get_context()))->input
+
#define SET_IMMEDIATE(ctx, im) \
do { \
ctx->input = im; \
#else
-/*
- * All threads use same pointer to current context.
- */
-extern GLcontext *_mesa_current_context;
-extern struct immediate *CURRENT_INPUT;
-#define GET_CURRENT_CONTEXT(C) GLcontext *C = _mesa_current_context
-#define GET_IMMEDIATE struct immediate *IM = CURRENT_INPUT
+extern struct immediate *_mesa_CurrentInput;
+
+#define GET_CURRENT_CONTEXT(C) GLcontext *C = (GLcontext *) _glapi_Context
+
+#define GET_IMMEDIATE struct immediate *IM = _mesa_CurrentInput
+
#define SET_IMMEDIATE(ctx, im) \
do { \
ctx->input = im; \
- CURRENT_INPUT = im; \
+ _mesa_CurrentInput = im; \
} while (0)
#endif
extern void
_mesa_swapbuffers(GLcontext *ctx);
+
extern struct _glapi_table *
_mesa_get_dispatch(GLcontext *ctx);
-/*
- * GL_MESA_resize_buffers extension
- */
-extern void _mesa_ResizeBuffersMESA( void );
-
-
-
/*
* Miscellaneous
*/
extern void gl_warning( const GLcontext *ctx, const char *s );
extern void gl_error( GLcontext *ctx, GLenum error, const char *s );
+
extern void gl_compile_error( GLcontext *ctx, GLenum error, const char *s );
-extern void gl_update_state( GLcontext *ctx );
+extern void
+_mesa_Finish( void );
-/* for debugging */
-extern void gl_print_state( const char *msg, GLuint state );
+extern void
+_mesa_Flush( void );
+
+
+
+extern void
+_mesa_init_no_op_table(struct _glapi_table *exec);
+
+extern void
+_mesa_init_exec_table(struct _glapi_table *exec);
-/* for debugging */
-extern void gl_print_enable_flags( const char *msg, GLuint flags );
#ifdef PROFILE