added GL_SGIX/SGIS_pixel_texture
[mesa.git] / src / mesa / main / get.c
index 136d89689aa89082a46e8599ee9c4b66c256c359..de7b108df84ca394c22e131a633ecf6da0b27084 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: get.c,v 1.16 2000/03/31 01:04:52 brianp Exp $ */
+/* $Id: get.c,v 1.18 2000/04/07 16:27:26 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
 #endif
 
 
+static GLenum
+pixel_texgen_mode(const GLcontext *ctx)
+{
+   if (ctx->Pixel.FragmentRgbSource == GL_CURRENT_RASTER_POSITION) {
+      if (ctx->Pixel.FragmentAlphaSource == GL_CURRENT_RASTER_POSITION) {
+         return GL_RGBA;
+      }
+      else {
+         return GL_RGB;
+      }
+   }
+   else {
+      if (ctx->Pixel.FragmentAlphaSource == GL_CURRENT_RASTER_POSITION) {
+         return GL_ALPHA;
+      }
+      else {
+         return GL_NONE;
+      }
+   }
+}
+
+
 
 void
 _mesa_GetBooleanv( GLenum pname, GLboolean *params )
@@ -1029,14 +1051,32 @@ _mesa_GetBooleanv( GLenum pname, GLboolean *params )
          return;
       case GL_OCCLUSION_TEST_RESULT_HP:
          if (ctx->Extensions.HaveHpOcclusionTest) {
-            *params = ctx->OcclusionResult;
-            ctx->OcclusionResult = GL_FALSE; /* reset now */
+            if (ctx->Depth.OcclusionTest)
+               *params = ctx->OcclusionResult;
+            else
+               *params = ctx->OcclusionResultSaved;
+            /* reset flag now */
+            ctx->OcclusionResult = GL_FALSE;
+            ctx->OcclusionResultSaved = GL_FALSE;
          }
          else {
             gl_error( ctx, GL_INVALID_ENUM, "glGetBooleanv" );
          }
          return;
 
+      /* GL_SGIS_pixel_texture */
+      case GL_PIXEL_TEXTURE_SGIS:
+         *params = ctx->Pixel.PixelTextureEnabled;
+         break;
+
+      /* GL_SGIX_pixel_texture */
+      case GL_PIXEL_TEX_GEN_SGIX:
+         *params = ctx->Pixel.PixelTextureEnabled;
+         break;
+      case GL_PIXEL_TEX_GEN_MODE_SGIX:
+         *params = (GLboolean) pixel_texgen_mode(ctx);
+         break;
+
       default:
          gl_error( ctx, GL_INVALID_ENUM, "glGetBooleanv" );
    }
@@ -2016,14 +2056,32 @@ _mesa_GetDoublev( GLenum pname, GLdouble *params )
          return;
       case GL_OCCLUSION_TEST_RESULT_HP:
          if (ctx->Extensions.HaveHpOcclusionTest) {
-            *params = (GLdouble) ctx->OcclusionResult;
-            ctx->OcclusionResult = GL_FALSE; /* reset now */
+            if (ctx->Depth.OcclusionTest)
+               *params = (GLdouble) ctx->OcclusionResult;
+            else
+               *params = (GLdouble) ctx->OcclusionResultSaved;
+            /* reset flag now */
+            ctx->OcclusionResult = GL_FALSE;
+            ctx->OcclusionResultSaved = GL_FALSE;
          }
          else {
             gl_error( ctx, GL_INVALID_ENUM, "glGetDoublev" );
          }
          return;
 
+      /* GL_SGIS_pixel_texture */
+      case GL_PIXEL_TEXTURE_SGIS:
+         *params = (GLdouble) ctx->Pixel.PixelTextureEnabled;
+         break;
+
+      /* GL_SGIX_pixel_texture */
+      case GL_PIXEL_TEX_GEN_SGIX:
+         *params = (GLdouble) ctx->Pixel.PixelTextureEnabled;
+         break;
+      case GL_PIXEL_TEX_GEN_MODE_SGIX:
+         *params = (GLdouble) pixel_texgen_mode(ctx);
+         break;
+
       default:
          gl_error( ctx, GL_INVALID_ENUM, "glGetDoublev" );
    }
@@ -2980,14 +3038,32 @@ _mesa_GetFloatv( GLenum pname, GLfloat *params )
          return;
       case GL_OCCLUSION_TEST_RESULT_HP:
          if (ctx->Extensions.HaveHpOcclusionTest) {
-            *params = (GLfloat) ctx->OcclusionResult;
-            ctx->OcclusionResult = GL_FALSE; /* reset now */
+            if (ctx->Depth.OcclusionTest)
+               *params = (GLfloat) ctx->OcclusionResult;
+            else
+               *params = (GLfloat) ctx->OcclusionResultSaved;
+            /* reset flag now */
+            ctx->OcclusionResult = GL_FALSE;
+            ctx->OcclusionResultSaved = GL_FALSE;
          }
          else {
             gl_error( ctx, GL_INVALID_ENUM, "glGetFloatv" );
          }
          return;
 
+      /* GL_SGIS_pixel_texture */
+      case GL_PIXEL_TEXTURE_SGIS:
+         *params = (GLfloat) ctx->Pixel.PixelTextureEnabled;
+         break;
+
+      /* GL_SGIX_pixel_texture */
+      case GL_PIXEL_TEX_GEN_SGIX:
+         *params = (GLfloat) ctx->Pixel.PixelTextureEnabled;
+         break;
+      case GL_PIXEL_TEX_GEN_MODE_SGIX:
+         *params = (GLfloat) pixel_texgen_mode(ctx);
+         break;
+
       default:
          gl_error( ctx, GL_INVALID_ENUM, "glGetFloatv" );
    }
@@ -3967,14 +4043,32 @@ _mesa_GetIntegerv( GLenum pname, GLint *params )
          return;
       case GL_OCCLUSION_TEST_RESULT_HP:
          if (ctx->Extensions.HaveHpOcclusionTest) {
-            *params = (GLint) ctx->OcclusionResult;
-            ctx->OcclusionResult = GL_FALSE; /* reset now */
+            if (ctx->Depth.OcclusionTest)
+               *params = (GLint) ctx->OcclusionResult;
+            else
+               *params = (GLint) ctx->OcclusionResultSaved;
+            /* reset flag now */
+            ctx->OcclusionResult = GL_FALSE;
+            ctx->OcclusionResultSaved = GL_FALSE;
          }
          else {
             gl_error( ctx, GL_INVALID_ENUM, "glGetIntegerv" );
          }
          return;
 
+      /* GL_SGIS_pixel_texture */
+      case GL_PIXEL_TEXTURE_SGIS:
+         *params = (GLint) ctx->Pixel.PixelTextureEnabled;
+         break;
+
+      /* GL_SGIX_pixel_texture */
+      case GL_PIXEL_TEX_GEN_SGIX:
+         *params = (GLint) ctx->Pixel.PixelTextureEnabled;
+         break;
+      case GL_PIXEL_TEX_GEN_MODE_SGIX:
+         *params = (GLint) pixel_texgen_mode(ctx);
+         break;
+
       default:
          gl_error( ctx, GL_INVALID_ENUM, "glGetIntegerv" );
    }