added _mesa_get_teximages_from_driver()
authorBrian Paul <brian.paul@tungstengraphics.com>
Mon, 16 Oct 2000 23:43:12 +0000 (23:43 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Mon, 16 Oct 2000 23:43:12 +0000 (23:43 +0000)
src/mesa/main/teximage.c
src/mesa/main/teximage.h

index 6617912c5f1f1739e986e06d12f9e5442edb743f..ba11eab98fefc5e37dce076a440ac47f9cb0683f 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: teximage.c,v 1.51 2000/09/28 18:30:39 brianp Exp $ */
+/* $Id: teximage.c,v 1.52 2000/10/16 23:43:12 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -2114,6 +2114,56 @@ _mesa_get_teximage_from_driver( GLcontext *ctx, GLenum target, GLint level,
 }
 
 
+/*
+ * Get all the mipmap images for a texture object from the device driver.
+ * Actually, only get mipmap images if we're using a mipmap filter.
+ */
+GLboolean
+_mesa_get_teximages_from_driver(GLcontext *ctx,
+                                struct gl_texture_object *texObj)
+{
+   if (ctx->Driver.GetTexImage) {
+      static const GLenum targets[] = {
+         GL_TEXTURE_1D,
+         GL_TEXTURE_2D,
+         GL_TEXTURE_3D,
+         GL_TEXTURE_CUBE_MAP_ARB,
+         GL_TEXTURE_CUBE_MAP_ARB,
+         GL_TEXTURE_CUBE_MAP_ARB
+      };
+      GLboolean needLambda = (texObj->MinFilter != texObj->MagFilter);
+      GLenum target = targets[texObj->Dimensions - 1];
+      if (needLambda) {
+         GLint level;
+         /* Get images for all mipmap levels.  We might not need them
+          * all but this is easier.  We're on a (slow) software path
+          * anyway.
+          */
+         for (level = 0; level <= texObj->P; level++) {
+            struct gl_texture_image *texImg = texObj->Image[level];
+            if (texImg && !texImg->Data) {
+               _mesa_get_teximage_from_driver(ctx, target, level, texObj);
+               if (!texImg->Data)
+                  return GL_FALSE;  /* out of memory */
+            }
+         }
+      }
+      else {
+         GLint level = texObj->BaseLevel;
+         struct gl_texture_image *texImg = texObj->Image[level];
+         if (texImg && !texImg->Data) {
+            _mesa_get_teximage_from_driver(ctx, target, level, texObj);
+            if (!texImg->Data)
+               return GL_FALSE;  /* out of memory */
+         }
+      }
+      return GL_TRUE;
+   }
+   return GL_FALSE;
+}
+
+
+
 void
 _mesa_GetTexImage( GLenum target, GLint level, GLenum format,
                    GLenum type, GLvoid *pixels )
index c7dbbae343f7e6d34864cbcf7629b08db02a9a43..585c95f0020406f133c5da87f94c8df7e5382a36 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: teximage.h,v 1.13 2000/09/05 15:41:25 brianp Exp $ */
+/* $Id: teximage.h,v 1.14 2000/10/16 23:43:12 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -65,8 +65,14 @@ _mesa_select_tex_image(GLcontext *ctx, const struct gl_texture_unit *texUnit,
 
 
 extern void
-_mesa_get_teximage_from_driver( GLcontext *ctx, GLenum target, GLint level,
-                                const struct gl_texture_object *texObj );
+_mesa_get_teximage_from_driver(GLcontext *ctx, GLenum target, GLint level,
+                               const struct gl_texture_object *texObj);
+
+
+extern GLboolean
+_mesa_get_teximages_from_driver(GLcontext *ctx,
+                                struct gl_texture_object *texObj);
+
 
 
 /*** API entry point functions ***/