Кроссплатформенная библиотека рендеринга на C++, которая абстрагирует Direct3D, Metal, OpenGL, Vulkan и WebGL, чтобы вы могли использовать собственный движок.
sebbbi/NoGraphicsAPI
Минималистичная графическая библиотека на C++20 для Metal 4 и Vulkan 1.4: вместо буферов и наборов дескрипторов используются GPU-указатели и кучи дескрипторов.
- Звёзды
- 1,699
- Форки
- 60
- Открытые issues
- 6
- Последний коммит
- 11 часов назад
Что это?
NoGraphicsAPI — низкоуровневая графическая библиотека на C++20, воплощающая идеи из предложения Себастьяна Аалтонена «No Graphics API». Вместо создания объектов буферов, описаний вершин и наборов дескрипторов приложения выделяют GPU-память из куч, передают шейдерам 64-битные GPU-указатели и обращаются к текстурам и сэмплерам по индексам в принадлежащих приложению кучах дескрипторов.
Каждый draw или dispatch получает один GPU-указатель на корневую структуру, общую для C++ и шейдеров Slang. В ней могут храниться указатели на данные вершин, материалы, константы и индексы текстур. Благодаря этому вершинные шейдеры самостоятельно считывают нужные вершины, а поддерживать layout конвейера или привязок не нужно. Барьеры описывают работу производителей и потребителей данных, а не списки переходов ресурсов; при этом выделение памяти, время жизни ресурсов и синхронизация по-прежнему остаются на стороне приложения.
Библиотека поддерживает Metal 4 на устройствах Apple silicon под управлением macOS, iOS или iPadOS 26 и новее, а также Vulkan 1.4 с VK_EXT_descriptor_heap и VK_EXT_mesh_shader на Windows и Linux. Для Windows и macOS есть примеры с окнами, а на Linux пока поддерживается только работа без графического интерфейса.
Ключевые возможности
- 01Выделяет GPU-память из куч без публичных объектов буферов; отображённые в адресное пространство heaps предоставляют адреса и для CPU, и для GPU.
- 02Шейдеры обращаются к данным через типизированные 64-битные GPU-указатели, общие со структурами C++.
- 03Текстуры и сэмплеры в bindless-режиме индексируются через принадлежащие приложению кучи дескрипторов.
- 04Для каждого draw или dispatch используется один корневой GPU-указатель, поэтому layout наборов дескрипторов и конвейера не нужны.
- 05Шейдеры пишутся на Slang и используются в бэкендах Metal и Vulkan.
Сценарии использования
- Создание собственного рендерера с прямым контролем над GPU-памятью и привязками.
- Эксперименты с bindless-рендерингом и структурами данных для GPU-driven подхода на Metal 4 или Vulkan 1.4.
- Изучение конкретной реализации идей «No Graphics API» на C++ и Slang.
Быстрый старт
- 1
Установите Xcode 26 или новее с компилятором Metal, CMake и Slang 2026.18.2 или новее
- 2
Настройте сборку, включив examples и tests
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_SYSROOT=macosx -DNOGRAPHICSAPI_BUILD_EXAMPLES=ON -DNOGRAPHICSAPI_BUILD_TESTS=ON -DNOGRAPHICSAPI_SLANGC=/path/to/slangc - 3
Соберите проект
cmake --build build - 4
Запустите пример triangle
build/examples/triangle/example_triangle
Что важно знать
- Для бэкенда Metal требуются macOS, iOS или iPadOS 26 или новее, а также GPU Apple семейства 7 или новее; компьютеры Mac с Intel не поддерживаются.
- Для бэкенда Vulkan требуются Vulkan 1.4, а также VK_EXT_descriptor_heap и VK_EXT_mesh_shader, которых нет у многих GPU.
- В настоящее время Linux поддерживает только работу в headless-режиме; примеров с окнами нет.
В подборках
Темы
Частые вопросы
- Что такое NoGraphicsAPI?
- Минималистичная графическая библиотека на C++20 для Metal 4 и Vulkan 1.4: вместо буферов и наборов дескрипторов используются GPU-указатели и кучи дескрипторов. NoGraphicsAPI — низкоуровневая графическая библиотека на C++20, воплощающая идеи из предложения Себастьяна Аалтонена «No Graphics API». Вместо создания объектов буферов, описаний вершин и наборов дескрипторов приложения выделяют GPU-память из куч, передают шейдерам 64-битные GPU-указатели и обращаются к текстурам и сэмплерам по индексам в принадлежащих приложению кучах дескрипторов.
- NoGraphicsAPI можно использовать бесплатно? Какая у него лицензия?
- NoGraphicsAPI распространяется с открытым исходным кодом под лицензией MIT. Перед использованием в коммерческих продуктах проверьте условия лицензии.
- NoGraphicsAPI всё ещё поддерживается?
- Активно поддерживается. Последний коммит в NoGraphicsAPI — 6 нояб. 2026 г..
- Для чего можно использовать NoGraphicsAPI?
- Создание собственного рендерера с прямым контролем над GPU-памятью и привязками. Эксперименты с bindless-рендерингом и структурами данных для GPU-driven подхода на Metal 4 или Vulkan 1.4. Изучение конкретной реализации идей «No Graphics API» на C++ и Slang.
- Как установить NoGraphicsAPI?
- Установите Xcode 26 или новее с компилятором Metal, CMake и Slang 2026.18.2 или новее Настройте сборку, включив examples и tests: cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_SYSROOT=macosx -DNOGRAPHICSAPI_BUILD_EXAMPLES=ON -DNOGRAPHICSAPI_BUILD_TESTS=ON -DNOGRAPHICSAPI_SLANGC=/path/to/slangc Соберите проект: cmake --build build Запустите пример triangle: build/examples/triangle/example_triangle
- Где скачать NoGraphicsAPI?
- Исходный код и инструкции по установке — на GitHub: https://github.com/sebbbi/NoGraphicsAPI
Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.
Похожие проекты
Функциональная обёртка над WebGL, которая устраняет общее состояние GPU и позволяет описывать вызовы отрисовки как команды, компилируемые в оптимизированный JavaScript.
Движок физически корректного рендеринга в реальном времени для Android, iOS, Linux, macOS, Windows и WebGL2, рассчитанный на компактность и эффективность на Android.
Открытый фреймворк для компиляции моделей машинного обучения: он позволяет настраивать конвейеры компилятора на Python и развёртывать модели на разных аппаратных платформах.
Header-only C++-биндинги для Vulkan C API с типобезопасными enum и битовыми полями, поддержкой STL, исключениями и RAII-хэндлами.
Пошаговый курс по 3D-рендерингу: создаём программный рендерер примерно на 500 строках чистого C++, без сторонних библиотек.