LINUX.ORG.RU

shex - мой просмотрщик двоичных файлов. С++, Vulkan, glfw3

 , , , ,


3

1

Сегодня, наконец, допилил функциональность и решил выложить исходники.

Функциональность минимальная. Можно двигать клавишами вверх, вниз, page up, page down, [shift] + F3-F9, колесом мыши, а так же мышкой двигать линейку прокрутки слева.

Просто потихоньку изучаю Вулкан. Гуй встроен в шейдер.

Всем хорошего дня!

https://github.com/alexkh/shex

>>> Просмотр (600x1067, 56 Kb)

★★

Проверено: hobbit ()

Ответ на: комментарий от robus

FBO – 3.0

VAO – 3.0, использование обязательно начиная с 3.3 Core Profile

UBO – 3.1

Виноват, их не было, попутал

В 1.5 не было шейдеров

Я и сказал после, а не с

В 2.1 есть «встроенные атрибуты», «встроенные uniform-ы» и прочие, зачастую лишние вещи.

Но в целом в шейдерах не сильно что изменилось, более того даже в core 330 режиме glsl переваривает многие встроенные переменные 2.1 версии

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

Но в целом в шейдерах не сильно что изменилось

Использование UBO, вместо обычных uniform-ов довольно значимое изменение.

более того даже в core 330 режиме glsl переваривает многие встроенные переменные 2.1 версии

Вообще стандарт как бы запрещает, но многие драйверы «на пофиг» продолжают молотить невалидный клиентский код. К тому же не все встроенные переменные выпилили. А только те, что связаны с устаревшим мусором. Всякие gl_FragCoord, gl_Position и т.п. никуда не делись и после 3.3.

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

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

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

Судя по тому, что многие работы с https://www.shadertoy.com/ шустро работают на встроенных видеоадаптерах, запас производительности там уже настолько большой, что можно рисовать по пикселям достаточно ветвистые сцены.

i-rinat ★★★★★ ()
Ответ на: комментарий от fooser

Благодарю, но где там улучшения? Вместо самодостаточного запускаемого файла, вы делаете запускаемый файл, к которому надо ещё два файла в субдиректории.

Оправдана ли зависимость от GNU Make, когда скрипт сборки состоит из одной строчки?

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

А он там не в лупе. Он только при пересоздании swapchain и при выходе из mainLoop. При пересоздании swapchain – нужен, поскольку мы производим удаление ресурса и нам нужно быть уверенными, что GPU не использует его в данный момент. Единственный способ это сделать – vkDeviceWaitIdle. На выходе из mainLoop – тоже, поскольку потом будет производиться удаление всех созданных ресурсов. TC решил, что будет звать vkDeviceWaitIdle сразу после выхода из while, вместо void cleanup(), где было бы слегка логичнее и закрывалось бы приложение эдак на 10 миллисекунд быстрее.

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

угу, я просмотрел, что он за лупом вызывается, все верно написали. пора домой идти наверное :3

Keltir ()
Ответ на: комментарий от robus

Благодарю.

Всё-таки решил попробовать делать отрисовку окна только когда меняется содержимое. В Вейланде работает. Надо будет потестировать в X11… Я пока не придумал как это проверить на своём компе, ведь glfw компилируется либо под X11 либо под Вейланд…

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

Линейкой прокрутки ты скроллбар называешь? Так она не нужна, less спокойно показывает нужную инфу через стоку статуса

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

И да, не пойми неправильно. То, чо изучаешь технологию - гут. Вот только идею для тренировочной аппликухи ты, на мой взгляд, выбрал не совсем подходящую

ananas ★★★★★ ()
Ответ на: комментарий от ananas
  1. Скроллбар позволяет мышкой прокручивать файл до нужного места.

  2. Разработка графических интерфейсов - вполне себе полезное занятие. Учитывая что в С++ до сих пор нет толковой библиотеки графического интерфейса.

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

|| не осилил мейкфайл

Зачем мне твой Мейкфайл, когда есть Ninja?

svyatozar ★★ ()

Заменил-таки GLFW3 на SDL2. Теперь программа запускается гораздо быстрее! Кроме того, чтобы запустить программу как Вейланд-клиент, теперь можно просто передать ей глобальную переменную:

SDL_VIDEODRIVER=wayland ./shex shaders/frag.spv

Кроме того, SDL2 правильно выставляет app_id:

         "app_id": "shex",

который можно использовать в фильтрах настроек Sway. Например, по умолчанию у меня окна без заголовков, но для shex я хочу чтобы заголовок отображался. Теперь я могу добавить такую строчку в ~./config/sway/config:

for_window [app_id=«shex»] border normal 1

Раньше это было невозможно, потому что GLFW3 не настолько продвинут чтобы выставлять app_id.

svyatozar ★★ ()
Ответ на: комментарий от deep-purple

Цвета задаются в шейдере shaders/shader.frag: vec4(Red, Green, Blue, Alpha), каждая компонента от 0 до 1.

Цвета букв в зависимости от значения байта:

vec4 lettercolor(uint letter) {
	vec4 color = vec4(0.8, 0.8, 0.0, 1.0);
	if(letter == 0) {
		color = vec4(0.0, 0.0, 0.9, 1.0);
	} else if(letter < 32) {
		color = vec4(0.0, 0.6, 0.6, 1.0);
	} else if(letter < 128) {
		color = vec4(0.8, 0.8, 0.8, 1.0);
	} else if(letter < 192) {
		color = vec4(1.0, 0.5, 0.0, 1.0);
	}
	return color;
}

Фон нечётных строк:

		outColor = vec4(0.0, 0.012, 0.0, 1.0);

Цвета текста вверху задаются в разделе //topbox

		vec4 color = vec4(0.6, 0.6, 0.3, 1.0);

Цвета текста слева - в разделе // addrbox

		vec4 color = vec4(0.6, 0.6, 0.3, 1.0);
		if(addr % 256 == 0) {
			color = vec4(0, 0.5, 0.0, 1.0);
		}

Шейдер надо будет потом скомпилировать командой ./shmk После этого ./mk

Для компиляции шейдеров нужна утилита xxd, которая бинарник преобразует в текстовый файл frag.h

svyatozar ★★ ()
Последнее исправление: svyatozar (всего исправлений: 1)
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)