summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/context.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mesa/main/context.c')
-rw-r--r--src/mesa/main/context.c209
1 files changed, 117 insertions, 92 deletions
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 551327254f3..a66bb13972f 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -1,4 +1,4 @@
-/* $Id: context.c,v 1.89 2000/09/26 15:27:22 brianp Exp $ */
+/* $Id: context.c,v 1.90 2000/09/26 20:53:53 brianp Exp $ */
/*
* Mesa 3-D graphics library
@@ -29,23 +29,21 @@
#include "all.h"
#else
#include "glheader.h"
-#include "accum.h"
-#include "alphabuf.h"
+#include "buffers.h"
#include "clip.h"
#include "colortab.h"
#include "context.h"
#include "cva.h"
-#include "depth.h"
#include "dlist.h"
#include "eval.h"
#include "enums.h"
#include "extensions.h"
#include "fog.h"
#include "get.h"
-#include "glapi.h"
#include "glapinoop.h"
#include "glthread.h"
#include "hash.h"
+#include "imports.h"
#include "light.h"
#include "macros.h"
#include "matrix.h"
@@ -55,31 +53,94 @@
#include "pipeline.h"
#include "shade.h"
#include "simple_list.h"
-#include "stencil.h"
#include "stages.h"
#include "state.h"
#include "translate.h"
#include "teximage.h"
#include "texobj.h"
-#include "texstate.h"
#include "texture.h"
#include "types.h"
#include "varray.h"
#include "vb.h"
-#include "vbcull.h"
#include "vbrender.h"
#include "vbxform.h"
#include "vertices.h"
#include "xform.h"
#endif
-
#if defined(MESA_TRACE)
#include "Trace/tr_context.h"
#include "Trace/tr_wrapper.h"
#endif
+
+/**********************************************************************/
+/***** OpenGL SI-style interface (new in Mesa 3.5) *****/
+/**********************************************************************/
+
+static GLboolean
+_mesa_DestroyContext(__GLcontext *gc)
+{
+ if (gc) {
+ _mesa_free_context_data(gc);
+ (*gc->imports.free)(gc, gc);
+ }
+ return GL_TRUE;
+}
+
+
+/* exported OpenGL SI interface */
+__GLcontext *
+__glCoreCreateContext(__GLimports *imports, __GLcontextModes *modes)
+{
+ GLcontext *ctx;
+
+ ctx = (GLcontext *) (*imports->calloc)(0, 1, sizeof(GLcontext));
+ if (ctx == NULL) {
+ return NULL;
+ }
+ ctx->imports = *imports;
+
+ _mesa_initialize_visual(&ctx->Visual,
+ modes->rgbMode,
+ modes->doubleBufferMode,
+ modes->stereoMode,
+ modes->redBits,
+ modes->greenBits,
+ modes->blueBits,
+ modes->alphaBits,
+ modes->indexBits,
+ modes->depthBits,
+ modes->stencilBits,
+ modes->accumRedBits,
+ modes->accumGreenBits,
+ modes->accumBlueBits,
+ modes->accumAlphaBits,
+ 0);
+
+ _mesa_initialize_context(ctx, &ctx->Visual, NULL, imports->wscx, GL_FALSE);
+
+ ctx->exports.destroyContext = _mesa_DestroyContext;
+
+ return ctx;
+}
+
+
+/* exported OpenGL SI interface */
+void
+__glCoreNopDispatch(void)
+{
+#if 0
+ /* SI */
+ __gl_dispatch = __glNopDispatchState;
+#else
+ /* Mesa */
+ _glapi_set_dispatch(NULL);
+#endif
+}
+
+
/**********************************************************************/
/***** Context and Thread management *****/
/**********************************************************************/
@@ -138,7 +199,7 @@ _mesa_create_visual( GLboolean rgbFlag,
indexBits, depthBits, stencilBits,
accumRedBits, accumGreenBits,
accumBlueBits, accumAlphaBits,
- numSamples )) {
+ numSamples)) {
FREE(vis);
return NULL;
}
@@ -238,29 +299,6 @@ _mesa_initialize_visual( GLvisual *vis,
}
-/* This function should no longer be used. Use _mesa_create_visual() instead */
-GLvisual *
-gl_create_visual( GLboolean rgbFlag,
- GLboolean alphaFlag,
- GLboolean dbFlag,
- GLboolean stereoFlag,
- GLint depthBits,
- GLint stencilBits,
- GLint accumBits,
- GLint indexBits,
- GLint redBits,
- GLint greenBits,
- GLint blueBits,
- GLint alphaBits )
-{
- (void) alphaFlag;
- return _mesa_create_visual(rgbFlag, dbFlag, stereoFlag,
- redBits, greenBits, blueBits, alphaBits,
- indexBits, depthBits, stencilBits,
- accumBits, accumBits, accumBits, accumBits, 0);
-}
-
-
void
_mesa_destroy_visual( GLvisual *vis )
{
@@ -268,15 +306,6 @@ _mesa_destroy_visual( GLvisual *vis )
}
-/* obsolete */
-void
-gl_destroy_visual( GLvisual *vis )
-{
- _mesa_destroy_visual(vis);
-}
-
-
-
/**********************************************************************/
/***** GL Framebuffer allocation/destruction *****/
/**********************************************************************/
@@ -295,11 +324,11 @@ gl_destroy_visual( GLvisual *vis )
* Return: pointer to new GLframebuffer struct or NULL if error.
*/
GLframebuffer *
-gl_create_framebuffer( GLvisual *visual,
- GLboolean softwareDepth,
- GLboolean softwareStencil,
- GLboolean softwareAccum,
- GLboolean softwareAlpha )
+_mesa_create_framebuffer( GLvisual *visual,
+ GLboolean softwareDepth,
+ GLboolean softwareStencil,
+ GLboolean softwareAccum,
+ GLboolean softwareAlpha )
{
GLframebuffer *buffer = CALLOC_STRUCT(gl_frame_buffer);
assert(visual);
@@ -314,7 +343,7 @@ gl_create_framebuffer( GLvisual *visual,
/*
* Initialize a GLframebuffer object.
- * Input: See gl_create_framebuffer() above.
+ * Input: See _mesa_create_framebuffer() above.
*/
void
_mesa_initialize_framebuffer( GLframebuffer *buffer,
@@ -357,7 +386,7 @@ _mesa_initialize_framebuffer( GLframebuffer *buffer,
* Free a framebuffer struct and its buffers.
*/
void
-gl_destroy_framebuffer( GLframebuffer *buffer )
+_mesa_destroy_framebuffer( GLframebuffer *buffer )
{
if (buffer) {
if (buffer->DepthBuffer) {
@@ -969,8 +998,6 @@ init_attrib_groups( GLcontext *ctx )
ctx->MinMax.Min[BCOMP] = 1000; ctx->MinMax.Max[BCOMP] = -1000;
ctx->MinMax.Min[ACOMP] = 1000; ctx->MinMax.Max[ACOMP] = -1000;
-
-
/* Pipeline */
gl_pipeline_init( ctx );
gl_cva_init( ctx );
@@ -1179,8 +1206,8 @@ init_attrib_groups( GLcontext *ctx )
#define Sz 10
#define Tz 14
- ctx->Viewport.WindowMap.m[Sz] = 0.5 * ctx->Visual->DepthMaxF;
- ctx->Viewport.WindowMap.m[Tz] = 0.5 * ctx->Visual->DepthMaxF;
+ ctx->Viewport.WindowMap.m[Sz] = 0.5 * ctx->Visual.DepthMaxF;
+ ctx->Viewport.WindowMap.m[Tz] = 0.5 * ctx->Visual.DepthMaxF;
#undef Sz
#undef Tz
@@ -1379,7 +1406,6 @@ alloc_proxy_textures( GLcontext *ctx )
}
-
/*
* Initialize a GLcontext struct. This includes allocating all the
* other structs and arrays which hang off of the context by pointers.
@@ -1398,8 +1424,16 @@ _mesa_initialize_context( GLcontext *ctx,
/* misc one-time initializations */
one_time_init();
+ /**
+ ** OpenGL SI stuff
+ **/
+ if (!ctx->imports.malloc) {
+ _mesa_InitDefaultImports(&ctx->imports, driver_ctx, NULL);
+ }
+ /* exports are setup by the device driver */
+
ctx->DriverCtx = driver_ctx;
- ctx->Visual = visual;
+ ctx->Visual = *visual;
ctx->DrawBuffer = NULL;
ctx->ReadBuffer = NULL;
@@ -1533,13 +1567,13 @@ _mesa_initialize_context( GLcontext *ctx,
* Input: visual - a GLvisual pointer
* sharelist - another context to share display lists with or NULL
* driver_ctx - pointer to device driver's context state struct
- * Return: pointer to a new gl_context struct or NULL if error.
+ * Return: pointer to a new __GLcontextRec or NULL if error.
*/
GLcontext *
-gl_create_context( GLvisual *visual,
- GLcontext *share_list,
- void *driver_ctx,
- GLboolean direct )
+_mesa_create_context( GLvisual *visual,
+ GLcontext *share_list,
+ void *driver_ctx,
+ GLboolean direct )
{
GLcontext *ctx = (GLcontext *) CALLOC( sizeof(GLcontext) );
if (!ctx) {
@@ -1562,14 +1596,14 @@ gl_create_context( GLvisual *visual,
* But don't free() the GLcontext struct itself!
*/
void
-gl_free_context_data( GLcontext *ctx )
+_mesa_free_context_data( GLcontext *ctx )
{
struct gl_shine_tab *s, *tmps;
GLuint i, j;
/* if we're destroying the current context, unbind it first */
- if (ctx == gl_get_current_context()) {
- gl_make_current(NULL, NULL);
+ if (ctx == _mesa_get_current_context()) {
+ _mesa_make_current(NULL, NULL);
}
gl_matrix_dtr( &ctx->ModelView );
@@ -1675,10 +1709,10 @@ gl_free_context_data( GLcontext *ctx )
* Destroy a GLcontext structure.
*/
void
-gl_destroy_context( GLcontext *ctx )
+_mesa_destroy_context( GLcontext *ctx )
{
if (ctx) {
- gl_free_context_data(ctx);
+ _mesa_free_context_data(ctx);
FREE( (void *) ctx );
}
}
@@ -1690,7 +1724,7 @@ gl_destroy_context( GLcontext *ctx )
* initialized. Currently just reads the config file.
*/
void
-gl_context_initialize( GLcontext *ctx )
+_mesa_context_initialize( GLcontext *ctx )
{
gl_read_config_file( ctx );
}
@@ -1704,7 +1738,7 @@ gl_context_initialize( GLcontext *ctx )
* mask - bitwise OR of GL_*_BIT flags
*/
void
-gl_copy_context( const GLcontext *src, GLcontext *dst, GLuint mask )
+_mesa_copy_context( const GLcontext *src, GLcontext *dst, GLuint mask )
{
if (mask & GL_ACCUM_BUFFER_BIT) {
MEMCPY( &dst->Accum, &src->Accum, sizeof(struct gl_accum_attrib) );
@@ -1779,9 +1813,10 @@ gl_copy_context( const GLcontext *src, GLcontext *dst, GLuint mask )
/*
* Set the current context, binding the given frame buffer to the context.
*/
-void gl_make_current( GLcontext *newCtx, GLframebuffer *buffer )
+void
+_mesa_make_current( GLcontext *newCtx, GLframebuffer *buffer )
{
- gl_make_current2( newCtx, buffer, buffer );
+ _mesa_make_current2( newCtx, buffer, buffer );
}
@@ -1789,8 +1824,9 @@ void gl_make_current( GLcontext *newCtx, GLframebuffer *buffer )
* Bind the given context to the given draw-buffer and read-buffer
* and make it the current context for this thread.
*/
-void gl_make_current2( GLcontext *newCtx, GLframebuffer *drawBuffer,
- GLframebuffer *readBuffer )
+void
+_mesa_make_current2( GLcontext *newCtx, GLframebuffer *drawBuffer,
+ GLframebuffer *readBuffer )
{
#if 0
GLcontext *oldCtx = gl_get_context();
@@ -1798,7 +1834,7 @@ void gl_make_current2( GLcontext *newCtx, GLframebuffer *drawBuffer,
/* Flush the old context
*/
if (oldCtx) {
- ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(oldCtx, "gl_make_current");
+ ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(oldCtx, "_mesa_make_current");
/* unbind frame buffers from context */
if (oldCtx->DrawBuffer) {
@@ -1816,7 +1852,7 @@ void gl_make_current2( GLcontext *newCtx, GLframebuffer *drawBuffer,
_glapi_check_multithread();
_glapi_set_context((void *) newCtx);
- ASSERT(gl_get_current_context() == newCtx);
+ ASSERT(_mesa_get_current_context() == newCtx);
if (newCtx) {
SET_IMMEDIATE(newCtx, newCtx->input);
_glapi_set_dispatch(newCtx->CurrentDispatch);
@@ -1825,7 +1861,7 @@ void gl_make_current2( GLcontext *newCtx, GLframebuffer *drawBuffer,
_glapi_set_dispatch(NULL); /* none current */
}
- if (MESA_VERBOSE) fprintf(stderr, "gl_make_current()\n");
+ if (MESA_VERBOSE) fprintf(stderr, "_mesa_make_current()\n");
if (newCtx && drawBuffer && readBuffer) {
/* TODO: check if newCtx and buffer's visual match??? */
@@ -1868,7 +1904,8 @@ void gl_make_current2( GLcontext *newCtx, GLframebuffer *drawBuffer,
* This isn't the fastest way to get the current context.
* If you need speed, see the GET_CURRENT_CONTEXT() macro in context.h
*/
-GLcontext *gl_get_current_context( void )
+GLcontext *
+_mesa_get_current_context( void )
{
return (GLcontext *) _glapi_get_context();
}
@@ -1923,23 +1960,10 @@ void gl_problem( const GLcontext *ctx, const char *s )
* something illogical or if there's likely a bug in their program
* (like enabled depth testing without a depth buffer).
*/
-void gl_warning( const GLcontext *ctx, const char *s )
+void
+_mesa_warning( const GLcontext *ctx, const char *s )
{
- GLboolean debug;
-#ifdef DEBUG
- debug = GL_TRUE;
-#else
- if (getenv("MESA_DEBUG")) {
- debug = GL_TRUE;
- }
- else {
- debug = GL_FALSE;
- }
-#endif
- if (debug) {
- fprintf( stderr, "Mesa warning: %s\n", s );
- }
- (void) ctx;
+ (*ctx->imports.warning)((__GLcontext *) ctx, (char *) s);
}
@@ -1947,7 +1971,8 @@ void gl_warning( const GLcontext *ctx, const char *s )
/*
* Compile an error into current display list.
*/
-void gl_compile_error( GLcontext *ctx, GLenum error, const char *s )
+void
+_mesa_compile_error( GLcontext *ctx, GLenum error, const char *s )
{
if (ctx->CompileFlag)
gl_save_error( ctx, error, s );