Вот большая проблема с моим проектом:
Мне нравятся учебники на сайте NeHe, и Windows XP отлично запускала программы. Однако, когда я переформатировал свой компьютер, изменил ОС на Windows Vista и переустановил мой компилятор Dev-C ++, а затем я попытался открыть любую программу C ++, которая использовала текстуры, программа потерпела крах.
Я понял, что мой glaux.h пропал без вести. Я нашел файл в интернете и перекомпилировал мой проект, но он все равно потерпел крах. Все прошло хорошо, когда я исключил функции текстур.
Где проблема и что я могу сделать, чтобы решить ее?
Я думал, что один из них является виновником:
ОС Windows Vista, моя видеокарта, glaux.h и библиотеки (я знаю, что она содержит ошибки), сам OpenGL.
.
Обновление: я определил источник проблемы.
Этот кусок кода вызвал сбой моей программы:
if (TextureImage[0]) {
if (TextureImage[0]->data) {
free(TextureImage[0]->data);
}
free(TextureImage[0]);
}
По какой-то причине моя программа всегда падает, когда я заказываю ее для освобождения памяти. Когда я закомментировал этот раздел, моя программа работает нормально, за исключением того, что все цвета потемнели (я думаю, это из-за цветов моего растрового файла). Любые советы?
.
Ответить: Matias Valdenegro
Ну, это было получено из урока NeHe6, который работал нормально, когда я все еще использовал Windows XP. Абсолютно ничего не изменилось, когда я перешел на Windows Vista.
Просто чтобы вы знали, вот вся функция:
#define NoOfTextures 3
GLuint texture[NoOfTextures];
int LoadGLTextures()
{
int Status=FALSE;
AUX_RGBImageRec *TextureImage[NoOfTextures];
memset(TextureImage,0,sizeof(void *)*1);
if (TextureImage[0]=LoadBMP("Data/Bitmaps/texture.bmp"))
{
Status=TRUE;
glGenTextures(1, &texture[0]);
glBindTexture(GL_TEXTURE_2D, texture[0]);
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);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
if (TextureImage[0] != NULL) {
if (TextureImage[0]->data != NULL) {
free(TextureImage[0]->data);
}
free(TextureImage[0]);
}
}
return Status;
}
.
Дополнительная информация:
Я часто перестраиваю свой проект, и LoadBMP () является частью того же заголовочного файла. Это функция LoadBMP ():
AUX_RGBImageRec *LoadBMP(char *Filename)
{
FILE *File=NULL;
if (!Filename)
{
return NULL;
}
File=fopen(Filename,"r");
if (File)
{
fclose(File);
return auxDIBImageLoad(Filename);
}
return NULL;
}
Мне это кажется довольно ясным.