Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Миграция с 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
wgpu7.86 MB

Экономия — около 6.16 MB (78%). Точные цифры зависят от платформы, линкера, профиля и набора фич, но softbuffer не тянет wgpu_core и naga.

Проверить фактический граф зависимостей:

cargo tree -i softbuffer
cargo tree -i wgpu

В сборке по умолчанию wgpu не должен присутствовать.

Системные зависимости

Платформаsoftbufferwgpu
WindowsWin32/GDI, входит в ОСдрайвер с поддержкой DX12 или Vulkan
macOSAppKit/CoreGraphics, входит в ОСMetal
LinuxX11 или 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. Визуально проверьте окно, ввод, прокрутку и изменение размера.