diff options
author | Brian Paul <brian.paul@tungstengraphics.com> | 2000-09-28 18:30:39 +0000 |
---|---|---|
committer | Brian Paul <brian.paul@tungstengraphics.com> | 2000-09-28 18:30:39 +0000 |
commit | 37a6211795cfd0a4431bdb7c676acf54f29df994 (patch) | |
tree | f4d0bf75f657bed5608e94bdd5f329ee3c10abc6 | |
parent | 574c456a5ac6ca13f293a2884c3a90fd28edd4e1 (diff) |
new params for SpecificCompressedTexFormat() (Bill White)
-rw-r--r-- | src/mesa/main/dd.h | 13 | ||||
-rw-r--r-- | src/mesa/main/teximage.c | 49 |
2 files changed, 38 insertions, 24 deletions
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h index 0341c50acc..a94e21d4b2 100644 --- a/src/mesa/main/dd.h +++ b/src/mesa/main/dd.h @@ -1,4 +1,4 @@ -/* $Id: dd.h,v 1.32 2000/09/14 23:13:51 brianp Exp $ */ +/* $Id: dd.h,v 1.33 2000/09/28 18:30:39 brianp Exp $ */ /* * Mesa 3-D graphics library @@ -699,8 +699,15 @@ struct dd_function_table { */ GLint (*SpecificCompressedTexFormat)(GLcontext *ctx, - GLint internalFormat, - GLint numDimensions); + GLint internalFormat, + GLint numDimensions, + GLint *levelp, + GLsizei *widthp, + GLsizei *heightp, + GLsizei *depthp, + GLint *borderp, + GLenum *formatp, + GLenum *typep); /* Called to turn a generic texture format into a specific * texture format. For example, if a driver implements * GL_3DFX_texture_compression_FXT1, this would map diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index 6f14c1974b..6617912c5f 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -1,4 +1,4 @@ -/* $Id: teximage.c,v 1.50 2000/09/07 15:38:49 brianp Exp $ */ +/* $Id: teximage.c,v 1.51 2000/09/28 18:30:39 brianp Exp $ */ /* * Mesa 3-D graphics library @@ -1507,7 +1507,14 @@ copytexsubimage_error_check( GLcontext *ctx, GLuint dimensions, */ static GLint get_specific_compressed_tex_format(GLcontext *ctx, - GLint ifmt, GLint numDimensions) + GLint ifmt, GLint numDimensions, + GLint *levelp, + GLsizei *widthp, + GLsizei *heightp, + GLsizei *depthp, + GLint *borderp, + GLenum *formatp, + GLenum *typep) { char message[100]; GLint internalFormat = ifmt; @@ -1516,22 +1523,14 @@ get_specific_compressed_tex_format(GLcontext *ctx, && ctx->Driver.SpecificCompressedTexFormat) { /* * First, ask the driver for the specific format. + * We do this for all formats, since we may want to + * fake one compressed format for another. */ - switch (internalFormat) { - case GL_COMPRESSED_ALPHA_ARB: - case GL_COMPRESSED_LUMINANCE_ARB: - case GL_COMPRESSED_LUMINANCE_ALPHA_ARB: - case GL_COMPRESSED_INTENSITY_ARB: - case GL_COMPRESSED_RGB_ARB: - case GL_COMPRESSED_RGBA_ARB: - internalFormat = (*ctx->Driver.SpecificCompressedTexFormat) - (ctx, internalFormat, numDimensions); - /* XXX shouldn't we return now? */ - break; - default: - /* silence compiler warnings */ - ; - } + internalFormat = (*ctx->Driver.SpecificCompressedTexFormat) + (ctx, internalFormat, numDimensions, + levelp, + widthp, heightp, depthp, + borderp, formatp, typep); } /* @@ -1597,7 +1596,6 @@ get_specific_compressed_tex_format(GLcontext *ctx, } - /* * Called from the API. Note that width includes the border. */ @@ -1619,7 +1617,10 @@ _mesa_TexImage1D( GLenum target, GLint level, GLint internalFormat, struct gl_texture_image *texImage; GLint ifmt; - ifmt = get_specific_compressed_tex_format(ctx, internalFormat, 1); + ifmt = get_specific_compressed_tex_format(ctx, internalFormat, 1, + &level, + &width, 0, 0, + &border, &format, &type); if (ifmt < 0) { /* * The error here is that we were sent a generic compressed @@ -1752,7 +1753,10 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat, struct gl_texture_image *texImage; GLint ifmt; - ifmt = get_specific_compressed_tex_format(ctx, internalFormat, 2); + ifmt = get_specific_compressed_tex_format(ctx, internalFormat, 2, + &level, + &width, &height, 0, + &border, &format, &type); if (ifmt < 0) { /* * The error here is that we were sent a generic compressed @@ -1894,7 +1898,10 @@ _mesa_TexImage3D( GLenum target, GLint level, GLint internalFormat, struct gl_texture_image *texImage; GLint ifmt; - ifmt = get_specific_compressed_tex_format(ctx, internalFormat, 3); + ifmt = get_specific_compressed_tex_format(ctx, internalFormat, 3, + &level, + &width, &height, &depth, + &border, &format, &type); if (ifmt < 0) { /* * The error here is that we were sent a generic compressed |