aboutsummaryrefslogtreecommitdiffstats
path: root/src/glx/x11/glxclient.h
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2005-02-22 22:36:31 +0000
committerIan Romanick <[email protected]>2005-02-22 22:36:31 +0000
commitfdb07636f2e6324c5250cd5ee97778b7f5933bea (patch)
tree7914282adbac014b4d48b8ab78c03c73b6a72052 /src/glx/x11/glxclient.h
parentcb83f62e307be90532fcc58a0e5dd3e8cc7411b2 (diff)
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.
Diffstat (limited to 'src/glx/x11/glxclient.h')
-rw-r--r--src/glx/x11/glxclient.h114
1 files changed, 18 insertions, 96 deletions
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) \