• Advertisement
Sign in to follow this  

Lesson 6 - not compiling question

This topic is 2586 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I get the error "initialization failed" when I run the program. Apparently my .bmp file does not exist, but I have created it and it is in the Resources folder in my project.

if (TextureImage[0]=LoadBMP("Data/NeHe.bmp"))

I have tried changing that line to just "/NeHe.bmp", "NeHe.bmp" and many other derivatives of that. I tried changing the type to 24-bit bmp, 16-color bmp, monochrome bmp, 256-color bmp, etc.

I don't seem to see what I am doing wrong here. I made the bmp originally and just dragged it into the Resources folder of my project from My Pictures. Can anyone give me an idea of how to go about debugging this? Any help is appreciated, thanks.

Share this post


Link to post
Share on other sites
Advertisement
I copied the code from the tutorial, but it may still be helpful to post it here. Maybe its a problem with fopen?






AUX_RGBImageRec *LoadBMP(char *Filename) { // Loads A Bitmap Image

FILE *File=NULL; // File Handle
MessageBox(NULL, Filename, "ERROR", MB_OK);
if (!Filename) // Make Sure A Filename Was Given
return NULL; // If Not Return NULL

File=fopen(Filename, "r"); // Check To See If The File Exists
if(File==NULL)
MessageBox(NULL, "File is null", "ERROR", MB_OK);

if (File) {
fclose(File); // Close The Handle
return auxDIBImageLoad(Filename); // Load The Bitmap And Return A Pointer
}

return NULL; // If Load Failed Return NULL
}

int LoadGLTextures() { // Load Bitmaps And Convert To Textures

int Status=FALSE; // Status Indicator

AUX_RGBImageRec *TextureImage[1]; // Create Storage Space For The Texture

memset(TextureImage,0,sizeof(void *)*1); // Set The Pointer To NULL

// Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit
if (TextureImage[0]=LoadBMP("Data/NeHe.bmp"))
{
Status=TRUE; // Set The Status To TRUE
glGenTextures(1, &texture[0]); // Create The Texture

// Typical Texture Generation Using Data From The Bitmap
glBindTexture(GL_TEXTURE_2D, texture[0]);
// Generate The Texture
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // Linear Filtering
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); // Linear Filtering
} //end if

if (TextureImage[0]) // If Texture Exists
{
if (TextureImage[0]->data) // If Texture Image Exists
{
free(TextureImage[0]->data); // Free The Texture Image Memory
}

free(TextureImage[0]); // Free The Image Structure
}
return Status; // Return The Status
}

Share this post


Link to post
Share on other sites
Loading BMP files is a pretty buggy process, this code has been known to not like newly created files, test if it works with the original file, if it does your only option is to abandon using BMP files and directly skip ahead a bit to lesson 24 and 33 and get the TGA code from there, though to be honest there is still a similar bug in the code, so if your having problems with TGAs too then just let me know as there is an even newer much better code available(written by yours truly), though for some reason its unreleased.

Share this post


Link to post
Share on other sites
Hi, I was just reading this tutorial yesterday and I had a similar compilation error. The problem seems to be unicode.

auxDIBImageLoad() expects a LPCWSTR rather than char*. Although char* is automatically casted to a unicode string, it ends up on a wrong code page or something. Try casting Filename to an LPWSTR using MultiByteToWideChar. Heres what I did:


AUX_RGBImageRec *LoadBMP(char* file) {
FILE *f = NULL;
int fileLen = strlen(file) + 1;
LPWSTR wfile = SysAllocStringLen(0, fileLen);
MultiByteToWideChar(CP_ACP, NULL, file, -1, wfile, fileLen);

if(!file) {
return NULL;
}

f = fopen(file, "r");

if(!f) {
return NULL;
}

fclose(f);
return auxDIBImageLoad(wfile);
}



Greetings,
HowardStern

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement