lodepng на окнах сбоев текстуры ogl

Я использую lodePNG для загрузки текстуры из файла png, но программа вылетает при загрузке текстуры.

char* filename = "texture.png";
unsigned width, height;
std::vector<unsigned char>image;
GLuint texture[1];
//decode
unsigned error = lodepng::decode(image, width, height, filename);
if(error) std::cerr << "decoder error " << error << ": " << lodepng_error_text(error) << std::endl;
glBindTexture(GL_TEXTURE_2D, texture[0]);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0,
GL_RGBA, GL_UNSIGNED_BYTE, &image[0]);

Я использовал VS 2010 для компиляции и ошибок нет, но происходит сбой при вызове glTexImage2D. Моя система - Windows 7, с поддержкой OGL 3.3 на видеокарте.

У меня есть другая система, которая является Mac OSX 10.6, и я всегда портирую код, и с ним вообще нет проблем на Mac. Есть ли какое-то исправление, которое я мог бы сделать, чтобы оно корректно загружало текстуру на окнах?

Вот сайт, где я получил файлы lodePNG: http://lodev.org/lodepng/

1 ответ

Решение

В вашем коде вы объявляете GLuint texture[1], массив с одним дескриптором текстуры. Затем вы связываетесь с этим неинициализированным дескриптором текстуры в этой строке:

glBindTexture(GL_TEXTURE_2D, texture[0]);

Это неверно Вы привязываетесь к дескриптору текстуры, который еще не был инициализирован. Вместо этого вам нужно сгенерировать дескриптор текстуры, вызвав glGenTextures. Тогда вы можете привязать к текстуре. Так что попробуйте это:

Добавь это:

glGenTextures(1,&texture[0]);

До этой строки:

glBindTexture(GL_TEXTURE_2D, texture[0]);

После вызова glGenTextures ваш дескриптор (texture[0]) должен иметь ненулевое значение.

Другие вопросы по тегам