bring in changes from 6.4 branch
[mesa.git] / src / glx / x11 / clientattrib.c
index 067295531124464ac3cd5954b7ea555d2cfc8b78..bfb263ced14848d89de666f411afc23fd78427cf 100644 (file)
 */
 
 #include <assert.h>
-#define NEED_GL_FUNCS_WRAPPED
 #include "glxclient.h"
+#include "indirect.h"
+#include "indirect_vertex_array.h"
 
 /*****************************************************************************/
 
-void glEnableClientState(GLenum array)
+static void
+do_enable_disable(GLenum array, GLboolean val )
 {
     __GLXcontext *gc = __glXGetCurrentContext();
     __GLXattribute * state = (__GLXattribute *)(gc->client_state_private);
+    unsigned index = 0;
 
-    switch (array) {
-       case GL_COLOR_ARRAY:
-           ENABLE_ARRAY(state, color);
-           break;
-       case GL_EDGE_FLAG_ARRAY:
-           ENABLE_ARRAY(state, edgeFlag);
-           break;
-       case GL_INDEX_ARRAY:
-           ENABLE_ARRAY(state, index);
-           break;
-       case GL_NORMAL_ARRAY:
-           ENABLE_ARRAY(state, normal);
-           break;
-       case GL_TEXTURE_COORD_ARRAY:
-           ENABLE_TEXARRAY(state, state->vertArray.activeTexture);
-           break;
-       case GL_VERTEX_ARRAY:
-           ENABLE_ARRAY(state, vertex);
-           break;
-       case GL_SECONDARY_COLOR_ARRAY:
-           ENABLE_ARRAY(state, secondaryColor);
-           break;
-       case GL_FOG_COORD_ARRAY:
-           ENABLE_ARRAY(state, fogCoord);
-           break;
-       default:
-           __glXSetError(gc, GL_INVALID_ENUM);
+    if ( array == GL_TEXTURE_COORD_ARRAY ) {
+       index = __glXGetActiveTextureUnit( state );
+    }
+
+    if ( ! __glXSetArrayEnable( state, array, index, val ) ) {
+       __glXSetError(gc, GL_INVALID_ENUM);
     }
 }
 
-void glDisableClientState(GLenum array)
+void __indirect_glEnableClientState(GLenum array)
 {
-    __GLXcontext *gc = __glXGetCurrentContext();
-    __GLXattribute * state = (__GLXattribute *)(gc->client_state_private);
+    do_enable_disable( array, GL_TRUE );
+}
 
-    switch (array) {
-       case GL_COLOR_ARRAY:
-           DISABLE_ARRAY(state, color);
-           break;
-       case GL_EDGE_FLAG_ARRAY:
-           DISABLE_ARRAY(state, edgeFlag);
-           break;
-       case GL_INDEX_ARRAY:
-           DISABLE_ARRAY(state, index);
-           break;
-       case GL_NORMAL_ARRAY:
-           DISABLE_ARRAY(state, normal);
-           break;
-       case GL_TEXTURE_COORD_ARRAY:
-           DISABLE_TEXARRAY(state, state->vertArray.activeTexture);
-           break;
-       case GL_VERTEX_ARRAY:
-           DISABLE_ARRAY(state, vertex);
-           break;
-       case GL_SECONDARY_COLOR_ARRAY:
-           DISABLE_ARRAY(state, secondaryColor);
-           break;
-       case GL_FOG_COORD_ARRAY:
-           DISABLE_ARRAY(state, fogCoord);
-           break;
-       default:
-           __glXSetError(gc, GL_INVALID_ENUM);
-    }
+void __indirect_glDisableClientState(GLenum array)
+{
+    do_enable_disable( array, GL_FALSE );
 }
 
 /************************************************************************/
 
-void glPushClientAttrib(GLuint mask)
+void __indirect_glPushClientAttrib(GLuint mask)
 {
     __GLXcontext *gc = __glXGetCurrentContext();
     __GLXattribute * state = (__GLXattribute *)(gc->client_state_private);
@@ -130,7 +87,7 @@ void glPushClientAttrib(GLuint mask)
            sp->storeUnpack = state->storeUnpack;
        }
        if (mask & GL_CLIENT_VERTEX_ARRAY_BIT) {
-           sp->vertArray = state->vertArray;
+           __glXPushArrayState( state );
        }
     } else {
        __glXSetError(gc, GL_STACK_OVERFLOW);
@@ -138,7 +95,7 @@ void glPushClientAttrib(GLuint mask)
     }
 }
 
-void glPopClientAttrib(void)
+void __indirect_glPopClientAttrib(void)
 {
     __GLXcontext *gc = __glXGetCurrentContext();
     __GLXattribute * state = (__GLXattribute *)(gc->client_state_private);
@@ -157,7 +114,7 @@ void glPopClientAttrib(void)
            state->storeUnpack = sp->storeUnpack;
        }
        if (mask & GL_CLIENT_VERTEX_ARRAY_BIT) {
-           state->vertArray = sp->vertArray;
+           __glXPopArrayState( state );
        }
 
        sp->mask = 0;
@@ -182,5 +139,3 @@ void __glFreeAttributeState(__GLXcontext *gc)
        }
     }
 }
-
-