use BCOPY macro on FreeBSD
[mesa.git] / src / mesa / main / context.h
index 1da01fbb79b59a2b9882d5cb1bfee6681690f176..8e691445f1081ce26371b4c2097261f053764076 100644 (file)
@@ -1,10 +1,10 @@
-/* $Id: context.h,v 1.2 1999/11/11 01:22:25 brianp Exp $ */
+/* $Id: context.h,v 1.15 2000/03/31 01:05:51 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"
 
 
-#ifdef THREADS
-   /*
-    * A seperate GLcontext for each thread
-    */
-   extern GLcontext *gl_get_thread_context( void );
-
-#define GET_IMMEDIATE struct immediate *IM = (gl_get_thread_context())->input;
-#define SET_IMMEDIATE(ctx, im)         \
-do {                                   \
-   ctx->input = im;                    \
-} while (0)
-
-
-#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
-#define SET_IMMEDIATE(ctx, im)         \
-do {                                   \
-   ctx->input = im;                    \
-   CURRENT_INPUT = im;                 \
-} while (0)
-
-
-#endif
-
-
-
 /*
  * There are three Mesa datatypes which are meant to be used by device
  * drivers:
@@ -89,6 +57,25 @@ do {                                 \
  * the colorbuffer, depth buffer, stencil buffer and accum buffer which will
  * be used by the GL context and framebuffer.
  */
+extern GLvisual *
+_mesa_create_visual( GLboolean rgbFlag,
+                     GLboolean alphaFlag,
+                     GLboolean dbFlag,
+                     GLboolean stereoFlag,
+                     GLint redBits,
+                     GLint greenBits,
+                     GLint blueBits,
+                     GLint alphaBits,
+                     GLint indexBits,
+                     GLint depthBits,
+                     GLint stencilBits,
+                     GLint accumRedBits,
+                     GLint accumGreenBits,
+                     GLint accumBlueBits,
+                     GLint accumAlphaBits,
+                     GLint numSamples );
+
+/* this function is obsolete */
 extern GLvisual *gl_create_visual( GLboolean rgbFlag,
                                    GLboolean alphaFlag,
                                    GLboolean dbFlag,
@@ -102,7 +89,26 @@ extern GLvisual *gl_create_visual( GLboolean rgbFlag,
                                    GLint blueBits,
                                    GLint alphaBits );
 
-extern void gl_destroy_visual( GLvisual *vis );
+
+extern void
+_mesa_destroy_visual( GLvisual *vis );
+
+/*obsolete */ 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 );
+
 
 
 /*
@@ -114,45 +120,74 @@ extern GLcontext *gl_create_context( GLvisual *visual,
                                      void *driver_ctx,
                                      GLboolean direct);
 
+extern GLboolean gl_initialize_context_data( GLcontext *ctx,
+                                             GLvisual *visual,
+                                             GLcontext *share_list,
+                                             void *driver_ctx,
+                                             GLboolean direct );
+
+extern void gl_free_context_data( GLcontext *ctx );
+
 extern void gl_destroy_context( GLcontext *ctx );
 
-/* 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_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);
+
+
 /*
- * 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.
+ * Macros for fetching current context, input buffer, etc.
  */
-extern GLframebuffer *gl_create_framebuffer( GLvisual *visual );
+#ifdef THREADS
 
-extern void gl_destroy_framebuffer( GLframebuffer *buffer );
+#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;                    \
+} while (0)
 
+#else
 
-extern void gl_make_current( GLcontext *ctx, GLframebuffer *buffer );
+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;                    \
+   _mesa_CurrentInput = im;            \
+} while (0)
+
+#endif
 
-extern GLcontext *gl_get_current_context(void);
 
-extern void gl_copy_context(const GLcontext *src, GLcontext *dst, GLuint mask);
 
 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
  */
@@ -162,17 +197,25 @@ extern void gl_problem( const GLcontext *ctx, const char *s );
 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 );
+
+extern void
+_mesa_Flush( void );
+
 
 
-/* for debugging */
-extern void gl_print_state( const char *msg, GLuint state );
+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