Repolode
sebbbi

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. 1

    Установите Xcode 26 или новее с компилятором Metal, CMake и Slang 2026.18.2 или новее

  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. 3

    Соберите проект

    cmake --build build
  4. 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 обновляется ежедневно.

Похожие проекты

Кроссплатформенная библиотека рендеринга на C++, которая абстрагирует Direct3D, Metal, OpenGL, Vulkan и WebGL, чтобы вы могли использовать собственный движок.

17,6 тыс.+18 за неделю2,2 тыс.C++BSD-2-ClauseАктивно поддерживаетсяОбновлён 18 часов назад

Движок физически корректного рендеринга в реальном времени для Android, iOS, Linux, macOS, Windows и WebGL2, рассчитанный на компактность и эффективность на Android.

20,7 тыс.+30 за неделю2,3 тыс.C++Apache-2.0Активно поддерживаетсяОбновлён 8 часов назад

Открытый фреймворк для компиляции моделей машинного обучения: он позволяет настраивать конвейеры компилятора на Python и развёртывать модели на разных аппаратных платформах.

13,9 тыс.+5 за неделю4 тыс.PythonApache-2.0Обновлён 13 часов назад