Ошибка памяти при использовании OpenGL "glTexImage2D" - PullRequest
0 голосов
/ 14 ноября 2010

Я следовал этому руководству по 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);

Любая помощь будет потрясающей. Благодаря.

Ответы [ 2 ]

4 голосов
/ 14 ноября 2010

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

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

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

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

0 голосов
/ 14 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...