TGViewer
Channel Public Channel
Random Rust Dev

Random Rust Dev

@random_rust_dev

Разработка на языке Rust.
Пишу простыни со своими мыслями о Rust и проектах на нем.
Subscribers
472
Photos
188
Videos
59
Links
44

Showing posts older than #145 · Back to latest

Older Posts 17 shown
Post #140 352
Реализовал новый лайаут для нод.
Раньше ноды всегда выстраивались как на первой картинке.

Но был запрос на построение как на правой. Когда пины и тело широкие, нода может занимать целый экран.

Теперь в SnarlStyle есть node_layout, контролирующий разметку в ноде. И каждая нода может перегрузить этот параметр через метод SnarlViewer::node_layout.
  • 👍 5
  • ❤ 3
Post #139 448
Что делать, если хотя бы одна из размерностей окна стала 0?
В вулкане есть требование, что бы image и swapchain были больше 0 по всем осям.

А еще есть требование, что бы размер swapchain-а был между текущими min и max, которые можно получить у девайса.
Которые могут быть с нулями.

Как тогда создать swapchain? Или пересоздать при изменении размера.

mev предлагает пользователю API Surface, который прячет все ужасы вулканского WSI, включая семафоры, пересоздание swapchain-ов с использование механизма retire, SUBOPTIMAL и OUT_OF_DATE ситуации.
При запросе следующего фрейма mev::Surface может пересоздать swapchain на лету если тот устарел... или его вообще еще нет.
А так же удалит старые, когда можно будет - спасибо VK_EXT_swapchain_maintenance1 - без ожидания остановки всего девайса.

Итак, swapchain безнадежно устарел, пора пересоздать. А максимальная высота и/или ширина сейчас 0. Что делать?
Отдавать ошибку пользователю? Как он ее будет хэндлить? Не хотелось бы вообще думать об этом.

Может создать image размера 1х1 и притвориться, что это и есть картинка для этого surface? А почему бы и нет. Как пользователь узнает? Surface же в 0 пикселей.
Post #138 441
Посмотрел запись стрима, на котором человек взял egui-snarl и попробовал сделать на нем UI для логических цепей.
Очень интересно наблюдать, как человек без предварительной подготовки просто берет и пробует использовать API, который я придумал.
Для меня то он очевиден, а как для других людей… для меня это всегда было загадкой. Письменный фидбэк не дает полной картины. Что ж, завеса тайны слегка приоткрыта.

Ссылка на запись стрима
https://www.youtube.com/watch?v=zigPWkPm00U
YouTube Let's make a logic circuit simulator graph in bevy game engine using egui. Let's make a logic circuit simulator graph in bevy game engine using egui. Join our little discord server, we'll be happy to have you there: http://discord.codotaku.com Share the channel with your nerdy friends! http://codotaku.com Bevy is a refreshingly…
  • 🔥 11
Post #137 423
Абсолютно случайно опубликовал новый crate - "vtid", что значит Volatile Type ID.
"А что ж это за зверь такой?" - подумали вы, наверное.
А это очень простая и совершенно ненужная 99.9% программистам вещь - это расширенный TypeId, который точно-точно меняется, если крейт перекомпилировался.
Нужен он для горячих перезагрузок, а точнее для их ускорения.
Идея проста, если Vtid типа остался прежним, то и тип никак не мог поменяться, потому что тогда его крейт бы перекомпилировался и Vtid поменялся.
А раз тип не изменился, то можно взять да и переиспользовать его старые инстансы. В частности загруженные ассеты.

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

Ссылка на сам крейт https://crates.io/crates/vtid
crates.io crates.io: Rust Package Registry
  • 👍 11
Post #136 469
Пришлось пойти на крайние меры, что бы сжать эту траву.

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

Нет, мне пришлось, образно выражаясь, расщепить атом бит!
Post #134 469
1. В процессе обучения.
2. И доучилась.

Слева-направо
Картинка в bc1
Предсказание первого цвета из каждого блока.
Абсолютная ошибка предсказания.
  • ❤ 2
Post #133 424
Просили больше нейронок? Получайте!

На видео микронейронка учится предсказывать картинку по соседям.

Цвета всех блоков на 3й картинке предсказаны нейронкой на основе соседей слева и сверху.
А точнее на входе квадрат 4х4 без правого-нижнего, а на выходе собственно правый-нижний.
  • 🔥 4
  • 👍 2
Post #132 375
Я кстати понял, почему трава такая несжимаемая.
Она в жипеге весит столько же, сколько bc1, там энтропия чуть ли максимальная.
Post #130 354
Безумная идея.
Сделать маленькую нейронку, которая будет пытаться предсказать следующий пиксель и после каждого пикселя чуть-чуть обучаться.
Если предсказания будут точны, то разница с фактическим значением будет мала. А если почти все кодируемые значения малы, то и повторяемость последовательностей будет больше.

В файл веса класть не надо. При декодировании она точно так же должна обучаться
Post #129 368
LZ78 -> LZW
873KiB -> 799KiB
  • 👍 1
Post #128 356
Заменил байт-ориентированный выход из кромпрессора на бит-ориентированный.

И сразу результат.

Пришлось попотеть чуть, за то теперь у меня есть std::io::{Read, Write} врапперы, чтоб писать и читать битики
  • 🔥 7
Post #126 401
Все же в сжимателе я напортачил.
И compression ratio оставляет желать лучшего на сложных картинках.

На простых, где много одного тона, там конечно да.
  • 😢 1
Post #125 424
Реализовал компрессию блоков формата BC1 для экономии на IO.

BC1 size: 362952 - 354KiB
JKL size: 13151 - 12.8KiB

Если я нигде не накосячил, то очень даже неплохой такой результат.
  • 👍 5
Post #123 404
Продолжаю работать над сжатием картинок.
Прочитал два папируса сегодня: по кодам Хаффмана и работы Лемпеля и Зива.
Буду использовать сжатие без потерь, что бы пожать блоки, выданные блочными сжимателями.
При чем таким образом, что бы разжать можно было эффективно на gpu
  • 🔥 1
Post #122 395
Попробовал интегрировать texpresso.
Из минусов:
1. Какие-то белые пиксели.
2. Очень долго сжимает - на видео видно пролаг при нажатии на чекбокс.
  • 💔 2
  • 👍 1
Post #121 356
На стриме я реализовывал импортер картинок в базовый RGB, что в общем-то сильно неоптимально.

Поэтому время пришло для того что бы жать картинки.

Как известно, GPU нативно поддерживают блочные сжатые форматы.
Реализовал сжатие в BC1.
Очень простое.

GUI что бы видеть результаты.
Слева картинка из файла, справа она же пожатая и разжатая обратно.
  • 👍 6
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →