Thread: [Tuxracer-checkins] CVS: tuxracer/src textures.c,1.8,1.9
Status: Beta
Brought to you by:
jfpatry
From: Jasmin P. <jf...@us...> - 2000-09-27 16:48:51
|
Update of /cvsroot/tuxracer/tuxracer/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv26796/src Modified Files: textures.c Log Message: Check maximum texture size supported by card and scale textures to that size if necessary. Index: textures.c =================================================================== RCS file: /cvsroot/tuxracer/tuxracer/src/textures.c,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -r1.8 -r1.9 *** textures.c 2000/09/22 15:28:03 1.8 --- textures.c 2000/09/27 16:48:46 1.9 *************** *** 78,83 **** { IMAGE *texImage; ! texture_node_t *tex;; print_debug(DEBUG_TEXTURE, "Loading texture %s from file: %s", texname, filename); --- 78,85 ---- { IMAGE *texImage; ! texture_node_t *tex; ! int max_texture_size; + print_debug(DEBUG_TEXTURE, "Loading texture %s from file: %s", texname, filename); *************** *** 124,127 **** --- 126,160 ---- glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, get_min_filter() ); + + /* Check if we need to scale image */ + glGetIntegerv( GL_MAX_TEXTURE_SIZE, &max_texture_size ); + if ( texImage->sizeX > max_texture_size || + texImage->sizeY > max_texture_size ) + { + char *newdata = (char*)malloc( texImage->sizeZ * + max_texture_size * + max_texture_size ); + + check_assertion( newdata != NULL, "out of memory" ); + + print_debug( DEBUG_TEXTURE, "Texture `%s' too large -- scaling to " + "maximum allowed size", + filename ); + + /* In the case of large- or small-aspect ratio textures, this + could end up using *more* space... oh well. */ + gluScaleImage( texImage->sizeZ == 3 ? GL_RGB : GL_RGBA, + texImage->sizeX, texImage->sizeY, + GL_UNSIGNED_BYTE, + texImage->data, + max_texture_size, max_texture_size, + GL_UNSIGNED_BYTE, + newdata ); + + free( texImage->data ); + texImage->data = (unsigned char*) newdata; + texImage->sizeX = max_texture_size; + texImage->sizeY = max_texture_size; + } gluBuild2DMipmaps( GL_TEXTURE_2D, texImage->sizeZ, texImage->sizeX, |