Repolode
sebbbi

sebbbi/NoGraphicsAPI

基于 Metal 4 与 Vulkan 1.4 的极简 C++20 图形库,用 GPU 指针和描述符堆取代传统缓冲区与绑定模型。

Star
1,708
Fork
61
未关闭 Issue
6
最近提交
8小时前

这是什么?

NoGraphicsAPI 是一个底层 C++20 图形库,实现了 Sebastian Aaltonen 提出的 "No Graphics API" 设计思路。应用不再创建缓冲区对象、顶点布局和描述符集,而是从堆中分配 GPU 内存,把 64 位 GPU 指针传给着色器,并通过索引引用应用自己管理的描述符堆中的纹理和采样器。

每次绘制或调度只需传入一个指向根参数结构的 GPU 指针,该结构由 C++ 与 Slang 着色器共享,可以包含顶点数据、材质、常量和纹理索引。顶点着色器直接读取自己的顶点数据,无需维护管线或绑定布局。同步屏障描述的是生产者与消费者之间的依赖关系,而不是资源状态转换列表;内存分配、资源生命周期和同步仍由应用负责。

该库支持运行 macOS、iOS 或 iPadOS 26+ 的 Apple silicon 设备上的 Metal 4,以及在 Windows 和 Linux 上支持 VK_EXT_descriptor_heap 与 VK_EXT_mesh_shader 的 Vulkan 1.4。Windows 和 macOS 提供带窗口的示例,Linux 目前仅支持无头模式。

核心功能

  • 01从堆中分配 GPU 内存,无需公开的缓冲区对象,映射堆同时提供 CPU 与 GPU 地址。
  • 02着色器通过与 C++ 结构共享的带类型 64 位 GPU 指针访问数据。
  • 03纹理和采样器通过应用自管理的描述符堆以索引方式引用(bindless)。
  • 04每次绘制或调度只使用一个 GPU 根指针,无需描述符集或管线布局。
  • 05着色器使用 Slang 编写,Metal 与 Vulkan 后端共用同一套源码。

适用场景

  • 为需要直接控制 GPU 内存与资源绑定的场景构建自定义渲染器。
  • 在 Metal 4 或 Vulkan 1.4 上试验 bindless 渲染和 GPU 驱动的数据布局。
  • 学习 "No Graphics API" 思路在 C++ 与 Slang 中的具体实现。

快速上手

  1. 1

    安装 Xcode 26+(含 Metal 编译器)、CMake 以及 Slang 2026.18.2+

  2. 2

    启用示例和测试,配置构建

    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

    运行三角形示例

    build/examples/triangle/example_triangle

使用前须知

  • Metal 后端需要 macOS、iOS 或 iPadOS 26+ 以及 Apple GPU 7 系或更新的 GPU,不支持 Intel Mac。
  • Vulkan 后端需要 Vulkan 1.4 及 VK_EXT_descriptor_heap、VK_EXT_mesh_shader 扩展,许多 GPU 不满足。
  • Linux 目前仅支持无窗口(headless)使用,没有窗口示例。

收录于专题

标签

常见问题

NoGraphicsAPI 是什么?
基于 Metal 4 与 Vulkan 1.4 的极简 C++20 图形库,用 GPU 指针和描述符堆取代传统缓冲区与绑定模型。 NoGraphicsAPI 是一个底层 C++20 图形库,实现了 Sebastian Aaltonen 提出的 "No Graphics API" 设计思路。应用不再创建缓冲区对象、顶点布局和描述符集,而是从堆中分配 GPU 内存,把 64 位 GPU 指针传给着色器,并通过索引引用应用自己管理的描述符堆中的纹理和采样器。
NoGraphicsAPI 可以免费使用吗?用的什么许可证?
NoGraphicsAPI 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
NoGraphicsAPI 还在维护吗?
活跃维护中。NoGraphicsAPI 最近一次提交是在 2026年11月7日。
NoGraphicsAPI 适合用来做什么?
为需要直接控制 GPU 内存与资源绑定的场景构建自定义渲染器。 在 Metal 4 或 Vulkan 1.4 上试验 bindless 渲染和 GPU 驱动的数据布局。 学习 "No Graphics API" 思路在 C++ 与 Slang 中的具体实现。
NoGraphicsAPI 怎么安装和运行?
安装 Xcode 26+(含 Metal 编译器)、CMake 以及 Slang 2026.18.2+ 启用示例和测试,配置构建: 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 运行三角形示例: build/examples/triangle/example_triangle
在哪里获取 NoGraphicsAPI?
源代码和安装说明在 GitHub 上:https://github.com/sebbbi/NoGraphicsAPI

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目