2010-11-14 4 views
0

j'ai suivi ce tutoriel sur OpenGL et C++: http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=06Erreur de mémoire en utilisant OpenGL « glTexImage2D »

... et je me suis trouvé face tout à fait l'erreur. Chaque fois que j'essaie de compiler, mon programme se bloque avec une erreur du type, System.AccessViolationException. J'ai isolé le problème dans cette fonction:

glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data); 

Si vous ne voulez pas regarder à travers ce tutoriel, la mémoire semble être mis en place comme ceci:

AUX_RGBImageRec *TextureImage[1]; 
memset(TextureImage,0,sizeof(void *)*1); 

Tous l'aide serait géniale. Merci.

Répondre

4

Vous plantez parce que TextureImage[0] est NULL. Le memset initial le définit à NULL; si vous suivez dans le tutoriel, la ligne de code suivante est la suivante:

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

Notez soigneusement qu'il ya un seul = signe ici, pas un double == que vous verriez normalement (vous pouvez même obtenir un avertissement de compilateur ici: pour supprimer cela, ajoutez des parenthèses supplémentaires autour de l'assignation)). Assurez-vous que vous avez copié cette ligne de code correctement et que vous avez un seul = ici.

Si en fait vous avez un seul =, vérifiez que LoadBMP renvoie une valeur non NULL. Si elle renvoie NULL, la cause la plus probable est qu'elle ne peut pas trouver le fichier bitmap Data/NeHe.bmp, soit parce qu'il n'existe pas, soit parce qu'il est dans le mauvais répertoire. Assurez-vous que votre répertoire de travail actuel est configuré correctement afin qu'il puisse trouver l'image.

+0

Mieux qu'une parenthèse supplémentaire serait une comparaison explicite. Comme 'si (NULL! = (TextureImage [0] = LoadBMP (" Data/NeHe.bmp "))) {...}' –

+0

Il ne semble pas retourner NULL, comme je l'ai testé pour un non-NULL valeur et il semble passer le test et toujours tomber en panne. En ce qui concerne la configuration correcte du répertoire de travail, comment faire? J'utilise Visual Studio 2010, si cela peut vous aider. – Jamie

0

Il s'avère que le bitmap que j'essayais de charger était trop grand. Je l'ai rétréci à 256x256px et cela a fonctionné parfaitement.