OK, I have been tweaking and modifying the rest of my game, but I desperately need tog et multiple texture loading working. Before I would only load two or three textures and reference them through loops and checks for the one small level I created. However, I needed a much more flexible system if I ever wanted to make something as nice as Unreal, so I have started working on it, but it won’t work. Here are my code snippets, maybe one of you guys can help.
//Finds The Right Texture For
//My Triangle Drawing Routine
unsigned long FindTexture(char *texname)
{
char texbuf[32];sprintf(texbuf, “%s”, texname);
for(unsigned long loop = 0; loop < MAX_TEXTURES; loop++)
if(strstr(texture[loop].name, texbuf) != NULL)
return (loop + 1);return 0;
}//This Is SUPPOSED To Load The
//Bitmaps Each Object Uses
BOOL LoadBMP(unsigned long numTextures)
{
char texbuf[256];
int texnum = 0;
GLubyte fixer, image[32][32][3];
BOOL status;
FILE *texfile;
BITMAPFILEHEADER bmfh;
BITMAPINFOHEADER bmih;//Generate the proper number of textures…
glGenTextures(numTextures, &texture[0].handle);for(unsigned long loop = 0; loop < numTextures; loop++)
{
//See if the current texture is already loaded…
status = TRUE;
for(unsigned long t_loop = 0; t_loop < MAX_TEXTURES; t_loop++)
if(strstr(texture[t_loop].name, area.object[loop].Texture) != NULL)
{
status = FALSE;
break;
}//The texture was loaded, loop and go for the next one... if(!status) continue; sprintf(texture[texnum].name, "%s", area.object[loop].Texture); MessageBox(glwnd, texture[texnum].name, "LoadBMP(unsigned long)", MB_OK); sprintf(texbuf, "Textures\\%s", texture[texnum].name); if((texfile = fopen(texbuf, "rb")) == NULL) return FALSE; fread(&bmfh, sizeof(BITMAPFILEHEADER), 1, texfile); fread(&bmih, sizeof(BITMAPINFOHEADER), 1, texfile); fread(&image, sizeof(image), 1, texfile); fclose(texfile); for(short int x_loop = 0; x_loop < 32; x_loop++) { for(short int y_loop = 0; y_loop < 32; y_loop++) { fixer = image[y_loop][x_loop][0]; image[y_loop][x_loop][0] = image[y_loop][x_loop][2]; image[y_loop][x_loop][2] = fixer; } } glBindTexture(GL_TEXTURE_2D, texture[texnum].handle); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, 32, 32, GL_RGB, GL_UNSIGNED_BYTE, image); texnum++; }
return TRUE;
}//And This Is How I Bind To
//Textures And Draw Them…
for(unsigned long o_loop = 0; o_loop < area.numObjects; o_loop++)
{
glBindTexture(GL_TEXTURE_2D, FindTexture(area.object[o_loop].Texture));
glBegin(GL_TRIANGLES);
for(int t_loop = 0; t_loop < area.object[o_loop].numTriangles; t_loop++)
{
glTexCoord2f(area.object[o_loop].triangle[t_loop].vertex[0].u, area.object[o_loop].triangle[t_loop].vertex[0].v);
glVertex3f(area.object[o_loop].triangle[t_loop].vertex[0].x, area.object[o_loop].triangle[t_loop].vertex[0].y, area.object[o_loop].triangle[t_loop].vertex[0].z);glTexCoord2f(area.object[o_loop].triangle[t_loop].vertex[1].u, area.object[o_loop].triangle[t_loop].vertex[1].v); glVertex3f(area.object[o_loop].triangle[t_loop].vertex[1].x, area.object[o_loop].triangle[t_loop].vertex[1].y, area.object[o_loop].triangle[t_loop].vertex[1].z); glTexCoord2f(area.object[o_loop].triangle[t_loop].vertex[2].u, area.object[o_loop].triangle[t_loop].vertex[2].v); glVertex3f(area.object[o_loop].triangle[t_loop].vertex[2].x, area.object[o_loop].triangle[t_loop].vertex[2].y, area.object[o_loop].triangle[t_loop].vertex[2].z); } glEnd(); }
Right now the level has the “Carved Stone.bmp” image for the walls, which will NOT load for some reason, and it uses “Tiles.bmp” for the ceiling/floor, which does load. Any ideas with what is wrong here, and after it’s fixed, if there is any faster way to do this? Thanks for the help.