Как обычно бывает, искал одно а нашел то, что уже второй год ищу))
Вообщем давно пытался найти адекватный загрузчик Jpeg, так как делфийский сильно тормознутый, а сценовский, выдранный из библиотеки GraphicEx, требует за собой таскать кучу объектных файлов.
Кроме убогих подделок и врапперов ничего путного под Делфи не попадалось. Тут решил поискать адекватную математическую библиотеку, оптимизированную под SSE/SSE2, и первой же ссылкой попал на загрузчик jpeg под делфи, написанный на чистом ассемблере c полной оптимизацией под SSE/SSE2... Это 3700 строк кода на ассемблере... от такого просто крыша едет, а оно еще и работает :)
Вообщем так, для теста взял ужасно неудачную текстуру, с разрешением 4096х4096 24бита цвета, после компрессии с качеством 80% она занимала 8,5Мб. Для теста загружал эту текстуру 10 раз, освобождая после каждой загрузки память. Результат - с использованием загрузчика Лишке загрузка заняла 13.35с, загрузка этим декодером - 6.52с, тобишь в два раза быстрее!!! Таким образом, текстура размером 48Мб грузится и декодируется всего за 0.65с (если без загрузки, то 0.4с). Тесты с текстурами по-меньше и черно-белыми так же показал стабильную двукратную экономию времени загрузки.
При этом вся библиотека это один файл на 170кб, который после компиляции добавляет к проекту всего 19кб... Библиотека распространяется как MPL/GPL/LGPL tri-license.
В основе проекта лежит разработка каких-то японцев, но так как у меня с японским туго, то эту часть я пропустил :)
Из недостатков - не умеет грузит Progressive Jpeg, но для текстур это не столь критично, зато сразу возвращает указатель на массив пикселей, что порядком упрощает загрузку текстуры в видеопамять.
Форум проекта: http://synopse.info/forum/viewtopic.php?id=8
Блог: Fast-JPEG-decoder-using-SSE/SSE2-version-1.1
Тот же автор написал обертку над GDI+ для делфи, позволяющую грузить еще 4 формата: GIF-TIF-PNG-and-JPG-pictures-TGraphic-read/write-via-GDI
Хоть автор и рекомендует использовать эту библиотеку вместо своего "Fast JPEG decoder", но так мы привязываемся к Windows, и после загрузки достаточно проблематично получить указатель на массив пикселей, чтоб можно было загрузить данные в OpenGL.
Кроме этого, там же обнаружил разработку еще одного загрузчика jpeg под делфи - NativeJpg (автор не безызвестного NativeXML), автор утверждает что скорость загрузки на 30% выше чем у загрузчика IJG, но пока не тестил, так как браузер ругается что его сайт заражает компьютеры.
Навскидку, не нашел там способа получить сырой битмап, да и таскать с проектом еще пол сотни модулей как-то не хочется.
Вообщем давно пытался найти адекватный загрузчик Jpeg, так как делфийский сильно тормознутый, а сценовский, выдранный из библиотеки GraphicEx, требует за собой таскать кучу объектных файлов.
Кроме убогих подделок и врапперов ничего путного под Делфи не попадалось. Тут решил поискать адекватную математическую библиотеку, оптимизированную под SSE/SSE2, и первой же ссылкой попал на загрузчик jpeg под делфи, написанный на чистом ассемблере c полной оптимизацией под SSE/SSE2... Это 3700 строк кода на ассемблере... от такого просто крыша едет, а оно еще и работает :)
Вообщем так, для теста взял ужасно неудачную текстуру, с разрешением 4096х4096 24бита цвета, после компрессии с качеством 80% она занимала 8,5Мб. Для теста загружал эту текстуру 10 раз, освобождая после каждой загрузки память. Результат - с использованием загрузчика Лишке загрузка заняла 13.35с, загрузка этим декодером - 6.52с, тобишь в два раза быстрее!!! Таким образом, текстура размером 48Мб грузится и декодируется всего за 0.65с (если без загрузки, то 0.4с). Тесты с текстурами по-меньше и черно-белыми так же показал стабильную двукратную экономию времени загрузки.
При этом вся библиотека это один файл на 170кб, который после компиляции добавляет к проекту всего 19кб... Библиотека распространяется как MPL/GPL/LGPL tri-license.
В основе проекта лежит разработка каких-то японцев, но так как у меня с японским туго, то эту часть я пропустил :)
Из недостатков - не умеет грузит Progressive Jpeg, но для текстур это не столь критично, зато сразу возвращает указатель на массив пикселей, что порядком упрощает загрузку текстуры в видеопамять.
Форум проекта: http://synopse.info/forum/viewtopic.php?id=8
Блог: Fast-JPEG-decoder-using-SSE/SSE2-version-1.1
Тот же автор написал обертку над GDI+ для делфи, позволяющую грузить еще 4 формата: GIF-TIF-PNG-and-JPG-pictures-TGraphic-read/write-via-GDI
Хоть автор и рекомендует использовать эту библиотеку вместо своего "Fast JPEG decoder", но так мы привязываемся к Windows, и после загрузки достаточно проблематично получить указатель на массив пикселей, чтоб можно было загрузить данные в OpenGL.
Кроме этого, там же обнаружил разработку еще одного загрузчика jpeg под делфи - NativeJpg (автор не безызвестного NativeXML), автор утверждает что скорость загрузки на 30% выше чем у загрузчика IJG, но пока не тестил, так как браузер ругается что его сайт заражает компьютеры.
Навскидку, не нашел там способа получить сырой битмап, да и таскать с проектом еще пол сотни модулей как-то не хочется.
Комментариев нет:
Отправить комментарий