Edit

kc3-lang/angle/samples/gles2_book/Common/Win32/esUtil_TGA.c

Branch :

  • Show log

    Commit

  • Author : alokp@chromium.org
    Date : 2010-04-07 19:57:20
    Hash : 0270ef14
    Message : Changed the default character set to be UNICODE, the same as chromium. Changes to fix compile errors and warnings. Review URL: http://codereview.appspot.com/816046 git-svn-id: https://angleproject.googlecode.com/svn/trunk@103 736b8ea6-26fd-11df-bfd4-992fa37f6226

  • samples/gles2_book/Common/Win32/esUtil_TGA.c
  • //
    // Book:      OpenGL(R) ES 2.0 Programming Guide
    // Authors:   Aaftab Munshi, Dan Ginsburg, Dave Shreiner
    // ISBN-10:   0321502795
    // ISBN-13:   9780321502797
    // Publisher: Addison-Wesley Professional
    // URLs:      http://safari.informit.com/9780321563835
    //            http://www.opengles-book.com
    //
    
    // esUtil_TGA.c
    //
    //    This file contains the Win32 implementation of a TGA image loader
    
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    ///
    //  Macros
    //
    #define INVERTED_BIT            (1 << 5)
    
    ///
    //  Types
    //
    #pragma pack(push,x1)                            // Byte alignment (8-bit)
    #pragma pack(1)
    
    typedef struct
    {
       unsigned char  IdSize,
                      MapType,
                      ImageType;
       unsigned short PaletteStart,
                      PaletteSize;
       unsigned char  PaletteEntryDepth;
       unsigned short X,
                      Y,
                      Width,
                      Height;
       unsigned char  ColorDepth,
                      Descriptor;
             
    } TGA_HEADER;
    
    #pragma pack(pop,x1)
    
    ////////////////////////////////////////////////////////////////////////////////////
    //
    //  Private Functions
    //
    
    ////////////////////////////////////////////////////////////////////////////////////
    //
    //  Public Functions
    //
    //
    
    
    ///
    //  WinTGALoad()
    //
    int WinTGALoad( const char *fileName, char **buffer, int *width, int *height )
    {
       FILE        *fp;
       TGA_HEADER   Header;
    
       if ( fopen_s ( &fp, fileName, "rb" ) != 0 )
       {
          return FALSE;
       }
    
       if ( fp == NULL )
       {
          return FALSE;
       }
    
       fread ( &Header, sizeof(TGA_HEADER), 1, fp );
    
       *width = Header.Width;
       *height = Header.Height;
       
       if ( Header.ColorDepth == 24 )
       {
          RGBTRIPLE *Buffer24;
    
          Buffer24= (RGBTRIPLE*)malloc(sizeof(RGBTRIPLE) * (*width) * (*height));
    
          if(Buffer24)
          {
             int i=0;
             int x,
                 y;
    
             fread(Buffer24, sizeof(RGBTRIPLE), (*width) * (*height), fp);
    
             *buffer= (LPSTR) malloc(3 * (*width) * (*height));
    
             for ( y = 0; y < *height; y++ )
                for( x = 0; x < *width; x++ )
                {
                   int Index= y * (*width) + x;
    
                   if(!(Header.Descriptor & INVERTED_BIT))
                      Index= ((*height) - 1 - y) * (*width) + x;
    
                   (*buffer)[(i * 3)]=      Buffer24[Index].rgbtRed;
                   (*buffer)[(i * 3) + 1]=  Buffer24[Index].rgbtGreen;
                   (*buffer)[(i * 3) + 2]=  Buffer24[Index].rgbtBlue;
            
                   i++;
                }
             
             fclose(fp);
             free(Buffer24);
             return(TRUE);
          }		
       }
    
       return(FALSE);
    }