• Advertisement
Sign in to follow this  

Weird Access Violation Error

This topic is 2471 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've been toying with opengl for a little while now and have made my way down into NeHes 6th and 7th tutorials. I have no problem at all understanding the tutorials (even though I have to gut the windows code from them cause I'm using SDL). I successfully got tutorial 6 working in my own coding method with SDL. I moved onto tutorial 7 and decided to do a recode on my load texture function to include all 3 filter methods shown. I of course wanted to test my new function so I skipped the light portion and went ahead and compiled and ran the code. This is where the error pops up. The program crashes at startup. I run in debug and it gives me an Access violation that it says is no where in my code (kinda hard to explain that one but when i try to be shown where in the code the violation takes place it tells me no source code applicable).
Now heres the weird part. If i compile and run the code using the bmp file from tutorial 6 it runs perfectly. When I switch out the bmp with the one from 7 it crashes on startup and spits out the Access Violation.
I've tried completely closing the IDE and restarting it. I've tried commenting out lines until i found the one that crashes it. I've tried pretty much everything i can think of. Its just wierd cause it works with the one but not the other. Here's my code.


//Loading Texture to GLuint texture[] is declared as GLUint texture[3];
texture[0] =LoadTexture("Crate.bmp", 1);


//Funtion to load img and convert to texture

int LoadTexture(const char *file, int TexFilter)
{
SDL_Surface *tex = IMG_Load(file);
GLuint texture;

switch(TexFilter)
{
case 1:
if(tex)
{
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

glTexImage2D(GL_TEXTURE_2D, 0, 3, tex->w, tex->h, //IF commented out the program will run but will be just a black screen with no crashing
0, GL_BGR, GL_UNSIGNED_BYTE, tex->pixels);

SDL_FreeSurface(tex);
return texture;
}
break;
case 2:
if(tex)
{
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);

glTexImage2D(GL_TEXTURE_2D, 0, 3, tex->w, tex->h,
0, GL_BGR, GL_UNSIGNED_BYTE, tex->pixels);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

SDL_FreeSurface(tex);
return texture;
}
break;
case 3:
if(tex)
{
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);

gluBuild2DMipmaps(GL_TEXTURE_2D, 3, tex->w, tex->h,
GL_BGR, GL_UNSIGNED_BYTE, tex->pixels);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);

SDL_FreeSurface(tex);
return texture;
}
break;
default:
SDL_FreeSurface(tex);
return NULL;
}
SDL_FreeSurface(tex);
return NULL;
}



And heres my specs (shouldn't matter for something this simple for programming though I would think.
Using
VS Studios 2010 Ultimate
Win 7 Ultimate 32 bit
4 gigs ram
Nvidia 9800 Geforce graphics card
Core 2 duo Intel processor
SDL with OpenGL both updated to latest releases

Come to think of it I think it may be because I didn't free the texture?
Its late here where i'm at and I'm done fooling with it tonight but if that might be it please say so and i'll test it tomorrow after a reboot.

Share this post


Link to post
Share on other sites
Advertisement
Ok, I have ended up answering my own question. Its pretty simple really and i kick myself for not thinking about it yesterday. The two different bmp file were saved with 2 different bit depths. Apparently my code won't handle but the one bit depth, so I converted the one that didn't work to same as the one that did and now both are working. If anyone else has this problem try checking that.

Share this post


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

  • Advertisement