X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fmain%2Fcontext.h;h=e7e0fda72ead811d259d178b2741ae337961dd78;hb=8dcfcad7a2598ba835930aac8f3fd6576e464c1c;hp=d6d7920bb4f9cba2de1fe41c51d8128e111b7b84;hpb=853bda3e7c4dfa7d8cc462729f6a3dce89e44963;p=mesa.git diff --git a/src/mesa/main/context.h b/src/mesa/main/context.h index d6d7920bb4f..e7e0fda72ea 100644 --- a/src/mesa/main/context.h +++ b/src/mesa/main/context.h @@ -1,29 +1,8 @@ -/** - * \file context.h - * Mesa context/visual/framebuffer management functions. - * - * There are three Mesa data types which are meant to be used by device - * drivers: - * - GLcontext: this contains the Mesa rendering state - * - GLvisual: this describes the color buffer (RGB vs. ci), whether or not - * there's a depth buffer, stencil buffer, etc. - * - GLframebuffer: contains pointers to the depth buffer, stencil buffer, - * accum buffer and alpha buffers. - * - * These types should be encapsulated by corresponding device driver - * data types. See xmesa.h and xmesaP.h for an example. - * - * In OOP terms, GLcontext, GLvisual, and GLframebuffer are base classes - * which the device driver must derive from. - * - * The following functions create and destroy these data types. - */ - /* * Mesa 3-D graphics library - * Version: 4.1 + * Version: 6.5.1 * - * Copyright (C) 1999-2001 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2006 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"), @@ -44,6 +23,28 @@ */ +/** + * \file context.h + * Mesa context and visual-related functions. + * + * There are three large Mesa data types/classes which are meant to be + * used by device drivers: + * - GLcontext: this contains the Mesa rendering state + * - GLvisual: this describes the color buffer (RGB vs. ci), whether or not + * there's a depth buffer, stencil buffer, etc. + * - GLframebuffer: contains pointers to the depth buffer, stencil buffer, + * accum buffer and alpha buffers. + * + * These types should be encapsulated by corresponding device driver + * data types. See xmesa.h and xmesaP.h for an example. + * + * In OOP terms, GLcontext, GLvisual, and GLframebuffer are base classes + * which the device driver must derive from. + * + * The following functions create and destroy these data types. + */ + + #ifndef CONTEXT_H #define CONTEXT_H @@ -53,8 +54,7 @@ #include "mtypes.h" -/**********************************************************************/ -/** \name Create/destroy a GLvisual. */ +/** \name Visual-related functions */ /*@{*/ extern GLvisual * @@ -98,50 +98,21 @@ _mesa_destroy_visual( GLvisual *vis ); /*@}*/ -/**********************************************************************/ -/** \name Create/destroy a GLframebuffer. */ -/*@{*/ - -extern GLframebuffer * -_mesa_create_framebuffer( const GLvisual *visual, - GLboolean softwareDepth, - GLboolean softwareStencil, - GLboolean softwareAccum, - GLboolean softwareAlpha ); - -extern void -_mesa_initialize_framebuffer( GLframebuffer *fb, - const GLvisual *visual, - GLboolean softwareDepth, - GLboolean softwareStencil, - GLboolean softwareAccum, - GLboolean softwareAlpha ); - -extern void -_mesa_free_framebuffer_data( GLframebuffer *buffer ); - -extern void -_mesa_destroy_framebuffer( GLframebuffer *buffer ); - -/*@}*/ - - -/**********************************************************************/ -/** \name Create/destroy a GLcontext. */ +/** \name Context-related functions */ /*@{*/ extern GLcontext * _mesa_create_context( const GLvisual *visual, GLcontext *share_list, - void *driver_ctx, - GLboolean direct ); + const struct dd_function_table *driverFunctions, + void *driverContext ); extern GLboolean _mesa_initialize_context( GLcontext *ctx, const GLvisual *visual, GLcontext *share_list, - void *driver_ctx, - GLboolean direct ); + const struct dd_function_table *driverFunctions, + void *driverContext ); extern void _mesa_free_context_data( GLcontext *ctx ); @@ -155,13 +126,11 @@ _mesa_copy_context(const GLcontext *src, GLcontext *dst, GLuint mask); extern void -_mesa_make_current( GLcontext *ctx, GLframebuffer *buffer ); - - -extern void -_mesa_make_current2( GLcontext *ctx, GLframebuffer *drawBuffer, - GLframebuffer *readBuffer ); +_mesa_make_current( GLcontext *ctx, GLframebuffer *drawBuffer, + GLframebuffer *readBuffer ); +extern GLboolean +_mesa_share_state(GLcontext *ctx, GLcontext *ctxToShare); extern GLcontext * _mesa_get_current_context(void); @@ -169,33 +138,7 @@ _mesa_get_current_context(void); /*@}*/ -/** - * Macro for declaration and fetching the current context. - * - * \param C local variable which will hold the current context. - * - * It should be used in the variable declaration area of a function: - * \code - * ... - * { - * GET_CURRENT_CONTEXT(ctx); - * ... - * \endcode - */ -#ifdef THREADS - -#define GET_CURRENT_CONTEXT(C) GLcontext *C = (GLcontext *) (_glapi_Context ? _glapi_Context : _glapi_get_context()) - -#else - -#define GET_CURRENT_CONTEXT(C) GLcontext *C = (GLcontext *) _glapi_Context - -#endif - - - -/**********************************************************************/ -/** \name OpenGL SI-style export functions. */ +/** \name OpenGL SI-style export functions */ /*@{*/ extern GLboolean @@ -242,14 +185,12 @@ _mesa_get_dispatch(GLcontext *ctx); -/**********************************************************************/ /** \name Miscellaneous */ /*@{*/ extern void _mesa_record_error( GLcontext *ctx, GLenum error ); - extern void GLAPIENTRY _mesa_Finish( void ); @@ -260,11 +201,12 @@ _mesa_Flush( void ); -/**********************************************************************/ -/** \name Macros for contexts/flushing. */ +/** + * \name Macros for flushing buffered rendering commands before state changes, + * checking if inside glBegin/glEnd, etc. + */ /*@{*/ - /** * Flush vertices. * @@ -313,7 +255,7 @@ do { \ #define ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, retval) \ do { \ if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) { \ - _mesa_error( ctx, GL_INVALID_OPERATION, "begin/end" ); \ + _mesa_error(ctx, GL_INVALID_OPERATION, "Inside glBegin/glEnd"); \ return retval; \ } \ } while (0) @@ -327,7 +269,7 @@ do { \ #define ASSERT_OUTSIDE_BEGIN_END(ctx) \ do { \ if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) { \ - _mesa_error( ctx, GL_INVALID_OPERATION, "begin/end" ); \ + _mesa_error(ctx, GL_INVALID_OPERATION, "Inside glBegin/glEnd"); \ return; \ } \ } while (0) @@ -357,17 +299,10 @@ do { \ FLUSH_VERTICES(ctx, 0); \ } while (0) - /*@}*/ -/** - * Macros to help evaluate current state conditions - */ - -/*@{*/ - /** * Is the secondary color needed? */ @@ -375,21 +310,19 @@ do { \ (((CTX)->Light.Enabled && \ (CTX)->Light.Model.ColorControl == GL_SEPARATE_SPECULAR_COLOR) \ || (CTX)->Fog.ColorSumEnabled \ - || ((CTX)->VertexProgram.Enabled && \ - ((CTX)->VertexProgram.Current->InputsRead & VERT_BIT_COLOR1)) \ - || ((CTX)->FragmentProgram.Enabled && \ - ((CTX)->FragmentProgram.Current->InputsRead & FRAG_BIT_COL1)) \ + || ((CTX)->VertexProgram._Enabled && \ + ((CTX)->VertexProgram.Current->Base.InputsRead & VERT_BIT_COLOR1)) \ + || ((CTX)->FragmentProgram._Enabled && \ + ((CTX)->FragmentProgram.Current->Base.InputsRead & FRAG_BIT_COL1)) \ ) /** - * Is two-sided lighting in effect? + * Is RGBA LogicOp enabled? */ -#define NEED_TWO_SIDED_LIGHTING(CTX) \ - (ctx->Light.Enabled && ctx->Light.Model.TwoSide) - - -/*@}*/ +#define RGBA_LOGICOP_ENABLED(CTX) \ + ((CTX)->Color.ColorLogicOpEnabled || \ + ((CTX)->Color.BlendEnabled && (CTX)->Color.BlendEquationRGB == GL_LOGIC_OP)) -#endif +#endif /* CONTEXT_H */