WebGPU
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.
Мои статьи
- “WebGPU” (журнал “FPS”, 06/12/2020)
- “Первое знакомство с WGSL” (журнал “FPS”, 27/05/2021)
- “WebGPU is the Future of Graphics Development, in D as Well” (24/05/2021)
- “WebGPU: впечатления за два года” (блог DLangGamedev, 01/03/2023)
Мои демки
- wgpu-dlang – пример использования WebGPU на D. Загрузка модели OBJ, загрузка текстур, создание мип-уровней, рендеринг с использованием GGX BRDF. Используется биндинг bindbc-wgpu.