LINUX.ORG.RU

Simple Viewer GL 3.3.1

 , , , ,


0

1

Simple Viewer GL – лёгкий однооконный просмотрщик изображений.

Многое из того, что раньше делалось на CPU, теперь выполняется на GPU.

В строке статуса, которую можно отключать клавишей i, отображается базовая информация: формат, разрешение, размер в памяти (CPU + GPU), размер на диске. В режиме информации о пикселе, который включается клавишей p, отображается бабл с информацией о позиции, цвете пикселя, параметрах выделенной области.

Simple Viewer GL умеет определять тип файла по его сигнатуре (параметр -a), а не только по расширению файла. Поддерживается рекурсивный обход директории (параметр -r).

Есть возможность менять в рантайме тип фона (три базовых цвета + шахматная доска) окна или задавать кастомный цвет, что удобно при просмотре изображений с прозрачными пикселями.

Поддерживаемые форматы:

  • PNG
  • JPEG
  • JPEG 2000
  • HEIF
  • PSD (Adobe Photoshop)
  • AI (Adobe Illustrator)
  • EPS
  • XCF (GIMP)
  • GIF
  • SVG
  • TIFF
  • TARGA
  • ICO
  • ICNS (Apple Icon Image)
  • BMP
  • PNM
  • DDS
  • XWD
  • SCR (ZX-Spectrum screen)
  • XPM
  • WebP
  • OpenEXR

Поддерживаются GNU/Linux, FreeBSD и macOS. Существует сторонний форк для Windows.

Новое в Simple Viewer GL 3.3.1:

  • переработана архитектура вьювера;
  • а потому и новый чуть более гибкий рендерер;
  • благодаря рендереру профили и прочие преобразования перенёс с CPU на GPU;
  • благодаря переработанной архитектуре починил и загрузку, и прогресс (спиннер);
  • значительно снизился расход памяти. Теперь память по возможности выделяется только под несколько чанков. Нет полной распакованной копии изображения в памяти;
  • информация о пикселе тянется из видеокарты;
  • счётчик расхода памяти учитывает видеопамять;
  • добавил превью для форматов которые его поддерживают. Если есть превью в EXIF, то беру из него;
  • переработал интерфейс. Переделал рендерер, обновил и ImGui из ветки с поддержкой докинга окон;
  • новый попап EXIF в доке справа, а в него добавил категории и поиск;
  • переработал панель статуса. Просто сделал удобнее её внутри, а заодно поправил визуал;
  • теперь панель статуса не перекрывает изображение. И вообще, любое закреплённое у края окно не перекрывает изображение;
  • расширил поддержку PSD. Теперь поддерживаются практически все вариации;
  • добавил поддержку HEIF (AVIF/HEIC);
  • починил greyscale jpeg2k – теперь яркость корректная;
  • добавил поддержку цветовых профилей там, где их не было, но формат их поддерживал;
  • и ещё кучу того, что и вспомнить не могу, а логи читайте сами, мне лень.

Наверняка что-нибудь отломал, поэтому буду рад замечаниям и советам.

Лицензия GPL-2.0.

>>> Simple Viewer GL on GitHub

★★★★★

Проверено: dataman ()
Последнее исправление: hobbit (всего исправлений: 5)

v3.3.1

А CMake пишет:

****************************************
*           Simple Viewer GL           *
*                v1.0.0                *
****************************************

Кому верить? :)

Ещё и ругается:

simple-viewer-gl/src/version.cpp:10:10: fatal error: version.h: No such file or directory
   10 | #include <version.h>
      |          ^~~~~~~~~~~
compilation terminated.
dataman ★★★★★
()
Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от dataman
****************************************
*           Simple Viewer GL           *
*                v3.3.1                *
****************************************
*            Release Build             *
****************************************

Собирал через make release, как указано в инструкции

annulen ★★★★★
()
Ответ на: комментарий от annulen

Собирал через make release

А я c cmake -G Ninja -B build.

как указано в инструкции

Так собралось. :)


Какие-то флюиды, не иначе. Теперь с Ninja тоже собралось.

dataman ★★★★★
()
Последнее исправление: dataman (всего исправлений: 1)

У меня падает при попытке использовать полноэкранный режим:

Thread 1 "sviewgl" received signal SIGSEGV, Segmentation fault.
0x00007ffff7cbcff4 in Xutf8LookupString () from /usr/lib64/libX11.so.6
(gdb) bt
#0  0x00007ffff7cbcff4 in Xutf8LookupString () from /usr/lib64/libX11.so.6
#1  0x00007ffff7e775ad in ?? () from /usr/lib64/libglfw.so.3
#2  0x000055555562355d in cWindow::pollEvents (this=0x7fffffffd340) at /home/ktokarev/src/git/simple-viewer-gl/src/Window.cpp:401
#3  0x000055555562563c in main (argc=2, argv=0x7fffffffd8a8) at /home/ktokarev/src/git/simple-viewer-gl/src/main.cpp:296
(gdb) 
annulen ★★★★★
()
Ответ на: комментарий от annulen

У меня не падает, но открывает полновэкранный режим на основном мониторе, а не на котором было окно (по возвращении в оконный режим остаётся на основном экране).

UPD:

libX11.so.6

WM: KWin (Wayland)

IIIypuk ★★★★★
()
Последнее исправление: IIIypuk (всего исправлений: 1)
Ответ на: комментарий от IIIypuk

Спасибо, изучу в ближайшее время.

andreyu ★★★★★
() автор топика
Ответ на: комментарий от andreyu

Странно.

Да не, это у меня что-то с копией случилось. После git-clear всё нормально.

dataman ★★★★★
()
Ответ на: комментарий от andreyu

Что за видео драйвер / карта?

У меня тоже падает после нажатия Enter. NVIDIA GeForce GTX 1050 Mobile / 550.163.01-4 / KDE Plasma 6.5.4 (X11).

dataman ★★★★★
()

просмотр картинки через опенгл. это прямо какой-то новый уровень извращений.

bernd ★★★★★
()

Многое из того, что раньше делалось на CPU, теперь выполняется на GPU, только хуже и медленней.

kirill_rrr ★★★★★
()

Тема Ленки не раскрыта.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от bernd

А у тебя какое DE и оконный менеджер? Если гном, кеды или типа того с композитором (не чисто программным), то всё что ты видишь на экране это OpenGL, через Clutter, Cogl.

LINUX-ORG-RU ★★★★★
()

Наверняка что-нибудь отломал, поэтому буду рад замечаниям и советам.

Собрал просто как make

****************************************
*           Simple Viewer GL           *
*                v3.3.1                *
****************************************
*            Release Build             *
****************************************
* [+] OpenGL found                     *
* [+] GLFW3 found                      *
* [+] Threads found                    *
* [+] X11 found                        *
* [+] ZLib found                       *
* [+] PNG support enabled              *
* [+] JPEG support enabled             *
* [ ] EXIF support dropped             *
* [+] LCMS2 support enabled            *
* [ ] OpenJPEG2 support dropped        *
* [+] GIF support enabled              *
* [+] TIFF support enabled             *
* [+] WebP support enabled             *
* [ ] OpenEXR support dropped          *
* [+] Curl support enabled             *
* [ ] HEIF support dropped             *
****************************************
-- Configuring done (18.3s)
-- Generating done (0.2s)

Запустил из каталога сборки ./sviewgl, поперетягивал картинки мышкой, работает, перетянул каталог с картинками, работает. Перетянул каталог ~/Загрузки с разным мусором, без картинок.

dron@gnu:~/Рабочий-стол/simple-viewer-gl$ ./sviewgl 
Using default config.
terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string: construction from null is not valid
Аварийный останов      ./sviewgl
dron@gnu:~/Рабочий-стол/simple-viewer-gl$ 
LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от kirill_rrr

Потому что незачем тратить драгоценное время процессора на просмотр фоток с летних шашлыков. Ему и без этого есть чем заняться.

apt_install_lrzsz ★★★★
()
Ответ на: комментарий от apt_install_lrzsz

Как раз процессору быстрее самому просмотреть фотку чем строчить openGL-вызовы для отрисовки джипега на видеокарте. Возможно когда размер холста переваливает за 100Мпикс что то и меняется, но это к счастью весьма редкий сценарий.

kirill_rrr ★★★★★
()
Последнее исправление: kirill_rrr (всего исправлений: 1)

https://i.imgur.com/O4GR8PQ.png

1. Сверху сабж, снизу feh. Если приблизить и присмотреться, то в отличии от feh, присутствует какая-то пикселизация на границе объекта(да и не только на границе).

2. Понажимал много раз на Enter и получил

Upd: Уточнение, падает если нажать Enter и не отпускать. Падает после 2го переключения.

sviewgl: /var/tmp/portage/media-libs/glfw-3.4/work/glfw-3.4/src/input.c:274: _glfwInputKey: Проверочное утверждение «window != NULL» не выполнено.
fish: Job 1, './sviewgl ~/Pictures/' terminated by signal SIGABRT (Abort)

Также если нажать Enter подряд много раз, то переключение происходит ещё несколько секунд. Может промежуточные переключения туда-сюда стоит скипать?

3. Ожидал по PgUp\PgDown перехода к следующей\предыдущей картинке в каталоге, но не сработало, переключило на пустую.

Loki13 ★★★★★
()
Последнее исправление: Loki13 (всего исправлений: 2)
Ответ на: комментарий от kirill_rrr

Мне кажется это из-за энергосбережения на ноутах, там выводить процессор из спячки намного дороже по аккуму, чем сделать всё это на GPU.

Loki13 ★★★★★
()
Ответ на: комментарий от dataman

Спасибо.

Для создания окна и контекста используется GLFW. Или я не умею его готовить, или что-то с ним не так, но для переключения режима мне когда-то пришлось делать костыли.

Частично костыли делались для поддержки тайловых оконных менеджеров, включая hyprland.

Возможно, это повод перейти на наливную реализацию. Но очень не хочется заниматься инициализацией контекста, обработки инпута, drag-n-drop и клипбордом врукопашную. Но намек я понял, спасибо.

andreyu ★★★★★
() автор топика
Ответ на: комментарий от bernd

просмотр картинки через опенгл. это прямо какой-то новый уровень извращений.

Ага, у меня же есть CPU, зачем мне использовать GPU.

andreyu ★★★★★
() автор топика
Ответ на: комментарий от kirill_rrr

Многое из того, что раньше делалось на CPU, теперь выполняется на GPU, только хуже и медленней.

А можно в контексте вьювера пояснить, что стало медленнее после переноса вычислений на GPU?

Я вижу лишь ускорение. Тот же LUT (ICC) на CPU на моих тестовых образцах выполнялся 10+ секунд, а теперь это делается на GPU.

andreyu ★★★★★
() автор топика
Ответ на: комментарий от LINUX-ORG-RU

Спасибо, похоже что в fmtlib прилетело что-то неперевариваемое. Разберемся.

andreyu ★★★★★
() автор топика
Ответ на: комментарий от unixnik

С одним конём? )

Кони нынче дорогие, хватило только на одного :)

andreyu ★★★★★
() автор топика
Ответ на: комментарий от andreyu

Только сумма. Есть смысл разделить?

Нет разумеется, как и в сумме. У подавляющего большинства пользователей просто нет и никогда не будет изображений для которых это имеет значение. Но всё-равно прикольно, поэтому можно и разделить :)

zabbal ★★★★☆
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.