#include <texture.h>
Public Methods | |
| TEXTURE () | |
| ~TEXTURE () | |
| bool | LoadTGA () |
Public Attributes | |
| char | TexName [20] |
| GLubyte * | ImageData |
| GLuint | Bpp |
| GLuint | Width |
| GLuint | Height |
| GLuint | TexID |
| float | Vertex1_x |
| float | Vertex1_y |
| float | Vertex2_x |
| float | Vertex2_y |
| float | Vertex3_x |
| float | Vertex3_y |
|
|
Definition at line 5 of file texture.cpp.
00006 {
00007 }
|
|
|
Definition at line 9 of file texture.cpp.
00010 {
00011 }
|
|
|
Definition at line 13 of file texture.cpp. References Bpp, Height, ImageData, TexID, TexName, and Width. Referenced by SetGLTexture().
00014 {
00015 GLubyte TGAheader[12]={0,0,2,0,0,0,0,0,0,0,0,0}; // Uncompressed TGA Header
00016 GLubyte TGAcompare[12]; // Used To Compare TGA Header
00017 GLubyte header[6]; // First 6 Useful Bytes From The Header
00018 GLuint bytesPerPixel; // Holds Number Of Bytes Per Pixel Used In The TGA File
00019 GLuint imageSize; // Used To Store The Image Size When Setting Aside Ram
00020 GLuint temp; // Temporary Variable
00021 GLuint type=GL_RGBA; // Set The Default GL Mode To RBGA (32 BPP)
00022 FILE *file = fopen(TexName, "rb"); // Open The TGA Fi
00023 if( file==NULL || // Does File Even Exist?
00024 fread(TGAcompare,1,sizeof(TGAcompare),file)!=sizeof(TGAcompare) || // Are There 12 Bytes To Read?
00025 memcmp(TGAheader,TGAcompare,sizeof(TGAheader))!=0 || // Does The Header Match What We Want?
00026 fread(header,1,sizeof(header),file)!=sizeof(header)) // If So Read Next 6 Header Bytes
00027 {
00028 if (file == NULL) // Did The File Even Exist? *Added Jim Strong*
00029 {
00030 MessageBox(NULL,"Image file was not found","Error",MB_OK|MB_ICONERROR);
00031 return false; // Return False
00032 }
00033 if(TGAcompare[2] == 1)
00034 MessageBox(NULL,"Image cannot be indexed color. \r\n Convert the image to RGB or RGBA.","Error",MB_OK|MB_ICONERROR);
00035 if(TGAcompare[2] == 3)
00036 MessageBox(NULL,"Image cannot be greyscale color. \r\n Convert the image to RGB or RGBA.","Error",MB_OK|MB_ICONERROR);
00037 if(TGAcompare[2] == 9 || TGAcompare[2] == 10)
00038 MessageBox(NULL,"Image cannot be compressed. \r\n Convert the image to an uncompressed format.","Error",MB_OK|MB_ICONERROR);
00039 fclose(file); // If Anything Failed, Close The File
00040 return false; // Return False
00041 }
00042 Width = header[1] * 256 + header[0]; // Determine The TGA Width (highbyte*256+lowbyte)
00043 Height = header[3] * 256 + header[2]; // Determine The TGA Height (highbyte*256+lowbyte)
00044 if( Width <=0 || // Is The Width Less Than Or Equal To Zero
00045 Height <=0 || // Is The Height Less Than Or Equal To Zero
00046 (header[4]!=24 && header[4]!=32)) // Is The TGA 24 or 32 Bit?
00047 {
00048 fclose(file); // If Anything Failed, Close The File
00049 if(Width <=0 || Height <=0)
00050 MessageBox(NULL,"Image must have a width and height greater than 0","Error",MB_OK|MB_ICONERROR);
00051 if(header[4]!=24 && header[4]!=32)
00052 MessageBox(NULL,"Image must be 24 or 32 bit","Error",MB_OK|MB_ICONERROR);
00053 return false; // Return False
00054 }
00055 Bpp = header[4]; // Grab The TGA's Bits Per Pixel (24 or 32)
00056 bytesPerPixel = Bpp/8; // Divide By 8 To Get The Bytes Per Pixel
00057 imageSize = Width*Height*bytesPerPixel; // Calculate The Memory Required For The TGA Data
00058 ImageData = (GLubyte*)malloc(imageSize); // Reserve Memory To Hold The TGA Data
00059 if( ImageData == NULL || // Does The Storage Memory Exist?
00060 fread(ImageData, 1, imageSize, file)!=imageSize) // Does The Image Size Match The Memory Reserved?
00061 {
00062 if(ImageData!=NULL) // Was Image Data Loaded
00063 free(ImageData); // If So, Release The Image Data
00064 MessageBox(NULL,"Image load failed for unknown reason.","Error",MB_OK|MB_ICONERROR);
00065 fclose(file); // Close The File
00066 return false; // Return False
00067 }
00068 for(GLuint i=0; i<(GLuint)imageSize; i+=bytesPerPixel) // Loop Through The Image Data
00069 { // Swaps The 1st And 3rd Bytes ('R'ed and 'B'lue)
00070 temp = ImageData[i]; // Temporarily Store The Value At Image Data 'i'
00071 ImageData[i] = ImageData[i + 2]; // Set The 1st Byte To The Value Of The 3rd Byte
00072 ImageData[i + 2] = (GLubyte)temp; // Set The 3rd Byte To The Value In 'temp' (1st Byte Value)
00073 }
00074 fclose (file); // Close The File
00075
00076 // Build A Texture From The Data
00077 glGenTextures(1, &TexID); // Generate OpenGL texture IDs
00078 glBindTexture(GL_TEXTURE_2D, TexID);
00079 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
00080 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
00081 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
00082 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
00083 if (Bpp==24) // Was The TGA 24 Bits
00084 {
00085 type=GL_RGB; // If So Set The 'type' To GL_RGB
00086 }
00087 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
00088 glTexImage2D(GL_TEXTURE_2D, 0, type, Width, Height, 0, type, GL_UNSIGNED_BYTE, ImageData);
00089 gluBuild2DMipmaps(GL_TEXTURE_2D, type, Width, Height, type, GL_UNSIGNED_BYTE, ImageData);
00090 free(ImageData);
00091 return true; // Texture Building Went Ok, Return True
00092 }
|
|
|
Definition at line 19 of file texture.h. Referenced by LoadTGA(). |
|
|
Definition at line 21 of file texture.h. Referenced by LoadTGA(). |
|
|
Definition at line 18 of file texture.h. Referenced by LoadTGA(). |
|
|
Definition at line 22 of file texture.h. Referenced by LoadTGA(). |
|
|
Definition at line 17 of file texture.h. Referenced by LoadTGA(). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Definition at line 20 of file texture.h. Referenced by LoadTGA(). |
1.2.15