Hey, could someone help me plz!?
Can someone please tell me whats wrong with this code.
bool CFont::LoadTexture(TextureImage *texture,char *filename)
{
//================AADDED EXTRA+==================================
typedef struct
{ GLubyte r;
GLubyte g;
GLubyte b;
GLubyte a;
}
PIXEL, *PPIXEL;
//================AADDED EXTRA+==================================
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)
FILE *file = fopen(filename, "rb"); // Open The TGA File
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 (file == NULL) // Did The File Even Exist? *Added Jim Strong*
return false; // Return False
else
{
fclose(file); // If Anything Failed, Close The File
return false; // Return False
}
}
texture->width = header[1] * 256 + header[0]; // Determine The TGA Width (highbyte*256+lowbyte)
texture->height = header[3] * 256 + header[2]; // Determine The TGA Height (highbyte*256+lowbyte)
if( texture->width <=0 || // Is The Width Less Than Or Equal To Zero
texture->height <=0 || // Is The Height Less Than Or Equal To Zero
(header[4]!=24 && header[4]!=32)) // Is The TGA 24 or 32 Bit?
{
fclose(file); // If Anything Failed, Close The File
return false; // Return False
}
texture->bpp = header[4]; // Grab The TGA''s Bits Per Pixel (24 or 32)
bytesPerPixel = texture->bpp/8; // Divide By 8 To Get The Bytes Per Pixel
imageSize = texture->width*texture->height*bytesPerPixel; // Calculate The Memory Required For The TGA Data
texture->imageData=(GLubyte *)malloc(imageSize); // Reserve Memory To Hold The TGA Data
if( texture->imageData==NULL || // Does The Storage Memory Exist?
fread(texture->imageData, 1, imageSize, file)!=imageSize) // Does The Image Size Match The Memory Reserved?
{
if(texture->imageData!=NULL) // Was Image Data Loaded
free(texture->imageData); // If So, Release The Image Data
fclose(file); // Close The File
return false; // Return False
}
for(GLuint i=0; iimageData; // Temporarily Store The Value At Image Data ''i''
texture->imageData = texture->imageData; // Set The 1st Byte To The Value Of The 3rd Byte
texture->imageData = temp; // Set The 3rd Byte To The Value In ''temp'' (1st Byte Value)
}
fclose (file); // Close The File
//================AADDED EXTRA+==================================
unsigned char *pTexture = texture->imageData;
PPIXEL Texture = (PPIXEL)LocalAlloc(LMEM_FIXED, texture->width*texture->height*sizeof(PIXEL));
for(int j=0; j<texture->height; j++)
for(int i=0; i<texture->width; i++)
{ unsigned char b = *pTexture++;
unsigned char g = *pTexture++;
unsigned char r = *pTexture++;
Texture[(texture->height-1-j)*texture->width + i].r = b;
Texture[(texture->height-1-j)*texture->width + i].g = b;
Texture[(texture->height-1-j)*texture->width + i].b = b;
Texture[(texture->height-1-j)*texture->width + i].a = 255 - (r-g);
}
//================AADDED EXTRA+==================================
glBindTexture(GL_TEXTURE_2D, texture[0].texID); // Bind Our Texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); //GL_NEAREST);//
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); //or GL_CLAMP
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); //or GL_CLAMP
if (texture[0].bpp==24) // Was The TGA 24 Bits
{
type=GL_RGB; // If So Set The ''type'' To GL_RGB
}
glTexImage2D(GL_TEXTURE_2D, 0, type, texture[0].width, texture[0].height, 0, type, GL_UNSIGNED_BYTE, Texture);//texture[0].imageData
LocalFree(Texture);
return true;
} </i>
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement