Итак, я написал вспомогательную функцию, которая просто загружает диск png-файла и загружает его в шейдер OpenGL.Функция загрузки текстур не работает правильно
Все это работает нормально и хорошо, пока я не попытаюсь загрузить несколько текстур. Проблема, с которой я сталкиваюсь, заключается в том, что она, кажется, каждый раз переписывает все предыдущие текстуры. Я понятия не имею, почему это происходит. Если код я обеспечиваю не хватает, полный источник размещена here
Вот функция LoadTexture (находится в Helper.cpp)
GLuint loadTexture(const GLchar* filepath, GLuint& width, GLuint& height)
{
// image vector.
vector<GLubyte> img;
// decodes the image to img
decode(img, filepath, width, height);
// if the image is empty return
if (img.size() == 0)
{
std::cout << "Bad Image" << std::endl;
system("pause");
return 0;
}
// return value
GLuint ret;
// gen textures
glGenTextures(1, &ret);
// bind the ret to GL_TEXTURE_2D so everyting using GL_TEXTURE_2D referrs to ret
glBindTexture(GL_TEXTURE_2D, ret);
// set parameters. Current filtering techunique is GL_LINEAR http://www.arcsynthesis.org/gltut/Texturing/Tut15%20Magnification.html
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// copy the data to the texture associated with ret.
// format is RGBA internally and externally, and the size is unsigned char, which is unsigned byte
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, &img[0]);
return ret;
}
Способ декодирования сохраняет изображение в фотошопе и магазины ширина и высота по ширине и высоте соответственно.
Если есть что-то, что я пропущу, скажите, пожалуйста.
Спасибо за любую помощь, которую я могу получить!
Почему бы не использовать динамическое распределение памяти для этого случая? –
Никогда не делал этого раньше. Как я могу это сделать? –
Сначала вы выделяете память для своей переменной gluint, а затем, когда закончите с памятью, которую вы ее удаляете. –