Решил создать для libimg отдельную тему по следующим причинам:
- libimg используется далеко не только в kiv, разумно продолжать разговоры о ней в данной теме, а не в теме kiv
- добавил возможность чтения формата xcf (собственно, повод для поста)
Поддержка формата не полная (нет текстовых слоёв), но остальное должно работать. Например, маски и невидимые слои:
Поддерживаются изображения с палитрой, в оттенках серого, rgb. Вот то, ради чего это всё затевалось (kolibri_wallpaper_release.xcf):
Функции слияния пикселей с учётом альфа-канала написаны и использованием MMX. Впервые работал с MMX, сильно не бейте если что. Понимаю, что есть компьютеры, не поддерживающие эту технологию (а есть и с sse*), поэтому все подобные функции вынесены в отдельный файл composite_mmx.inc, подключаемый условной компиляцией
Code: Select all
COMPOSITE_MODE equ MMX
...
match =MMX,COMPOSITE_MODE{include 'composite_mmx.inc'}
Теперь у меня пара вопросов:
- Влияет ли на производительность смешивание MMX инструкций с обычными? Или MMX только с FPU не дружит? (читал, что регистры MMX хранят мантиссы чисел при операциях с FPU, поэтому предполагаю ответ нет)
- Критичен ли для скорости вызов небольшой функции при обработке каждого пикселя? Имеет ли смысл дублировать небольшие куски кода во избежание лишних call'ов?
Если на каких-то изображениях вылетает или показывает неправильно - прикрепляйте, постараюсь исправить.