WebGPU – это новый графический API, который объединяет Vulkan, Metal и D3D12 под единым интерфейсом и позволяет оптимально использовать возможности видеокарт в браузерах. WebGPU одновременно будет стандартом W3C и C-библиотекой, которую можно использовать в нативных приложениях – это делает ее на сегодняшний день самой перспективной заменой OpenGL для кроссплатформенной разработки.

WebGPU решает следующие проблемы OpenGL:

  • Отсутствие потоковой безопасности;
  • Модифицируемое состояние, неявная синхронизация;
  • Высокая покадровая нагрузка;
  • Перегруженность, исторически накопившееся множество различных способов делать одно и то же;
  • Отсутствие поддержки на macOS;
  • Не вполне однозначная семантика шейдерного языка GLSL, скрытые “сюрпризы” в видеодрайверах.

WebGPU выгодно отличается от bgfx и других подобных решений тем, что это будет стандарт, поддерживаемый крупнейшими софтверными корпорациями – следовательно, исключены vendor lock-in, непредвиденные поломки обратной совместимости и другие неприятные ситуации.

Есть высокая вероятность, что я постепенно откажусь от OpenGL в пользу WebGPU в своих будущих разработках – это будет происходить по мере того, как стабилизируется wgpu-native. В настоящее время API еще не готов к использованию в реальном продакшне.

В этом разделе блога я буду выкладывать материалы по WebGPU, свои и чужие – статьи, уроки, примеры, демки.

Свободные реализации

  • wgpu – реализация от Mozilla, которая войдет в Firefox. Написана на языке Rust.
  • wgpu-native – C-шный API для wgpu. Пока самая удобная для использования на практике реализация.
  • Dawn – реализация на C++ от Google, которая войдет в Chromium.

Биндинги

  • bindbc-wgpu – динамический BindBC-биндинг к wgpu-native для D, мой проект.
  • wgpu-d – статический биндинг к wgpu-native для D, включает также тонкий враппер, делающий работу с API более удобной.
  • wgpu-py – биндинг к wgpu-native для Python.

Мои статьи

Мои демки

  • wgpu-dlang – пример использования WebGPU на D. Загрузка модели OBJ, загрузка текстур, создание мип-уровней, рендеринг с использованием GGX BRDF. Используется биндинг bindbc-wgpu.