X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FTGALoader.cpp;h=89d9b6b0a34d2a009928a8ca5ee57240a17cb11a;hb=1aef858f5ecb3dc8fd816e0155635371ed3632f2;hp=7c722d75dfd47c17fecd09deb108f6fbb2c88156;hpb=36cc3af3e5074215817ddee16defde754e2ad67f;p=lugaru.git diff --git a/Source/TGALoader.cpp b/Source/TGALoader.cpp index 7c722d7..89d9b6b 100644 --- a/Source/TGALoader.cpp +++ b/Source/TGALoader.cpp @@ -1,6 +1,27 @@ +/* +Copyright (C) 2003, 2010 - Wolfire Games + +This file is part of Lugaru. + +Lugaru is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + /**> HEADER FILES <**/ -#include "TGALoader.h" #include "Game.h" +#include "TGALoader.h" extern float texdetail; extern TGAImageRec texture; @@ -14,12 +35,12 @@ extern bool LoadImage(const char * fname, TGAImageRec & tex); /********************> LoadTGA() <*****/ bool upload_image(const unsigned char* filePath, bool hasalpha) { - if(visibleloading){ + if(visibleloading) { loadscreencolor=1; pgame->LoadingScreen(); } -#ifdef WIN32 +#if !PLATFORM_MACOSX // for Windows, just use TGA loader for now char fileName[ 256]; @@ -159,109 +180,3 @@ bool upload_image(const unsigned char* filePath, bool hasalpha) #endif } - - -TGAImageRec* LoadTGA( char *filename ) -{ - GLubyte TGAheader[12]={0,0,2,0,0,0,0,0,0,0,0,0}; // Uncompressed TGA Header - GLubyte TGAcompare[12]; // Used To Compare TGA Header - GLubyte header[6]; // First 6 Useful Bytes From The Header - GLuint bytesPerPixel; // Holds Number Of Bytes Per Pixel Used In The TGA File - GLuint imageSize; // Used To Store The Image Size When Setting Aside Ram - GLuint temp; // Temporary Variable - GLuint type = GL_RGBA; // Set The Default GL Mode To RBGA (32 BPP) - //TGAImageRec *texture; - FILE *file; - - // Open The TGA File - file = fopen( filename, "rb" ); - - if( ( file == NULL ) || // Does File Even Exist? - ( fread( TGAcompare, 1, sizeof( TGAcompare ), file ) != sizeof( TGAcompare ) ) || // Are There 12 Bytes To Read? - ( memcmp( TGAheader, TGAcompare, sizeof( TGAheader ) ) != 0 ) || // Does The Header Match What We Want? - ( fread( header, 1, sizeof( header ), file ) != sizeof( header ) ) )// If So Read Next 6 Header Bytes - { - // If anything failed then close the file and return false - if (file) fclose( file ); - return NULL; - } - - // Create a new RGBAImageRec - //texture = ( TGAImageRec* )malloc( sizeof( TGAImageRec ) ); - - // Determine the TGA width (highbyte*256+lowbyte) and height (highbyte*256+lowbyte) - texture.sizeX = (header[1] * 256 + header[0]); - texture.sizeY = (header[3] * 256 + header[2]); - - // Make sure the height, width, and bit depth are valid - if( ( texture.sizeX <= 0 ) || ( texture.sizeY <= 0 ) || ( ( header[4] != 24 ) && ( header[4] != 32 ) ) ) - { - // If anything failed then close the file, free up memory for the image, and return NULL - fclose( file ); - //free( texture ); - return NULL; - } - - // Grab The TGA's Bits Per Pixel (24 or 32) - texture.bpp = header[4]; - bytesPerPixel = texture.bpp/8; // Divide By 8 To Get The Bytes Per Pixel - - // Calculate The Memory Required For The TGA Data - imageSize = texture.sizeX * texture.sizeY * bytesPerPixel; - - // Reserve Memory To Hold The TGA Data - //texture.data = ( GLubyte* )malloc( imageSize ); - - // Make sure the right amount of memory was allocated - if( ( texture.data == NULL ) || ( fread( texture.data, 1, imageSize, file ) != imageSize ) ) - { - // Free up the image data if there was any - // if( texture.data != NULL ) - // free( texture.data ); - - // If anything failed then close the file, free up memory for the image, and return NULL - fclose( file ); - // free( texture ); - return NULL; - } - - // Loop Through The Image Data - for( GLuint i = 0; i < int( imageSize ); i += bytesPerPixel ) - { - // Swaps The 1st And 3rd Bytes ('R'ed and 'B'lue) - temp = texture.data[i]; // Temporarily Store The Value At Image Data 'i' - texture.data[i] = texture.data[i + 2]; // Set The 1st Byte To The Value Of The 3rd Byte - texture.data[i + 2] = temp; // Set The 3rd Byte To The Value In 'temp' (1st Byte Value) - } - - if(texdetail>1){ - int which=0; - float temp; - float howmany; - for( GLuint k = 0; k < int( imageSize); k += bytesPerPixel*texture.sizeX*texdetail ) - { - for( GLuint i = 0; i < int( imageSize/texture.sizeY ); i += bytesPerPixel*texdetail ) - { - for( GLuint b = 0; b < bytesPerPixel ; b ++ ){ - temp=0; - howmany=0; - for( GLuint l = 0; l < texdetail*texture.sizeX ; l +=texture.sizeX ){ - for( GLuint j = 0; j < texdetail ; j ++ ) - { - temp += (int)texture.data[k+i+j*bytesPerPixel+l*bytesPerPixel+b]; // Set The 1st Byte To The Value Of The 3rd Byte - howmany++; - } - } - texture.data[which+b]=GLubyte(temp/howmany); - } - which+=bytesPerPixel; - } - } - texture.sizeX/=texdetail; - texture.sizeY/=texdetail; - } - - // Close The File - fclose( file ); - return &texture; -}