Multiple Texture Loading...
Hey guys-n-gals,
I am trying to do some OGL programming and have come accross a hurdle.
I am trying to load in multiple textures but am having trouble. Below is the modified code from the tutorial20.
When I run the program, it just crashes.
//-------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------
int LoadGLTextures(char *Filename, int num) // Load Bitmaps And Convert To Textures
{
if (num>MAXTEXTURES)
{
return NULL;
}
int Status=FALSE; // Status Indicator
AUX_RGBImageRec *TextureImage[1]; // Create Storage Space For The Texture Data
memset(TextureImage,0,sizeof(void *)*1); // Set The Pointer To NULL
if (TextureImage[1]=LoadBMP(Filename)) // Texture to load
{
Status=TRUE; // Set The Status To TRUE
glGenTextures(1, &texture[num]); // Create Texture
glBindTexture(GL_TEXTURE_2D, texture[num]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[1]->sizeX, TextureImage[1]->sizeY,
0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[1]->data);
}
if (TextureImage[1]) // If Texture Exists
{
if (TextureImage[1]->data) // If Texture Image Exists
{
free(TextureImage[1]->data); // Free The Texture Image Memory
}
free(TextureImage[1]); // Free The Image Structure
}
return Status; // Return The Status
}
//-------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------
Any ideas??
Thanks!
-zebes
zebes@mindspring.com
zebes@mindspring.com
i think its all the:
TextureImage[1]
arrays in c/c++ are 0-index based.
AUX_RGBImageRec *TextureImage[ 1 ];
array with one element, but the fist element is:
TextureImage[0]->....
so try change all index'es to zero ( except in the declaration )
...TextureImage[0]....
also since the function only load one texture at a time you dont need to declare a array..
( i didn't compile following, but it could work if you fill out the gabs .-) )
AUX_RGBImageRec *TextureImage = 0; // Create Storage Space For The Texture Data
if (TextureImage=LoadBMP(Filename)) // Texture to load
{
....
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage->sizeX, TextureImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, textureImage->data);
if (TextureImage->data) // If Texture Image Exists
{
free(TextureImage->data); // Free The Texture Image Memory
}
free(TextureImage); // Free The Image Structure
return true;
}
return false;
Edited by - Claus Hansen Ries on 4/26/00 5:07:40 AM
TextureImage[1]
arrays in c/c++ are 0-index based.
AUX_RGBImageRec *TextureImage[ 1 ];
array with one element, but the fist element is:
TextureImage[0]->....
so try change all index'es to zero ( except in the declaration )
...TextureImage[0]....
also since the function only load one texture at a time you dont need to declare a array..
( i didn't compile following, but it could work if you fill out the gabs .-) )
AUX_RGBImageRec *TextureImage = 0; // Create Storage Space For The Texture Data
if (TextureImage=LoadBMP(Filename)) // Texture to load
{
..
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage->sizeX, TextureImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, textureImage->data);
if (TextureImage->data) // If Texture Image Exists
{
free(TextureImage->data); // Free The Texture Image Memory
}
free(TextureImage); // Free The Image Structure
return true;
}
return false;
Edited by - Claus Hansen Ries on 4/26/00 5:07:40 AM
Ries
Thanks for the tip.
Your method was better than mine but however, it still crashes....hmmm...maybe I should try glut???
thanks anyway,
-zebes
zebes@mindspring.com
Your method was better than mine but however, it still crashes....hmmm...maybe I should try glut???
thanks anyway,
-zebes
zebes@mindspring.com
zebes@mindspring.com
The problem lies within:
AUX_RGBImageRec *TextureImage[1];
memset(TextureImage,0,sizeof(void *)*1);
TextureImage is a pointer to the array of pointers....
So when you do the memset, it''s just making you program think that the array is located at 0 in memory, so when you try and store the result from LoadBMP into the first element of the array, it''s trying to store the value at memory address 0.
This is a Bad Thing.
What you meant is:
memset( TextureImage[0], 0, sizeof( void *) ); // set the pointer to null.
but actually you don''t need to do this as you just overwriting it on the next line....
cheers dan
AUX_RGBImageRec *TextureImage[1];
memset(TextureImage,0,sizeof(void *)*1);
TextureImage is a pointer to the array of pointers....
So when you do the memset, it''s just making you program think that the array is located at 0 in memory, so when you try and store the result from LoadBMP into the first element of the array, it''s trying to store the value at memory address 0.
This is a Bad Thing.
What you meant is:
memset( TextureImage[0], 0, sizeof( void *) ); // set the pointer to null.
but actually you don''t need to do this as you just overwriting it on the next line....
cheers dan
Game production:Good, quick, cheap: Choose two.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement
Recommended Tutorials
Advertisement