From fdb07636f2e6324c5250cd5ee97778b7f5933bea Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Tue, 22 Feb 2005 22:36:31 +0000 Subject: Added __glExtensionBiIsEnabled and __GLXcontext::gl_extension_bits. This enables libGL to query which extension are exported to applications. Refactored array-query functionality (from glGet*v) in src/glx/x11/single2.c. Massive re-write of indirect vertex array support. The most noticable effect is that glDrawElements now generates DrawArrays protocol. The side-effects (and the main reasons for the re-work) are that it is much easier to add support for new arrays (e.g., GL_VERTEX_ATTRIB_ARRAY, GL_WEIGHT_ARRAY_ARB, etc.) and it is much easier to add support for the new DrawArrays protocol (required to support ARB_vertex_buffer_object). These changes were primarilly tested with progs/demos/isosurf. --- src/glx/x11/glxclient.h | 114 ++++++++---------------------------------------- 1 file changed, 18 insertions(+), 96 deletions(-) (limited to 'src/glx/x11/glxclient.h') diff --git a/src/glx/x11/glxclient.h b/src/glx/x11/glxclient.h index d0cc12e5ffe..4356ee8cf9c 100644 --- a/src/glx/x11/glxclient.h +++ b/src/glx/x11/glxclient.h @@ -59,6 +59,7 @@ #include "GL/glxproto.h" #include "GL/internal/glcore.h" #include "glapitable.h" +#include "glxextensions.h" #ifdef XTHREADS #include "Xthreads.h" #endif @@ -220,110 +221,29 @@ typedef struct __GLXattributeRecDEPRECATED { __GLXvertArrayStateDEPRECATED vertArray; } __GLXattributeDEPRECATED; -typedef struct __GLXvertexArrayPointerStateRec { - void (*proc)(const void *); - void (*mtex_proc)(GLenum, const void *); - const GLubyte *ptr; - GLsizei skip; - GLint size; - GLenum type; - GLsizei stride; -} __GLXvertexArrayPointerState; - -/** - * Define which entries of \c __GLXvertArrayState::arrays match which - * vertex arrays in the client-state vector. These are only the one-of - * arrays. See the \c __GLXvertArrayState::arrays documentation for more - * details. - * - * \sa __GLXvertArrayState - */ -enum { - edgeFlag_ARRAY, /**< \c GL_EDGE_FLAG_ARRAY */ - index_ARRAY, /**< \c GL_INDEX_ARRAY */ - fogCoord_ARRAY, /**< \c GL_FOG_COORD_ARRAY */ - secondaryColor_ARRAY, /**< \c GL_SECONDARY_COLOR_ARRAY */ - color_ARRAY, /**< \c GL_COLOR_ARRAY */ - normal_ARRAY, /**< \c GL_NORMAL_ARRAY */ - - /** - * \c GL_VERTEX_ARRAY \b must be last! All of the code for emitting arrays - * and array elements is written based on the assumption that the vertex - * array is last. - */ - vertex_ARRAY, - - __GLX_MAX_ARRAYS /**< Place holder entry. */ -}; -#define ENABLE_ARRAY(state,a) \ - do { (state)->vertArray.enables |= (1U << (a ## _ARRAY)); } while( 0 ) -#define DISABLE_ARRAY(state,a) \ - do { (state)->vertArray.enables &= ~(1U << (a ## _ARRAY)); } while( 0 ) -#define IS_ARRAY_ENABLED_BY_INDEX(state, i) \ - (((state)->vertArray.enables & (1U << (i))) != 0) -#define IS_ARRAY_ENABLED(state, a) \ - IS_ARRAY_ENABLED_BY_INDEX(state, a ## _ARRAY) - -#define ENABLE_TEXARRAY(state,a) \ - do { (state)->vertArray.texture_enables |= (1U << a); } while( 0 ) -#define DISABLE_TEXARRAY(state,a) \ - do { (state)->vertArray.texture_enables &= ~(1U << a); } while( 0 ) -#define IS_TEXARRAY_ENABLED(state, a) \ - (((state)->vertArray.texture_enables & (1U << a)) != 0) +typedef struct __GLXattributeRec { + GLuint mask; -/** - * Client-side vertex array state. - */ -typedef struct __GLXvertArrayStateRec { /** - * Which client-side arrays are enabled? These are the flag bits for - * all of the non-texture coordinate arrays. + * Pixel storage state. Most of the pixel store mode state is kept + * here and used by the client code to manage the packing and + * unpacking of data sent to/received from the server. */ - GLuint enables; + __GLXpixelStoreMode storePack, storeUnpack; /** - * Which of the texture coordinate arrays are enabled? + * Is EXT_vertex_array / GL 1.1 DrawArrays protocol specifically + * disabled? */ - GLuint texture_enables; - + GLboolean NoDrawArraysProtocol; + /** - * State for "one-of" arrays. These are the arrays, such as - * GL_COLOR_ARRAY or GL_FOG_COORD_ARRAY for which there is only one - * array. There are also "many-of" arrays, such as - * GL_TEXTURE_COORD_ARRAY. + * Vertex Array storage state. The vertex array component + * state is stored here and is used to manage the packing of + * DrawArrays data sent to the server. */ - __GLXvertexArrayPointerState arrays[__GLX_MAX_ARRAYS]; - - __GLXvertexArrayPointerState texCoord[__GLX_MAX_TEXTURE_UNITS]; - - GLint maxElementsVertices; - GLint maxElementsIndices; - GLint activeTexture; -} __GLXvertArrayState; - -typedef struct __GLXattributeRec { - GLuint mask; - - /* - ** Pixel storage state. Most of the pixel store mode state is kept - ** here and used by the client code to manage the packing and - ** unpacking of data sent to/received from the server. - */ - __GLXpixelStoreMode storePack, storeUnpack; - - /* - ** Vertex Array storage state. The vertex array component - ** state is stored here and is used to manage the packing of - ** DrawArrays data sent to the server. - */ - __GLXvertArrayState vertArray; - - /** - * Is EXT_vertex_array / GL 1.1 DrawArrays protocol specifically - * disabled? - */ - GLboolean NoDrawArraysProtocol; + struct array_state_vector * array_state; } __GLXattribute; typedef struct __GLXattributeMachineRec { @@ -529,7 +449,7 @@ struct __GLXcontextRec { * drivers should NEVER use this data or even care that it exists. */ void * client_state_private; - + /** * Stored value for \c glXQueryContext attribute \c GLX_RENDER_TYPE. */ @@ -546,6 +466,8 @@ struct __GLXcontextRec { int server_major; /**< Major version number. */ int server_minor; /**< Minor version number. */ /*@}*/ + + char gl_extension_bits[ __GL_EXT_BYTES ]; }; #define __glXSetError(gc,code) \ -- cgit v1.2.3