Миграция с 0.3 на 0.4
Версия 0.4 меняет бэкенд показа кадра по умолчанию: вместо wgpu
(через pixels) используется softbuffer. Для приложений, которые
полагались на wgpu или на прозрачность окна, это breaking change.
Что изменилось
- Фича
softbuffer-backendвключена в набор по умолчанию дляlightиlight-fw-core. wgpu-backendостался доступен, но больше не включается по умолчанию.- Если включены обе фичи, окно выбирает
softbuffer. - Программная растеризация не менялась: раскладка, текст и цвета по-прежнему рисуются в RGBA-буфер. Бэкенд отвечает только за показ готового кадра.
Обычное обновление
Если вы использовали набор возможностей по умолчанию, достаточно поднять версию:
[dependencies]
light = "0.4"
softbuffer включится автоматически. Ничего дополнительно настраивать не
нужно.
Если вы явно включали wgpu
Уберите wgpu-backend из списка фич или явно выключите набор по умолчанию.
Например, прежний набор по умолчанию с wgpu выглядит так:
[dependencies]
light = { version = "0.4", default-features = false, features = [
"elements-basic",
"wgpu-backend",
"a11y-winit",
] }
Если приложению нужен только бэкенд без остальных возможностей:
[dependencies]
light = { version = "0.4", default-features = false, features = ["wgpu-backend"] }
Не включайте softbuffer-backend и wgpu-backend одновременно: при обеих
фичах приоритет у softbuffer, и wgpu фактически не будет использоваться.
Если вы собирали с default-features = false
Раньше можно было включить только window и получить окно без показа кадра
(бэкенд-заглушка). В 0.4 это поведение сохранилось. Если нужен реальный вывод,
включите один из бэкендов явно:
# softbuffer
light = { version = "0.4", default-features = false, features = [
"elements-basic",
"softbuffer-backend",
"a11y-winit",
] }
# wgpu
light = { version = "0.4", default-features = false, features = [
"elements-basic",
"wgpu-backend",
"a11y-winit",
] }
Размер бинарника
Полная release-сборка демо на Windows x86_64:
| Бэкенд | Размер |
|---|---|
softbuffer (по умолчанию) | 1.70 MB |
wgpu | 7.86 MB |
Экономия — около 6.16 MB (78%). Точные цифры зависят от платформы, линкера,
профиля и набора фич, но softbuffer не тянет wgpu_core и naga.
Проверить фактический граф зависимостей:
cargo tree -i softbuffer
cargo tree -i wgpu
В сборке по умолчанию wgpu не должен присутствовать.
Системные зависимости
| Платформа | softbuffer | wgpu |
|---|---|---|
| Windows | Win32/GDI, входит в ОС | драйвер с поддержкой DX12 или Vulkan |
| macOS | AppKit/CoreGraphics, входит в ОС | Metal |
| Linux | X11 или Wayland (те же библиотеки, что нужны winit) | Vulkan/OpenGL ES и графический драйвер |
softbuffer не требует Vulkan, Metal или DX12 и работает в программном
режиме. Это удобно для виртуальных машин, удалённых сессий и сред без
полноценного GPU. Дополнительных системных пакетов сверх уже необходимых
winit обычно не требуется.
Прозрачность и альфа-канал
softbuffer принимает кадр в формате 0x00RRGGBB, поэтому альфа-канал при
показе отбрасывается. Полупрозрачные элементы внутри окна по-прежнему
выглядят корректно: Canvas смешивает их с фоном до показа. Но прозрачность
самого окна (per-pixel alpha, window-transparent) через softbuffer не
работает.
Если приложение зависит от прозрачности окна, используйте wgpu-backend и
проверьте поведение на целевой платформе.
Производительность и HiDPI
- Растеризация в обоих случаях выполняется на CPU; меняется только способ показа кадра.
- На обычных GUI-окнах
softbufferдостаточно. Для очень больших окон или высокой частоты кадровwgpuможет быть быстрее за счёт показа через GPU. - HiDPI не меняется: оба бэкенда получают физические пиксели из
winit::window::Window::inner_size().
Проверка после миграции
cargo build
cargo test
cargo tree -i wgpu
Если cargo tree -i wgpu не находит пакет, сборка использует softbuffer.
Визуально проверьте окно, ввод, прокрутку и изменение размера.