No description
  • Rust 56%
  • WGSL 37.5%
  • Python 4.3%
  • Just 2.2%
Find a file
Iurii Shikov 6ea557c351
All checks were successful
ci / publish-1 (push) Has been skipped
ci / publish (push) Successful in 0s
ci / ci-1 (push) Successful in 4m17s
ci / ci (push) Successful in 0s
docs(readme): описать стенд вместо шаблонной заготовки
2026-08-25 05:25:48 +00:00
.cargo chore: template sync (#19) 2026-08-19 22:01:02 +00:00
.claude chore: sync managed files from shikos-template 2026-07-20 16:24:07 +00:00
.forgejo/workflows chore: template sync (#21) 2026-08-20 00:20:47 +00:00
assets feat: texture backdrop with procedural fallback 2026-07-18 14:56:57 +03:00
docs docs: drop reuse-scratch task brief 2026-07-20 20:40:29 +03:00
LICENSES chore: bring repo under REUSE (headers, LICENSES, REUSE.toml) 2026-07-20 20:40:21 +03:00
src chore: bring repo under REUSE (headers, LICENSES, REUSE.toml) 2026-07-20 20:40:21 +03:00
.editorconfig chore: sync managed files from shikos-template 2026-07-20 16:24:07 +00:00
.gitignore chore: template sync (#19) 2026-08-19 22:01:02 +00:00
.sync.yml chore: template sync (#19) 2026-08-19 22:01:02 +00:00
AGENTS.md chore: sync managed files from shikos-template 2026-07-20 16:24:07 +00:00
Cargo.lock feat: texture backdrop with procedural fallback 2026-07-18 14:56:57 +03:00
Cargo.toml chore: bring repo under REUSE (headers, LICENSES, REUSE.toml) 2026-07-20 20:40:21 +03:00
CLAUDE.md chore: sync managed files from shikos-template 2026-07-20 16:24:07 +00:00
clippy.toml chore: sync managed files from shikos-template 2026-07-20 16:24:07 +00:00
CODEOWNERS Initial commit 2026-07-15 20:31:47 +00:00
CONVENTIONS.md chore: template sync (#19) 2026-08-19 22:01:02 +00:00
deny.toml chore: template sync (#20) 2026-08-19 22:24:22 +00:00
justfile chore: sync managed files from shikos-template 2026-07-20 23:54:14 +00:00
LICENSE chore: sync managed files from shikos-template 2026-07-20 12:54:20 +00:00
NOTICE Initial commit 2026-07-15 20:31:47 +00:00
README.md docs(readme): описать стенд вместо шаблонной заготовки 2026-08-25 05:25:48 +00:00
REUSE.toml chore: bring repo under REUSE (headers, LICENSES, REUSE.toml) 2026-07-20 20:40:21 +03:00
rust-toolchain.toml chore: sync managed files from shikos-template 2026-07-20 16:24:07 +00:00

🔮 shikos-glass-scratch

Стенд, на котором «жидкое стекло» ShikOS доказывало, что оно вообще возможно.

Один WGSL-шейдер, девять живых ручек, полный гейт качества.

Rust iced WGSL

unsafe clippy REUSE license


Зачем этот репозиторий

Стенд отвечает на один вопрос: тянет ли iced кастомный wgpu-пайплайн, на котором держится материал стекла ShikOS. Пока ответа нет, вкладываться в боевой крейт бессмысленно — поэтому техника сначала доказывается здесь, на минимальном приложении, и только потом переезжает в shikos-iced-liquid-glass.

Это не библиотека. publish = false, API никому не обещан, ломать его можно свободно. Ценность репозитория — в том, что он показывает работающий шейдер и дисциплину, с которой он писался.


Что он рисует

Скруглённый прямоугольник стекла над тестовым фоном. Форма задана SDF, фон под ней преломляется, по краю идёт кант с бликом. Девять ручек в интерфейсе меняют материал вживую — каждая двигает картинку, а не значение в структуре.

Ручка Диапазон Что делает
radius 0 … 64 px скругление углов
blur 0 … 40 px размягчение преломлённого фона
refraction 0 … 1 сила изгиба фона у края
edge_width 0 … 8 px ширина канта
thickness 0 … 40 px глубина: как быстро затухает преломление
edge_highlight 0 … 1 яркость канта
specular 0 … 1 сила блика
light_angle −π … π направление света
dispersion 0 … 10 расщепление RGB на преломлении

Как устроен кадр

flowchart LR
    UI["Слайдеры iced<br/>девять f32"] --> UNI["Uniform-структура<br/>bytemuck, выровненная упаковка"]
    UNI --> WGSL

    subgraph WGSL ["src/glass.wgsl"]
        SDF["SDF скруглённого<br/>прямоугольника"]
        REF["Смещение выборки<br/>по градиенту SDF"]
        BLUR["Многотаповое<br/>размытие фона"]
        RIM["Кант, блик,<br/>дисперсия RGB"]
    end

    BG[("assets/backdrop.png<br/>фон под стеклом")] --> REF
    SDF --> REF --> BLUR --> RIM --> OUT["Кадр в окне iced"]

Ключевое отличие от привычного «блюра под панелью»: фон не размывается на месте, а пересемплируется со смещением по градиенту SDF — то есть действительно преломляется у края, а не просто теряет резкость.


Стек

Язык Rust, edition 2024, #![forbid(unsafe_code)]
UI iced 0.14 с бэкендом wgpu, виджет shader
Шейдер WGSL, src/glass.wgsl
Мост CPU → GPU bytemuck
Фон image (только PNG)
Логи tracing + tracing-subscriber, уровень через RUST_LOG

Запуск

just run          # cargo run
just              # список всех рецептов

Нужны Rust по rust-toolchain.toml, just и GPU с поддержкой wgpu.


Гейт качества

just ci — то же, что гоняет CI в .forgejo/workflows/ci.yml:

Шаг Что проверяет
reuse lint у каждого файла есть SPDX-заголовок и лицензия
cargo fmt --check форматирование
cargo clippy -D warnings, плюс запрет unwrap, print_stdout, print_stderr, dbg!
cargo nextest тесты, включая doc-тесты
cargo doc RUSTDOCFLAGS=-D warnings — документация без предупреждений
cargo deny лицензии и уязвимости зависимостей

Формальный бюджет кадра (≤ 1 мс) меряется criterion-бенчами уже на миграции в боевой крейт — здесь проверка перформанса ручная: окно остаётся отзывчивым, пока тянешь слайдеры (docs/glass-pr1.md).


Правила репозитория

justfile, конфигурация CI и линтеров приезжают из shikos-template и локально не редактируются — синхронизация описана в .sync.yml. Соглашения по коду — в CONVENTIONS.md: без unwrap, логи только через tracing, ошибки через thiserror. Постановка задачи на текущий этап — docs/glass-pr1.md.


Лицензия

PolyForm Strict 1.0.0 — см. LICENSE. Репозиторий REUSE-совместим.

Открытый исходный код не даёт прав на использование: читать можно, использовать — нет.