Random Rust Dev
395 subscribers
102 photos
44 videos
1 file
33 links
Разработка на языке Rust.
Пишу простыни со своими мыслями о Rust и проектах на нем.
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
Столько разных боевых искусств. Я даже названий некоторых не знаю.

Самурай прям анимешный получился.

Но больше всего вариант Шаолинь понравился.
🥴83😁3
Искал адрес больницы на яблокартах.

Поиск: Hospital
Яблокарты:
😁11
Ну вот.
Теперь я трижды отец.
24👏21🤯5🍾3😱1😎1
Я и 3д принтер
🤝19😁4👍2😢1
Я придумал как еще чуть-чуть variance убавить у картинки.

Идея в том что бы просто взять и вычесть нафиг канал G из R и B.
Особенно хороший эффект, когда там уже остаток от прошлого фильтра.
👍6
А вот настоящая текстура.
Тут эффект от нового фильтра даже больше, чем от Paeth
👍4
Одна проблема, LZ88 не так уж хорошо работает на GPU
В вашей игре физика должна позволять делать так
This media is not supported in your browser
VIEW IN TELEGRAM
😁13🙊2😱1
Плохие советы для краболюдов.

Часто бывает так, что в функции, которая принимает self нужно вызвать функцию, которая принимает &mut self.
fn final(self) {
self.mutating_foo();
}


Есть очевидный способ это сделать - объявить аргумент как мутируемым.
Для вызывающего кода это ни на что не влияет.
fn final(mut self) {
self.mutating_foo();
}


Или (менее популярно) перебиндить в теле функции
fn final(self) {
let mut me = self;
me.mutating_foo();
}


Но есть способ для того что бы инкрементить WTF_COUNT у читателя.

fn final(self) {
{ self }.mutating_foo(); 💀
}
😁175😱1
Почему на самом деле мы пишем игры на Расте
😁15💯6🔥1
Пора бы уже закончить жать картинки, но я всё никак не могу :)

Настрогал еще вариантов.
1. Реализовал rANS алгоритм
2. Поменял LZ77 и LZ78 на выдачу токенов.
3. Реализовал компрессию этих токенов через rANS.

Ну и в итоге как-то грустно, потому что от шага LZ* толку нету даже там, где, казалось бы, больше всего его должно было быть.
В итоге rANS сам по себе переплюнул LZ77 и LZ77+rANS на отфильтрованной картинке с кучей заливки.
Почему? А потому что энтропии очень мало. И не смотря на то что в токенах LZ средняя длина "повтора" около 95, rANS умудряется быть более эффективным.
Лучший результат буквально меньше, чем PNGшка
👍1
А вот уже настоящая текстура.
Здесь токены LZ77 имеют среднюю длину "повтора" в 1.77 в лучшем случае. Что приводит к результату даже большему, чем у несжатых данных.

А вот rANS опять сжал картинку лучше чем PNG.
👍3🔥1
Исправил LZ77 что бы тот не всегда кодировал референс, когда длина его слишком мала и дешевле закодировать литералы.
Размер уменьшился, стало прям сильно лучше, но все еще проигрывает чистому rANS-у фильтрованной картинки.
В том числе rANS-ирование токенов из LZ77.

Только на очень специфических картинка (как с драконом) можно получить лучший результат с LZ77 или LZ78.

А вот возьмем спрайтшит. А там... та же картина, да как так то?
Вывод - сделать N режимов, дать пользователю выбирать и кнопку "найти самый оптимальный".

Где пользователь, это тот кто напишет jkl = "1.0" у себя в Cargo.toml
А кнопка - функция
🔥2