DevIL PNG формат для отображения в OpenGL

Я делаю некоторые пиксельные работы в OpenGL, и все шло хорошо, пока мне не пришлось загружать PNG. Я нашел вещь под названием "DevIL" и последовал примеру, который нашел. Это действительно что-то отображает, но это просто случайная радуга. Насколько я могу сказать, я делаю это правильно; Я вывожу данные в текстовый файл, чтобы проверить это. Я пробовал некоторые другие библиотеки, но их создание немного выходит за рамки моих возможностей. Вот мои настройки:

((In global scope))
unsigned char pixels[160000*3];
ILubyte * bytes  ;

((Main))
ilInit();

ilLoadImage( "test.png" ) ;

size = ilGetInteger( IL_IMAGE_SIZE_OF_DATA ) ;

bytes = ilGetData() ;

И вот моя рутина рисования:

//Color the screen all pretty
for(int i=0;i<160000*3;)
{   
    pixels[i] = a;
    i++;
    pixels[i] = b;
    i++;
    pixels[i] = c;
    i++;
}   

//Break the png
for( int i = 0 ; i < size;)
{
    if(bytes[i+3] != 255)
    {   i+=4;
            continue;   }

    pixels[i] = bytes[i];
    i++;
    pixels[i] = bytes[i];
    i++;
    pixels[i] = bytes[i];
    i++;
    i++;
}

glDrawPixels(
    400,
    300,
    GL_RGB,
    GL_UNSIGNED_BYTE,
    pixels
    );

Я знаю, что выравнивание неверно; Я исправлю это позже. Проблема в том, что цвета совершенно не верны

PS Я знаю, что вы должны использовать текстурированные квадраты

1 ответ

Решение

PNG - это сжатый формат. Похоже, ilGetData возвращает указатель на сжатые данные. Для получения декодированного изображения используйте ilCopyPixels.

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