diff options
author | Brian Paul <brian.paul@tungstengraphics.com> | 2000-10-16 23:37:16 +0000 |
---|---|---|
committer | Brian Paul <brian.paul@tungstengraphics.com> | 2000-10-16 23:37:16 +0000 |
commit | e17c1d2202bb65fd7bc4797ebfc1331fccad2995 (patch) | |
tree | 86fe1e0b4ebacb57f67a20255710acd81818c4e4 | |
parent | e27b783426b3cc1b76b7da281807b2de3f35d560 (diff) |
added _mesa_get_teximages_from_driver()
-rw-r--r-- | src/mesa/main/teximage.c | 52 | ||||
-rw-r--r-- | src/mesa/main/teximage.h | 12 |
2 files changed, 60 insertions, 4 deletions
diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index b817b84bd3d..83736cf2303 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -1,4 +1,4 @@ -/* $Id: teximage.c,v 1.39.4.6 2000/09/28 18:25:00 brianp Exp $ */ +/* $Id: teximage.c,v 1.39.4.7 2000/10/16 23:37:16 brianp Exp $ */ /* * Mesa 3-D graphics library @@ -1940,6 +1940,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 ) diff --git a/src/mesa/main/teximage.h b/src/mesa/main/teximage.h index 0a900339f6d..a0c7dd22eb0 100644 --- a/src/mesa/main/teximage.h +++ b/src/mesa/main/teximage.h @@ -1,4 +1,4 @@ -/* $Id: teximage.h,v 1.11.4.1 2000/08/29 22:58:57 brianp Exp $ */ +/* $Id: teximage.h,v 1.11.4.2 2000/10/16 23:37:16 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 ***/ |