一个跨平台 C++ 渲染库,统一封装 Direct3D、Metal、OpenGL、Vulkan 等图形 API,可接入自有引擎或框架。
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
安装 Xcode 26+(含 Metal 编译器)、CMake 以及 Slang 2026.18.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
编译项目
cmake --build build - 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 数据每日更新。
相关项目
一个函数式 WebGL 封装库,通过消除共享状态,把绘制调用描述为命令并编译成优化后的 JavaScript。
面向 Android、iOS、桌面端和 WebGL2 的实时物理渲染引擎,在 Android 上力求小巧高效。
开源机器学习编译框架,支持用 Python 定制编译流程,并将模型部署到多种硬件平台。
Vulkan C API 的纯头文件 C++ 绑定,提供类型安全枚举、STL 支持、异常与 RAII 句柄。
一门通过约 500 行纯 C++ 从零实现软件渲染器的图形学入门课程。