Multiple Texture Loading...

Started by
2 comments, last by zebes 23 years, 11 months ago
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
Advertisement
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
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
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
Game production:Good, quick, cheap: Choose two.

This topic is closed to new replies.

Advertisement