OpenGL + FreeImage белые текстуры

При попытке отрисовать текстуру, на экран отображается только белый квадрат и ничего более. Как только не пытался уже это исправить, поэтому обращаюсь к сторонней помощи. Вот код:

GLuint LoadTexture(IMAGE img, std::string filename) // функция загрузки текстуры
{
    const char* charFilename = filename.c_str(); // открываем файл
    GLuint texture;                              // создадим текстуру OpenGL
    FIBITMAP* bitmap = FreeImage_Load(
        FreeImage_GetFIFFromFilename(charFilename), charFilename, PNG_DEFAULT);
    // Тип растрового изображения
    // Имя файла для декодирования
    // Флаги для включения или отключения функций плагина

    // Преобразует растровое изображение в 32-битное.
    FIBITMAP* pImage = FreeImage_ConvertTo32Bits(bitmap);//Аргумент - Дескриптор растрового изображения FreeImage.
    int nWidth = FreeImage_GetWidth(pImage);// получаем ширину растрового изображения в пикселях
    int nHeight = FreeImage_GetHeight(pImage);// получаем высоту
    img.width = nWidth;
    img.height = nHeight;

    // тип текстуры, мипмап-уровень, в каком формате мы хотим хранить текстуру, 
    // указываем ширину и высоту результирующей текстуры, всегда должен быть равен 0, 
    // указываем формат и тип данных исходного изображения, фактические данные изображения
    glGenTextures(1, &texture);
    glBindTexture(GL_TEXTURE_2D, texture);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, nWidth, nHeight,
        0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, (void*)FreeImage_GetBits(pImage)); //загрузка тестуры в память

    // устанавливаем параметры наложения и фильтрации текстур (для текущего связанного объекта текстуры)
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);//Аргумент №1: С каким типом изображения (1D- или 2D-) мы собираемся работать
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);// Аргумент №2 : Для какой оси текстуры будет задаваться выбранный нами режим наложения
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);// мы хотим настроить его как для оси S, так и для оси T.
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);// Аргумент №3: Указываем режим наложения текстуры
    // GL_LINEAR-фильтрацию для текстур, масштабируемых с увеличением масштаба. 

    FreeImage_Unload(pImage);// удаляет ранее загруженную карту FIBITMAP из памяти. 

    return texture;
}

// отрисовка текстуры
void drawImage(IMAGE img, int x, int y,int width, int height) {
    glClear(GL_COLOR_BUFFER_BIT);
    glBindTexture(GL_TEXTURE_2D, img.texture);
    glEnable(GL_TEXTURE_2D);
    glBegin(GL_QUADS);
    glTexCoord2i(0, 0); glVertex2i(x, y);
    glTexCoord2i(0, 1); glVertex2i(x, y+width);
    glTexCoord2i(1, 1); glVertex2i(x+width, y+width);
    glTexCoord2i(1, 0); glVertex2i(x+width, y);
    glEnd();
}

Ответы (0 шт):