Ошибка памяти при использовании OpenGL glTexImage2D

Я следил за этим руководством по OpenGL и C++: http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=06

... и я обнаружил, что столкнулся с ошибкой. Всякий раз, когда я пытаюсь скомпилировать, моя программа вылетает с ошибкой типа System.AccessViolationException. Я выделил проблему в этой функции:

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

Если вы не хотите просматривать этот учебник, память выглядит следующим образом:

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

Любая помощь будет потрясающей. Спасибо.


person Jamie    schedule 14.11.2010    source источник


Ответы (2)


Вы падаете, потому что TextureImage[0] равно NULL. Начальный memset устанавливает его в NULL; если вы будете следовать руководству, следующая строка кода будет такой:

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

Обратите внимание, что здесь есть одиночный знак =, а не двойной ==, как вы обычно видите (здесь вы даже можете получить предупреждение компилятора; чтобы подавить это, добавьте дополнительные скобки вокруг присваивания)) . Убедитесь, что вы правильно скопировали эту строку кода, и что здесь есть один =.

Если на самом деле у вас есть один =, убедитесь, что LoadBMP возвращает значение, отличное от NULL. Если он возвращает NULL, наиболее вероятной причиной является то, что он не может найти файл растрового изображения Data/NeHe.bmp либо потому, что он не существует, либо он ищет его в неправильном каталоге. Убедитесь, что ваш текущий рабочий каталог настроен правильно, чтобы он мог найти изображение.

person Adam Rosenfield    schedule 14.11.2010
comment
Лучше, чем дополнительные скобки, было бы явное сравнение. Нравится if (NULL != (TextureImage[0] = LoadBMP("Data/NeHe.bmp"))) { ... } - person Ben Voigt; 14.11.2010
comment
Похоже, что он не возвращает NULL, так как я тестировал значение, отличное от NULL, и, похоже, он прошел тест и все еще дает сбой. Что касается правильной настройки рабочего каталога, как мне это сделать? Я использую Visual Studio 2010, если это поможет. - person Jamie; 14.11.2010

Оказывается, растровое изображение, которое я пытался загрузить, было слишком большим. Я уменьшил его до 256x256px, и он работал отлично.

person Jamie    schedule 14.11.2010