Repolode
sebbbi

sebbbi/NoGraphicsAPI

バッファやdescriptor setをGPUポインターとdescriptor heapで置き換える、Metal 4とVulkan 1.4向けの最小構成のC++20グラフィックスライブラリです。

スター
1,699
フォーク
60
未解決の Issue
6
最終コミット
19 時間前

これは何?

NoGraphicsAPIは、Sebastian Aaltonenの提案「No Graphics API」の考え方を実装した、低レベルのC++20グラフィックスライブラリです。バッファオブジェクト、頂点レイアウト、descriptor setを作成する代わりに、アプリケーションはheapからGPUメモリを確保し、64ビットのGPUポインターをシェーダーに渡します。テクスチャやサンプラーは、アプリケーションが所有するdescriptor heap内のインデックスで参照します。

各drawまたはdispatchには、C++とSlangシェーダーで共有されるルート構造体へのGPUポインターを1つ渡します。この構造体には頂点データ、マテリアル、定数、テクスチャインデックスへのポインターを格納できるため、頂点シェーダーが頂点データを直接取得でき、pipelineやbinding layoutを管理する必要もありません。barrierではリソースの遷移一覧ではなく、producerとconsumerの処理を記述します。メモリの確保、ライフタイム、同期は引き続きアプリケーションが管理します。

macOS、iOS、またはiPadOS 26以降を実行するApple siliconデバイスではMetal 4を、WindowsとLinuxではVK_EXT_descriptor_heapおよびVK_EXT_mesh_shaderを備えたVulkan 1.4をサポートしています。WindowsとmacOSにはウィンドウ表示のサンプルがあり、Linuxは現在headlessでの利用に対応しています。

主な機能

  • 01公開されたbuffer objectを介さずheapからGPUメモリを確保でき、mapped heapではCPUアドレスとGPUアドレスの両方を取得できます。
  • 02C++の構造体と共有する型付き64ビットGPUポインターを通じて、シェーダーからデータにアクセスできます。
  • 03アプリケーションが所有するdescriptor heap内のインデックスで、bindlessテクスチャやサンプラーを参照できます。
  • 04各drawまたはdispatchで使うGPUルートポインターは1つだけで、descriptor setやpipeline layoutは不要です。
  • 05シェーダーはSlangで記述し、MetalとVulkanの両バックエンドで共有できます。

ユースケース

  • GPUメモリとbindingを直接制御したいカスタムレンダラーの開発。
  • Metal 4またはVulkan 1.4で、bindless renderingやGPU主導のデータレイアウトを試す。
  • C++とSlangによる「No Graphics API」の具体的な実装例を学ぶ。

クイックスタート

  1. 1

    Metal コンパイラを含む Xcode 26 以降、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 以降と、Apple GPU ファミリー 7 以降が必要です。Intel Mac はサポートされていません。
  • Vulkan バックエンドには Vulkan 1.4 と VK_EXT_descriptor_heap、VK_EXT_mesh_shader が必要ですが、これらに対応していない GPU も多数あります。
  • Linux では現在、ヘッドレスでの利用のみサポートされており、ウィンドウ表示を使う例はありません。

収録されている特集

トピック

よくある質問

NoGraphicsAPI とは?
バッファやdescriptor setをGPUポインターとdescriptor heapで置き換える、Metal 4とVulkan 1.4向けの最小構成のC++20グラフィックスライブラリです。 NoGraphicsAPIは、Sebastian Aaltonenの提案「No Graphics API」の考え方を実装した、低レベルのC++20グラフィックスライブラリです。バッファオブジェクト、頂点レイアウト、descriptor setを作成する代わりに、アプリケーションはheapからGPUメモリを確保し、64ビットのGPUポインターをシェーダーに渡します。テクスチャやサンプラーは、アプリケーションが所有するdescriptor heap内のインデックスで参照します。
NoGraphicsAPI は無料で使えますか?ライセンスは?
NoGraphicsAPI は MIT ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
NoGraphicsAPI は今もメンテナンスされていますか?
活発にメンテナンス中。NoGraphicsAPI の最終コミットは 2026年11月6日 です。
NoGraphicsAPI は何に使えますか?
GPUメモリとbindingを直接制御したいカスタムレンダラーの開発。 Metal 4またはVulkan 1.4で、bindless renderingやGPU主導のデータレイアウトを試す。 C++とSlangによる「No Graphics API」の具体的な実装例を学ぶ。
NoGraphicsAPI のインストール方法は?
Metal コンパイラを含む Xcode 26 以降、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 をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト