Follow the GLX_SGIX_fbconfig spec and return the complete list of
[mesa.git] / src / glx / x11 / glxclient.h
index 57ff65cb8aaae913bc36908494f015496d43dd6d..4356ee8cf9c8fa6114ecff343279c5ca7bf94aae 100644 (file)
@@ -59,9 +59,7 @@
 #include "GL/glxproto.h"
 #include "GL/internal/glcore.h"
 #include "glapitable.h"
-#ifdef NEED_GL_FUNCS_WRAPPED
-#include "indirect.h"
-#endif
+#include "glxextensions.h"
 #ifdef XTHREADS
 #include "Xthreads.h"
 #endif
@@ -223,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 {
@@ -532,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.
     */
@@ -549,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) \
@@ -740,8 +659,15 @@ extern CARD8 __glXSetupForCommand(Display *dpy);
 ** Data conversion and packing support.
 */
 
+extern const GLuint __glXDefaultPixelStore[9];
+
+/* Send an image to the server using RenderLarge. */
+extern void __glXSendLargeImage(__GLXcontext *gc, GLint compsize, GLint dim,
+    GLint width, GLint height, GLint depth, GLenum format, GLenum type,
+    const GLvoid *src, GLubyte *pc, GLubyte *modes);
+
 /* Return the size, in bytes, of some pixel data */
-extern GLint __glImageSize(GLint, GLint, GLint, GLenum, GLenum);
+extern GLint __glImageSize(GLint, GLint, GLint, GLenum, GLenum, GLenum);
 
 /* Return the number of elements per group of a specified format*/
 extern GLint __glElementsPerGroup(GLenum format, GLenum type);
@@ -751,9 +677,6 @@ extern GLint __glElementsPerGroup(GLenum format, GLenum type);
 */
 extern GLint __glBytesPerElement(GLenum type);
 
-/* Return the k value for a given map target */
-extern GLint __glEvalComputeK(GLenum);
-
 /*
 ** Fill the transport buffer with the data from the users buffer,
 ** applying some of the pixel store modes (unpack modes) to the data