init secondary color to (0,0,0,1). remove some redundant initializations.
[mesa.git] / src / mesa / main / get.c
index 89281d22465225d049cff6c2d4c00858281b33d2..723c48ce3c9802a0952033983eabc058e32501fc 100644 (file)
@@ -5,9 +5,9 @@
 
 /*
  * Mesa 3-D graphics library
- * Version:  5.1
+ * Version:  6.0
  *
- * Copyright (C) 1999-2003  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2004  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"),
  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  */
 
+/*
+ * Regarding GL_NV_light_max_exponent:
+ *
+ * Portions of this software may use or implement intellectual
+ * property owned and licensed by NVIDIA Corporation. NVIDIA disclaims
+ * any and all warranties with respect to such intellectual property,
+ * including any use thereof or modifications thereto.
+ */
 
 #include "glheader.h"
 #include "colormac.h"
 
 /* Check if named extension is enabled, if not generate error and return */
 
-#define CHECK_EXTENSION_B(EXTNAME, PNAME)                      \
-   if (!ctx->Extensions.EXTNAME) {                             \
+#define CHECK1(E1, str, PNAME)                                 \
+   if (!ctx->Extensions.E1) {                                  \
       _mesa_error(ctx, GL_INVALID_VALUE,                       \
-                  "glGetBooleanv(0x%x)", (int) PNAME);         \
+                  "glGet" str "v(0x%x)", (int) PNAME);         \
       return;                                                  \
-   }   
-
-#define CHECK_EXTENSION_I(EXTNAME, PNAME)                      \
-   if (!ctx->Extensions.EXTNAME) {                             \
+   }
+    
+#define CHECK2(E1, E2, str, PNAME)                             \
+   if (!ctx->Extensions.E1 && !ctx->Extensions.E2) {           \
       _mesa_error(ctx, GL_INVALID_VALUE,                       \
-                  "glGetIntegerv(0x%x)", (int) PNAME);         \
+                  "glGet" str "v(0x%x)", (int) PNAME);         \
       return;                                                  \
-   }   
+   }
+    
+#define CHECK_EXTENSION_B(EXTNAME, PNAME)                      \
+   CHECK1(EXTNAME, "Boolean", PNAME )
+
+#define CHECK_EXTENSION_I(EXTNAME, PNAME)                      \
+   CHECK1(EXTNAME, "Integer", PNAME )
 
 #define CHECK_EXTENSION_F(EXTNAME, PNAME)                      \
-   if (!ctx->Extensions.EXTNAME) {                             \
-      _mesa_error(ctx, GL_INVALID_VALUE,                       \
-                  "glGetFloatv(0x%x)", (int) PNAME);           \
-      return;                                                  \
-   }   
+   CHECK1(EXTNAME, "Float", PNAME )
 
 #define CHECK_EXTENSION_D(EXTNAME, PNAME)                      \
-   if (!ctx->Extensions.EXTNAME) {                             \
-      _mesa_error(ctx, GL_INVALID_VALUE,                       \
-                  "glGetDoublev(0x%x)", (int) PNAME);          \
-      return;                                                  \
-   }   
+   CHECK1(EXTNAME, "Double", PNAME )
+
+#define CHECK_EXTENSION2_B(EXT1, EXT2, PNAME)                  \
+   CHECK2(EXT1, EXT2, "Boolean", PNAME)
+
+#define CHECK_EXTENSION2_I(EXT1, EXT2, PNAME)                  \
+   CHECK2(EXT1, EXT2, "Integer", PNAME)
+
+#define CHECK_EXTENSION2_F(EXT1, EXT2, PNAME)                  \
+   CHECK2(EXT1, EXT2, "Float", PNAME)
 
+#define CHECK_EXTENSION2_D(EXT1, EXT2, PNAME)                  \
+   CHECK2(EXT1, EXT2, "Double", PNAME)
 
 
 
@@ -124,12 +141,13 @@ pixel_texgen_mode(const GLcontext *ctx)
  * otherwise gets the specified parameter from the current context, converting
  * it value into GLboolean.
  */
-void
+void GLAPIENTRY
 _mesa_GetBooleanv( GLenum pname, GLboolean *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    GLuint i;
-   GLuint texUnit = ctx->Texture.CurrentUnit;
+   const GLuint clientUnit = ctx->Array.ActiveTexture;
+   const GLuint texUnit = ctx->Texture.CurrentUnit;
    const struct gl_texture_unit *textureUnit = &ctx->Texture.Unit[texUnit];
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
@@ -217,8 +235,11 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
       case GL_BLEND_DST_ALPHA_EXT:
          *params = ENUM_TO_BOOL(ctx->Color.BlendDstA);
          break;
-      case GL_BLEND_EQUATION_EXT:
-        *params = ENUM_TO_BOOL( ctx->Color.BlendEquation );
+      case GL_BLEND_EQUATION:
+        *params = ENUM_TO_BOOL( ctx->Color.BlendEquationRGB );
+        break;
+      case GL_BLEND_EQUATION_ALPHA_EXT:
+        *params = ENUM_TO_BOOL( ctx->Color.BlendEquationA );
         break;
       case GL_BLEND_COLOR_EXT:
         params[0] = FLOAT_TO_BOOL( ctx->Color.BlendColor[0] );
@@ -285,7 +306,7 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
          break;
       case GL_CURRENT_INDEX:
         FLUSH_CURRENT(ctx, 0);
-         *params = INT_TO_BOOL(ctx->Current.Index);
+         *params = FLOAT_TO_BOOL(ctx->Current.Index);
          break;
       case GL_CURRENT_NORMAL:
         FLUSH_CURRENT(ctx, 0);
@@ -489,7 +510,7 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
         *params = INT_TO_BOOL(ctx->List.ListBase);
         break;
       case GL_LIST_INDEX:
-        *params = INT_TO_BOOL( ctx->CurrentListNum );
+        *params = INT_TO_BOOL( ctx->ListState.CurrentListNum );
         break;
       case GL_LIST_MODE:
          if (!ctx->CompileFlag)
@@ -994,16 +1015,16 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
          *params = INT_TO_BOOL(0);
          break;
       case GL_TEXTURE_COORD_ARRAY:
-         *params = ctx->Array.TexCoord[texUnit].Enabled;
+         *params = ctx->Array.TexCoord[clientUnit].Enabled;
          break;
       case GL_TEXTURE_COORD_ARRAY_SIZE:
-         *params = INT_TO_BOOL(ctx->Array.TexCoord[texUnit].Size);
+         *params = INT_TO_BOOL(ctx->Array.TexCoord[clientUnit].Size);
          break;
       case GL_TEXTURE_COORD_ARRAY_TYPE:
-         *params = ENUM_TO_BOOL(ctx->Array.TexCoord[texUnit].Type);
+         *params = ENUM_TO_BOOL(ctx->Array.TexCoord[clientUnit].Type);
          break;
       case GL_TEXTURE_COORD_ARRAY_STRIDE:
-         *params = INT_TO_BOOL(ctx->Array.TexCoord[texUnit].Stride);
+         *params = INT_TO_BOOL(ctx->Array.TexCoord[clientUnit].Stride);
          break;
       case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
          *params = INT_TO_BOOL(0);
@@ -1030,7 +1051,7 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
          break;
       case GL_CLIENT_ACTIVE_TEXTURE_ARB:
          CHECK_EXTENSION_B(ARB_multitexture, pname);
-         *params = INT_TO_BOOL(GL_TEXTURE0_ARB + ctx->Array.ActiveTexture);
+         *params = INT_TO_BOOL(GL_TEXTURE0_ARB + clientUnit);
          break;
 
       /* GL_ARB_texture_cube_map */
@@ -1362,7 +1383,7 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
 
       /* GL_NV_point_sprite */
       case GL_POINT_SPRITE_NV:
-         CHECK_EXTENSION_B(NV_point_sprite, pname);
+         CHECK_EXTENSION2_B(NV_point_sprite, ARB_point_sprite, pname);
          *params = ctx->Point.PointSprite;
          break;
       case GL_POINT_SPRITE_R_MODE_NV:
@@ -1548,47 +1569,44 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
 #if FEATURE_ARB_vertex_buffer_object
       case GL_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.ArrayBufferBinding);
+         *params = INT_TO_BOOL(ctx->Array.ArrayBufferObj->Name);
          break;
       case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.VertexArrayBufferBinding);
+         *params = INT_TO_BOOL(ctx->Array.Vertex.BufferObj->Name);
          break;
       case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.NormalArrayBufferBinding);
+         *params = INT_TO_BOOL(ctx->Array.Normal.BufferObj->Name);
          break;
       case GL_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.ColorArrayBufferBinding);
+         *params = INT_TO_BOOL(ctx->Array.Color.BufferObj->Name);
          break;
       case GL_INDEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.IndexArrayBufferBinding);
+         *params = INT_TO_BOOL(ctx->Array.Index.BufferObj->Name);
          break;
       case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.TextureArrayBufferBinding);
+         *params = INT_TO_BOOL(ctx->Array.TexCoord[clientUnit].BufferObj->Name);
          break;
       case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.EdgeFlagArrayBufferBinding);
+         *params = INT_TO_BOOL(ctx->Array.EdgeFlag.BufferObj->Name);
          break;
       case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.SecondaryColorArrayBufferBinding);
+         *params = INT_TO_BOOL(ctx->Array.SecondaryColor.BufferObj->Name);
          break;
       case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.FogCoordArrayBufferBinding);
-         break;
-      case GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB:
-         CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.WeightArrayBufferBinding);
+         *params = INT_TO_BOOL(ctx->Array.FogCoord.BufferObj->Name);
          break;
+      /*case GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB: - not supported */
       case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_B(ARB_vertex_buffer_object, pname);
-         *params = INT_TO_BOOL(ctx->Array.ElementArrayBufferBinding);
+         *params = INT_TO_BOOL(ctx->Array.ElementArrayBufferObj->Name);
          break;
 #endif
 
@@ -1669,12 +1687,13 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
  * otherwise gets the specified parameter from the current context, converting
  * it value into GLdouble.
  */
-void
+void GLAPIENTRY
 _mesa_GetDoublev( GLenum pname, GLdouble *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    GLuint i;
-   GLuint texUnit = ctx->Texture.CurrentUnit;
+   const GLuint clientUnit = ctx->Array.ActiveTexture;
+   const GLuint texUnit = ctx->Texture.CurrentUnit;
    const struct gl_texture_unit *textureUnit = &ctx->Texture.Unit[texUnit];
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
@@ -1761,8 +1780,11 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params )
       case GL_BLEND_DST_ALPHA_EXT:
          *params = ENUM_TO_DOUBLE(ctx->Color.BlendDstA);
          break;
-      case GL_BLEND_EQUATION_EXT:
-        *params = ENUM_TO_DOUBLE(ctx->Color.BlendEquation);
+      case GL_BLEND_EQUATION:
+        *params = ENUM_TO_DOUBLE(ctx->Color.BlendEquationRGB);
+        break;
+      case GL_BLEND_EQUATION_ALPHA_EXT:
+        *params = ENUM_TO_DOUBLE(ctx->Color.BlendEquationA);
         break;
       case GL_BLEND_COLOR_EXT:
         params[0] = (GLdouble) ctx->Color.BlendColor[0];
@@ -2033,7 +2055,7 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params )
         *params = (GLdouble) ctx->List.ListBase;
         break;
       case GL_LIST_INDEX:
-        *params = (GLdouble) ctx->CurrentListNum;
+        *params = (GLdouble) ctx->ListState.CurrentListNum;
         break;
       case GL_LIST_MODE:
          if (!ctx->CompileFlag)
@@ -2535,16 +2557,16 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params )
          *params = 0.0;
          break;
       case GL_TEXTURE_COORD_ARRAY:
-         *params = (GLdouble) ctx->Array.TexCoord[texUnit].Enabled;
+         *params = (GLdouble) ctx->Array.TexCoord[clientUnit].Enabled;
          break;
       case GL_TEXTURE_COORD_ARRAY_SIZE:
-         *params = (GLdouble) ctx->Array.TexCoord[texUnit].Size;
+         *params = (GLdouble) ctx->Array.TexCoord[clientUnit].Size;
          break;
       case GL_TEXTURE_COORD_ARRAY_TYPE:
-         *params = ENUM_TO_DOUBLE(ctx->Array.TexCoord[texUnit].Type);
+         *params = ENUM_TO_DOUBLE(ctx->Array.TexCoord[clientUnit].Type);
          break;
       case GL_TEXTURE_COORD_ARRAY_STRIDE:
-         *params = (GLdouble) ctx->Array.TexCoord[texUnit].Stride;
+         *params = (GLdouble) ctx->Array.TexCoord[clientUnit].Stride;
          break;
       case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
          *params = 0.0;
@@ -2571,7 +2593,7 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params )
          break;
       case GL_CLIENT_ACTIVE_TEXTURE_ARB:
          CHECK_EXTENSION_D(ARB_multitexture, pname);
-         *params = (GLdouble) (GL_TEXTURE0_ARB + ctx->Array.ActiveTexture);
+         *params = (GLdouble) (GL_TEXTURE0_ARB + clientUnit);
          break;
 
       /* GL_ARB_texture_cube_map */
@@ -2903,11 +2925,11 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params )
 
       /* GL_NV_point_sprite */
       case GL_POINT_SPRITE_NV:
-         CHECK_EXTENSION_B(NV_point_sprite, pname);
+         CHECK_EXTENSION2_D(NV_point_sprite, ARB_point_sprite, pname);
          *params = (GLdouble) ctx->Point.PointSprite;
          break;
       case GL_POINT_SPRITE_R_MODE_NV:
-         CHECK_EXTENSION_B(NV_point_sprite, pname);
+         CHECK_EXTENSION_D(NV_point_sprite, pname);
          *params = (GLdouble) ctx->Point.SpriteRMode;
          break;
 
@@ -3087,47 +3109,44 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params )
 #if FEATURE_ARB_vertex_buffer_object
       case GL_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.ArrayBufferBinding;
+         *params = (GLdouble) ctx->Array.ArrayBufferObj->Name;
          break;
       case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.VertexArrayBufferBinding;
+         *params = (GLdouble) ctx->Array.Vertex.BufferObj->Name;
          break;
       case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.NormalArrayBufferBinding;
+         *params = (GLdouble) ctx->Array.Normal.BufferObj->Name;
          break;
       case GL_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.ColorArrayBufferBinding;
+         *params = (GLdouble) ctx->Array.Color.BufferObj->Name;
          break;
       case GL_INDEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.IndexArrayBufferBinding;
+         *params = (GLdouble) ctx->Array.Index.BufferObj->Name;
          break;
       case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.TextureArrayBufferBinding;
+         *params = (GLdouble) ctx->Array.TexCoord[clientUnit].BufferObj->Name;
          break;
       case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.EdgeFlagArrayBufferBinding;
+         *params = (GLdouble) ctx->Array.EdgeFlag.BufferObj->Name;
          break;
       case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.SecondaryColorArrayBufferBinding;
+         *params = (GLdouble) ctx->Array.SecondaryColor.BufferObj->Name;
          break;
       case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.FogCoordArrayBufferBinding;
-         break;
-      case GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB:
-         CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.WeightArrayBufferBinding;
+         *params = (GLdouble) ctx->Array.FogCoord.BufferObj->Name;
          break;
+      /*case GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB: - not supported */
       case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_D(ARB_vertex_buffer_object, pname);
-         *params = (GLdouble) ctx->Array.ElementArrayBufferBinding;
+         *params = (GLdouble) ctx->Array.ElementArrayBufferObj->Name;
          break;
 #endif
 
@@ -3208,12 +3227,13 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params )
  * otherwise gets the specified parameter from the current context, converting
  * it value into GLfloat.
  */
-void
+void GLAPIENTRY
 _mesa_GetFloatv( GLenum pname, GLfloat *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    GLuint i;
-   GLuint texUnit = ctx->Texture.CurrentUnit;
+   const GLuint clientUnit = ctx->Array.ActiveTexture;
+   const GLuint texUnit = ctx->Texture.CurrentUnit;
    const struct gl_texture_unit *textureUnit = &ctx->Texture.Unit[texUnit];
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
@@ -3300,8 +3320,11 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
       case GL_BLEND_DST_ALPHA_EXT:
          *params = ENUM_TO_FLOAT(ctx->Color.BlendDstA);
          break;
-      case GL_BLEND_EQUATION_EXT:
-        *params = ENUM_TO_FLOAT(ctx->Color.BlendEquation);
+      case GL_BLEND_EQUATION:
+        *params = ENUM_TO_FLOAT(ctx->Color.BlendEquationRGB);
+        break;
+      case GL_BLEND_EQUATION_ALPHA_EXT:
+        *params = ENUM_TO_FLOAT(ctx->Color.BlendEquationA);
         break;
       case GL_BLEND_COLOR_EXT:
         params[0] = ctx->Color.BlendColor[0];
@@ -3386,7 +3409,7 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
         params[0] = ctx->Current.RasterDistance;
         break;
       case GL_CURRENT_RASTER_INDEX:
-        *params = (GLfloat) ctx->Current.RasterIndex;
+        *params = ctx->Current.RasterIndex;
         break;
       case GL_CURRENT_RASTER_POSITION:
         params[0] = ctx->Current.RasterPos[0];
@@ -3572,7 +3595,7 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
         *params = (GLfloat) ctx->List.ListBase;
         break;
       case GL_LIST_INDEX:
-        *params = (GLfloat) ctx->CurrentListNum;
+        *params = (GLfloat) ctx->ListState.CurrentListNum;
         break;
       case GL_LIST_MODE:
          if (!ctx->CompileFlag)
@@ -4076,16 +4099,16 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
          *params = 0.0;
          break;
       case GL_TEXTURE_COORD_ARRAY:
-         *params = (GLfloat) ctx->Array.TexCoord[texUnit].Enabled;
+         *params = (GLfloat) ctx->Array.TexCoord[clientUnit].Enabled;
          break;
       case GL_TEXTURE_COORD_ARRAY_SIZE:
-         *params = (GLfloat) ctx->Array.TexCoord[texUnit].Size;
+         *params = (GLfloat) ctx->Array.TexCoord[clientUnit].Size;
          break;
       case GL_TEXTURE_COORD_ARRAY_TYPE:
-         *params = ENUM_TO_FLOAT(ctx->Array.TexCoord[texUnit].Type);
+         *params = ENUM_TO_FLOAT(ctx->Array.TexCoord[clientUnit].Type);
          break;
       case GL_TEXTURE_COORD_ARRAY_STRIDE:
-         *params = (GLfloat) ctx->Array.TexCoord[texUnit].Stride;
+         *params = (GLfloat) ctx->Array.TexCoord[clientUnit].Stride;
          break;
       case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
          *params = 0.0;
@@ -4112,7 +4135,7 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
          break;
       case GL_CLIENT_ACTIVE_TEXTURE_ARB:
          CHECK_EXTENSION_F(ARB_multitexture, pname);
-         *params = (GLfloat) (GL_TEXTURE0_ARB + ctx->Array.ActiveTexture);
+         *params = (GLfloat) (GL_TEXTURE0_ARB + clientUnit);
          break;
 
       /* GL_ARB_texture_cube_map */
@@ -4418,7 +4441,7 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
 
       /* GL_NV_point_sprite */
       case GL_POINT_SPRITE_NV:
-         CHECK_EXTENSION_F(NV_point_sprite, pname);
+         CHECK_EXTENSION2_F(NV_point_sprite, ARB_point_sprite, pname);
          *params = (GLfloat) ctx->Point.PointSprite;
          break;
       case GL_POINT_SPRITE_R_MODE_NV:
@@ -4602,47 +4625,44 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
 #if FEATURE_ARB_vertex_buffer_object
       case GL_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.ArrayBufferBinding;
+         *params = (GLfloat) ctx->Array.ArrayBufferObj->Name;
          break;
       case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.VertexArrayBufferBinding;
+         *params = (GLfloat) ctx->Array.Vertex.BufferObj->Name;
          break;
       case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.NormalArrayBufferBinding;
+         *params = (GLfloat) ctx->Array.Normal.BufferObj->Name;
          break;
       case GL_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.ColorArrayBufferBinding;
+         *params = (GLfloat) ctx->Array.Color.BufferObj->Name;
          break;
       case GL_INDEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.IndexArrayBufferBinding;
+         *params = (GLfloat) ctx->Array.Index.BufferObj->Name;
          break;
       case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.TextureArrayBufferBinding;
+         *params = (GLfloat) ctx->Array.TexCoord[clientUnit].BufferObj->Name;
          break;
       case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.EdgeFlagArrayBufferBinding;
+         *params = (GLfloat) ctx->Array.EdgeFlag.BufferObj->Name;
          break;
       case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.SecondaryColorArrayBufferBinding;
+         *params = (GLfloat) ctx->Array.SecondaryColor.BufferObj->Name;
          break;
       case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.FogCoordArrayBufferBinding;
-         break;
-      case GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB:
-         CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.WeightArrayBufferBinding;
+         *params = (GLfloat) ctx->Array.FogCoord.BufferObj->Name;
          break;
+      /*case GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB: - not supported */
       case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_F(ARB_vertex_buffer_object, pname);
-         *params = (GLfloat) ctx->Array.ElementArrayBufferBinding;
+         *params = (GLfloat) ctx->Array.ElementArrayBufferObj->Name;
          break;
 #endif
 
@@ -4723,12 +4743,13 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
  * otherwise gets the specified parameter from the current context, converting
  * it value into GLinteger.
  */
-void
+void GLAPIENTRY
 _mesa_GetIntegerv( GLenum pname, GLint *params )
 {
    GET_CURRENT_CONTEXT(ctx);
    GLuint i;
-   GLuint texUnit = ctx->Texture.CurrentUnit;
+   const GLuint clientUnit = ctx->Array.ActiveTexture;
+   const GLuint texUnit = ctx->Texture.CurrentUnit;
    const struct gl_texture_unit *textureUnit = &ctx->Texture.Unit[texUnit];
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
@@ -4816,8 +4837,11 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
       case GL_BLEND_DST_ALPHA_EXT:
          *params = (GLint) ctx->Color.BlendDstA;
          break;
-      case GL_BLEND_EQUATION_EXT:
-        *params = (GLint) ctx->Color.BlendEquation;
+      case GL_BLEND_EQUATION:
+        *params = (GLint) ctx->Color.BlendEquationRGB;
+        break;
+      case GL_BLEND_EQUATION_ALPHA_EXT:
+        *params = (GLint) ctx->Color.BlendEquationA;
         break;
       case GL_BLEND_COLOR_EXT:
         params[0] = FLOAT_TO_INT( ctx->Color.BlendColor[0] );
@@ -5088,7 +5112,7 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
         *params = (GLint) ctx->List.ListBase;
         break;
       case GL_LIST_INDEX:
-        *params = (GLint) ctx->CurrentListNum;
+        *params = (GLint) ctx->ListState.CurrentListNum;
         break;
       case GL_LIST_MODE:
          if (!ctx->CompileFlag)
@@ -5590,16 +5614,16 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
          *params = 0;
          break;
       case GL_TEXTURE_COORD_ARRAY:
-         *params = (GLint) ctx->Array.TexCoord[texUnit].Enabled;
+         *params = (GLint) ctx->Array.TexCoord[clientUnit].Enabled;
          break;
       case GL_TEXTURE_COORD_ARRAY_SIZE:
-         *params = ctx->Array.TexCoord[texUnit].Size;
+         *params = ctx->Array.TexCoord[clientUnit].Size;
          break;
       case GL_TEXTURE_COORD_ARRAY_TYPE:
-         *params = ctx->Array.TexCoord[texUnit].Type;
+         *params = ctx->Array.TexCoord[clientUnit].Type;
          break;
       case GL_TEXTURE_COORD_ARRAY_STRIDE:
-         *params = ctx->Array.TexCoord[texUnit].Stride;
+         *params = ctx->Array.TexCoord[clientUnit].Stride;
          break;
       case GL_TEXTURE_COORD_ARRAY_COUNT_EXT:
          *params = 0;
@@ -5626,7 +5650,7 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
          break;
       case GL_CLIENT_ACTIVE_TEXTURE_ARB:
          CHECK_EXTENSION_I(ARB_multitexture, pname);
-         *params = GL_TEXTURE0_ARB + ctx->Array.ActiveTexture;
+         *params = GL_TEXTURE0_ARB + clientUnit;
          break;
 
       /* GL_ARB_texture_cube_map */
@@ -5971,7 +5995,7 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
 
       /* GL_NV_point_sprite */
       case GL_POINT_SPRITE_NV:
-         CHECK_EXTENSION_I(NV_point_sprite, pname);
+         CHECK_EXTENSION2_I(NV_point_sprite, ARB_point_sprite, pname);
          *params = (GLint) ctx->Point.PointSprite;
          break;
       case GL_POINT_SPRITE_R_MODE_NV:
@@ -6155,47 +6179,44 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
 #if FEATURE_ARB_vertex_buffer_object
       case GL_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.ArrayBufferBinding;
+         *params = (GLint) ctx->Array.ArrayBufferObj->Name;
          break;
       case GL_VERTEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.VertexArrayBufferBinding;
+         *params = (GLint) ctx->Array.Vertex.BufferObj->Name;
          break;
       case GL_NORMAL_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.NormalArrayBufferBinding;
+         *params = (GLint) ctx->Array.Normal.BufferObj->Name;
          break;
       case GL_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.ColorArrayBufferBinding;
+         *params = (GLint) ctx->Array.Color.BufferObj->Name;
          break;
       case GL_INDEX_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.IndexArrayBufferBinding;
+         *params = (GLint) ctx->Array.Index.BufferObj->Name;
          break;
       case GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.TextureArrayBufferBinding;
+         *params = (GLint) ctx->Array.TexCoord[clientUnit].BufferObj->Name;
          break;
       case GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.EdgeFlagArrayBufferBinding;
+         *params = (GLint) ctx->Array.EdgeFlag.BufferObj->Name;
          break;
       case GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.SecondaryColorArrayBufferBinding;
+         *params = (GLint) ctx->Array.SecondaryColor.BufferObj->Name;
          break;
       case GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.FogCoordArrayBufferBinding;
-         break;
-      case GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB:
-         CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.WeightArrayBufferBinding;
+         *params = (GLint) ctx->Array.FogCoord.BufferObj->Name;
          break;
+      /*case GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB: - not supported */
       case GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB:
          CHECK_EXTENSION_I(ARB_vertex_buffer_object, pname);
-         *params = (GLint) ctx->Array.ElementArrayBufferBinding;
+         *params = (GLint) ctx->Array.ElementArrayBufferObj->Name;
          break;
 #endif
 
@@ -6275,11 +6296,11 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
  * Tries to get the specified pointer via dd_function_table::GetPointerv,
  * otherwise gets the specified pointer from the current context.
  */
-void
+void GLAPIENTRY
 _mesa_GetPointerv( GLenum pname, GLvoid **params )
 {
    GET_CURRENT_CONTEXT(ctx);
-   GLuint texUnit = ctx->Texture.CurrentUnit;
+   const GLuint clientUnit = ctx->Array.ActiveTexture;
    ASSERT_OUTSIDE_BEGIN_END(ctx);
 
    if (!params)
@@ -6294,28 +6315,28 @@ _mesa_GetPointerv( GLenum pname, GLvoid **params )
 
    switch (pname) {
       case GL_VERTEX_ARRAY_POINTER:
-         *params = ctx->Array.Vertex.Ptr;
+         *params = (GLvoid *) ctx->Array.Vertex.Ptr;
          break;
       case GL_NORMAL_ARRAY_POINTER:
-         *params = ctx->Array.Normal.Ptr;
+         *params = (GLvoid *) ctx->Array.Normal.Ptr;
          break;
       case GL_COLOR_ARRAY_POINTER:
-         *params = ctx->Array.Color.Ptr;
+         *params = (GLvoid *) ctx->Array.Color.Ptr;
          break;
       case GL_SECONDARY_COLOR_ARRAY_POINTER_EXT:
-         *params = ctx->Array.SecondaryColor.Ptr;
+         *params = (GLvoid *) ctx->Array.SecondaryColor.Ptr;
          break;
       case GL_FOG_COORDINATE_ARRAY_POINTER_EXT:
-         *params = ctx->Array.FogCoord.Ptr;
+         *params = (GLvoid *) ctx->Array.FogCoord.Ptr;
          break;
       case GL_INDEX_ARRAY_POINTER:
-         *params = ctx->Array.Index.Ptr;
+         *params = (GLvoid *) ctx->Array.Index.Ptr;
          break;
       case GL_TEXTURE_COORD_ARRAY_POINTER:
-         *params = ctx->Array.TexCoord[texUnit].Ptr;
+         *params = (GLvoid *) ctx->Array.TexCoord[clientUnit].Ptr;
          break;
       case GL_EDGE_FLAG_ARRAY_POINTER:
-         *params = ctx->Array.EdgeFlag.Ptr;
+         *params = (GLvoid *) ctx->Array.EdgeFlag.Ptr;
          break;
       case GL_FEEDBACK_BUFFER_POINTER:
          *params = ctx->Feedback.Buffer;
@@ -6370,7 +6391,7 @@ _mesa_GetPointerv( GLenum pname, GLvoid **params )
  * Tries to get the string from dd_function_table::GetString, otherwise returns
  * the hardcoded strings.
  */
-const GLubyte *
+const GLubyte * GLAPIENTRY
 _mesa_GetString( GLenum name )
 {
    GET_CURRENT_CONTEXT(ctx);
@@ -6419,6 +6440,7 @@ _mesa_GetString( GLenum name )
                    ctx->Extensions.EXT_point_parameters && /*aka ARB*/
                    ctx->Extensions.EXT_secondary_color &&
                    ctx->Extensions.EXT_stencil_wrap &&
+                   ctx->Extensions.EXT_texture_lod_bias &&
                    ctx->Extensions.SGIS_generate_mipmap) {
                   if (ctx->Extensions.ARB_occlusion_query &&
                       ctx->Extensions.ARB_vertex_buffer_object &&
@@ -6463,7 +6485,7 @@ _mesa_GetString( GLenum name )
  *
  * Returns __GLcontextRec::ErrorValue.
  */
-GLenum
+GLenum GLAPIENTRY
 _mesa_GetError( void )
 {
    GET_CURRENT_CONTEXT(ctx);