Ошибка сегментации при загрузке текстуры с Devil в OpenGL

Я пытаюсь загрузить текстуру в OpenGL с помощью Devil, и у меня возникает ошибка сегментации при вызове этого конструктора

Sprite::Sprite(const char *path){

ILuint tex = 0;

ilutEnable(ILUT_OPENGL_CONV);
ilGenImages(1, &tex);
ilBindImage(tex);
ilLoadImage(path);
ilConvertImage(IL_RGBA, IL_UNSIGNED_BYTE);
width  = (GLuint*)ilGetInteger(IL_IMAGE_WIDTH);
height = (GLuint*)ilGetInteger(IL_IMAGE_HEIGHT);

glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);

glTexImage2D(GL_TEXTURE_2D,
0,
GL_RGBA,
width,
height,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
&tex);

ilBindImage(0);
ilDeleteImages(1, &tex);
ilutDisable(ILUT_OPENGL_CONV);

}

и текстура является защищенным членом

GLuint texture;

Как только этот конструктор вызывается, я получаю ошибку segfault, и она завершается, и я использую freeglut, gl, il, ilu и ilut. любая помощь будет оценена

Редактировать:

Я также решил использовать другой подход и использовать

texture = ilutGLLoadImage(path)

Функция просто загрузить его непосредственно в текстуру GL, потому что я нашел Segfault из

ilLoadImage(path)

но компилятор говорит мне, что ilutGLLoadImage () не объявлен в этой области, и у меня есть IL / il.h IL / ilu.h и IL / ilut.h все включены и инициализированы

0

Решение

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

Я думаю, вы хотели бы использовать ilGetData() вместо.

2

Другие решения

Убедитесь, что DevIL инициализирован с ilInit ( ) и изменить &tex в ilGetData ( ) и тогда это должно работать.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector