Разработки от TonaTor
|
|
|
| | |
|
|
|
Готова первая альфа-версия.
На данный момент поддерживает только DDS.
|
|
|
|
Забагались скайкубы. Пытаюсь починить...
|
|
|
|
С горем пополам починил скайкубы. Но вылезла другая ошибка - не корректно работает realloc выделенной памяти на втором выходном буфере((( Из-за этого регулярно появляются "белые листы" после SetBitmapBits`а. Типа этого:
в место этого:
Буду чинить дальше...
|
|
|
|
Короче говоря, realloc - это треш. переписал всё по старому.
Код if(Ready_Images) { for(int i = 0; i < 3; i++) { if(Ready_Images[i]) {free(Ready_Images[i]); Ready_Images[i] = NULL;} } free(Ready_Images); Ready_Images = NULL; } Ready_Images = (DWORD**) malloc(3 * sizeof(DWORD*)); memset(Ready_Images, 0, 3 * sizeof(DWORD*));
for(int i = 0; i < 3; i++) { Ready_Images[i] = NULL; Ready_Images[i] = (DWORD*) malloc(Size_RI); memset(Ready_Images[i], 0, Size_RI); }
|
|
|
|
Итак! Презентую работу более чем за год.
DDS Viewer (Alpha 0.1).
+ Поддерживает около сотни подформатов dds файлов. + Есть слабая, но всё же оптимизация под слабые ПК. + Может отображать разные слои изображения (Blended, Diffuse, Alpha).
- Не может открывать TGA, BMP, JPG, JPEG, PNG, GIF, TIFF. - Не может сохранять или конвертировать файлы. - Нельзя масштабировать изображение колесом мыши. - Собственное масштабирование немного кривое. - При масштабировании может мерцать изображение. - При длинных путях файла не видно части информации о файле. - Ну... В целом сырая.
Ссылка на скачивание. (удалена из-за багов проги)
|
|
|
|
|
|
Пофиксил тупую ошибку File Stream I/O. Она тянется еще из библиотек OpenGL и заключается в том, что потоковые системы не понимают языки кроме английского. Вот и выходил File Failure...
Теперь TGA module использует WINAPI на Unicode )))
https://imgur.com/oYOPreG
|
|
|
|
|
|
И тут у меня наметились проблемы с PNG файлами. Та моя библиотека, что отвечает за PNG файлы - уже давно устарела. Версия этой библиотеки 1.5.64 - она древняя. На данный момент уже вышла 1.6.36. Поэтому не все PNG файлы будут открываться.
Невозможно просто так взять и интегрировать новую версию этой библиотеки. Она интегрирована в среду разработки.
Буду думать, что делать...
((((((((((((((((((((
|
|
|
|
Введу целый комплекс костылей для мой смотрелки. PNG всё же будут открываться. Победа над багами будет за нами!!!
|
|
|
|
Цитата TonaTor ( ) Введу целый комплекс костылей для мой смотрелки. PNG всё же будут открываться. Победа над багами будет за нами!!! Ну ты жесткий))
|
|
|
|
Цитата Ghosteron ( ) Ну ты жесткий))
)))
Немного поэкспериментирую с авто-определением сигнатур файликоф. Этим ограничусь, прокатит)))
|
|
|
|
|
|
В прочем, как и следовало ожидать - декомпрессор для DDS в CryEngine закатан в их собственную DLL`ку, и кодов от неё нет...
https://imgur.com/VkdjkAF
Пячалъ..
|
|
|
|
Избавился от "дребезжания" изображения при изменении размера окна. Просто переписал блок коррекции позиции вывода. (но если окно сильно сжать, то на 1 пиксель "дребезжать" всё равно будет))) )
https://imgur.com/CLGqZnW
|
|
|
|
Обнаружил, что распаковка из RLE в TGA работает уж сильно медленно - 2 секунды для 1024x1024 изображения. Не знаю, стоит ли вообще пытаться оптимизировать этот блок. Там более, что автоматический безмьютексный многопоток де факто невозможен, т.к. размер "чанков" слишком варьируется.
https://imgur.com/p8INymI
Проблема даже не в обработке "чанков" по отдельности. Наоборот! Это легко.
Вся проблема в диспетчеризации очереди записи во внутренний TGA`шенский буфер. Если первый "чанк" больше, а второй меньше - то второму придётся ждать, когда запишется первый, а это - простой в работе.
Можно всё сделать и через целый кластер временных буферов, и уже между ними диспетчеризаваться главным потоком через центральный мьютекс. Но стоит ли оно того? - вопрос скорее риторический...
Вот кстати "чанковая" статистика для тестового RLE изображения:
https://imgur.com/t7vVZaP
В общем оптимизация под многопоток попросту нецелесообразна
|
| | |
|
|
|
|
|
|
|
Иногда бывает так, что я могу чего-то не предусмотреть (т.е. часто), в частности ошибки в DDS модуле. Дело в том, что "ядром" ддс-модуля является давно устаревшая библиотека от nVidia. Новых её версий не выпускают, а исходникии от старых не выкладывают.
https://imgur.com/GeDhT1s
Поэтому ошибки в работе ддс-модуля более чем возможны.
И на этот случай я создал довольно сложную систему "иммунитета".
https://imgur.com/Z8Cjeq3
Её суть сводится к тому, что если в "ядре" ддс-модуля произойдет критическая ошибка - то система "иммунитета" не допустит повторного открытия похожих по Hedaer`ной сигнатуре ддс файлов. А сбойная сигнатура запишется в файл "dds_immunity.dat", чтобы и после перезапуска программы она не сбоила ))) К слову - таких сигнатур можно записать хоть несколько тысяч.
Вот пример критического сбоя:
https://imgur.com/GmKvaJA
А вот пример срабатывания системы "иммунитета":
https://imgur.com/F3URlq3
Это очередной костыль. Его использование весьма неоднозначно, т.к. он в теории может заблокировать отображение нормальных файлов.
Буду исследовать эффективность его работы...
|
| | |
|
|
|
Это адище какое-то...
Из более чем сотни форматов DDS файлов - тупая nVidia`вская библиотека не умеет работать примерно с половиной... Я в а*уе... Не знаю, что делать.
https://imgur.com/skiAumS
https://imgur.com/kHsmCiT
Первый-же майкросовтовский BCn тест показал, что не работают все BC 5,6,7 декомпрессоры. Не работает "DXGI 54 - R16 FLOAT" и ещё многие другие.
В поисках ответов придется копать DirectX3D11 с его вечными Device Failure и глючащими Compute Shader Accelerated`ами...
Дичь
|
|
|
|
|
|
Не буду расписывать, что я узнал о DDS`ах за последние пару дней. Просто выпуск бета версии проги откладывается на неопределённое время...
Буду курить мануалы по DirectX 11.
Тема возобновлена
|
|
|
|
|
|
|
|
https://imgur.com/IkV3q1u
Примерно такие чувства я испытал, когда спустя полтора года смог добиться от DirectXTex-master`а первых результатов.
|
|
|
|
как тебе не лень работать с таким кол-вом непонятной информации))
|
|
|
|
Ghosteron, в основном от безделья
|
|
|
|
В общем, для работы моей смотрелки понадобится DirectX не ниже 11 версии. Увы. Я не могу обойти эту зависимость ((((
У простых смертных нет доступа к коду этой "Либки".
https://imgur.com/sk8Cm9m
|
|
|
|
Тут такая фигня...
На донных ПК будут проблемы с DirectX функциями, в частности с вертексными шейдерами (VertexShader).
https://imgur.com/Q2QCYIh
https://imgur.com/F8XfPcb
Не могу точно сказать зачем оно здесь.
https://imgur.com/PeNAxgz
Но в том числе через неё рендерется текстура.
Любая попытка её отключения/изоляции приводит либо к зависанию проги, либо к "Синьке"
https://imgur.com/SO7rXty
(Сорян за хлам на столе. Перепаиваю и перепрограммирую клавиатуру - ещё один мой проект)
Так что не обессудьте - но для юзания этой проги понадобится: 1 - видюха поддерживающая DirectX 11, 2 - установленный DirectX 11 на компе.
|
|
|
|
|
|
|
|
|
|
Переделал уйму внутренних структур данных. Теперь есть поддержка DX10`ых блоков. Научился вычленять комментарии из DDS файла.
https://imgur.com/F4TA0p6
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Вот кстати секрет великолепного сжатия уже сжатых dds текстур типа DXT1 DXT2 DXT3 DXT4 DXT5 RXGB и ATI1.
https://imgur.com/fKW63gY
Алгоритмы сжатия типа BC1,2,4,5,6,7 и ATI1 формируют свои собственные цветовые таблицы, которые в следствии упрощения цветов очень часто повторяются. В результате создаётся раздолье для алгоритмов LZ семейства, в т.ч. и deflate. Даже для унылого RLE сжатия, - здесь есть чем заняться.
Вот пример упаковки 7-zip`ом по методу LZMA:1536k 847 КБ`айтной BC2 DXT3 текстуры.
https://imgur.com/XYjNnmP
Как видно, в результате упаковки текстура ужалась до 156 КБ. Неплохой результат для сжатия уже сжатых данных. Хех )))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|