Я написал приложение на SDL + OPENGL + C++ в CodeBlocks. Обнаружил, что при запуске исполняемого файла, скомпилированного в релизе (при запуске в релизе в самой среде всё отлично работает) приложение некоторые .png файлы не загружает (а именно png-24) и выдаёт в файл для ошибок (stderr) "libpng warning: Interlace handling should be turned on when using png_ read_ image". Как выяснилось, sdl_ image использует такую libpng(а именно libpng15-15.dll, другие я пробовал, sdl_image вроде требует именно эту либу), в которой функция png_read_image имеет ошибку. Я долго искал решение (png-24 нужны), качал вроде бы более новые версии libpng, но всё тщетно. Нашёл патч, который должен фиксить эту ошибку: --- libpng-1.5.0/pngread.c.ark 2011-01-14 12:27:23.440018507 +0100 +++ libpng-1.5.0/pngread.c 2011-01-14 12:28:02.866685173 +0100 @@ -841,7 +841,7 @@ png_read_image(png_structp png_ptr, png_ } else { - if (!(png_ptr->transformations & PNG_INTERLACE)) + if (png_ptr->interlaced && !(png_ptr->transformations & PNG_INTERLACE)) { /* Caller called png_start_read_image or png_read_update_info without * first turning on the PNG_INTERLACE transform. We can fix this here, но не пойму? как его прицепить к проекту. Скомпилировать свою libpng из исходников пока не получается (очень не хочется этим заниматься). Помогите пожалуйста!
Ответ
Итак, нашёлся ответ. Собственно я нашёл решение только по другим странностям, когда релиз и дебаг версии начали работать совсем не так, как скомпилированные .ехе. начали вылетать ошибки на простейших функциях opengl и сам .ехе вариант очень тормозил. Оказывается я в начале сунул какую-то кривую версию библиотеки opengl в папку и компилятор работал с нормальной, а вот ехе с кривой.
Комментариев нет:
Отправить комментарий