Direct3D、Metal、OpenGL、Vulkan、WebGLを抽象化し、独自のエンジンと組み合わせて使えるクロスプラットフォームのC++レンダリングライブラリ。
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
Metal コンパイラを含む Xcode 26 以降、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 以降と、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 の数値は毎日更新されます。
関連プロジェクト
共有GPU状態をなくし、描画呼び出しをコマンドとして記述して最適化済みJavaScriptにコンパイルできる、関数型のWebGLラッパー。
Androidでの軽量・高効率な動作を重視して設計された、Android、iOS、Linux、macOS、Windows、WebGL2対応のリアルタイム物理ベースレンダリングエンジン。
Pythonでコンパイラパイプラインをカスタマイズし、多様なハードウェアにモデルをデプロイできるオープンな機械学習コンパイルフレームワーク。
Vulkan C APIのヘッダーオンリーC++バインディング。型安全なenum、STL対応、例外、RAIIハンドルを提供します。
サードパーティ製ライブラリを使わず、約500行の素のC++でソフトウェアレンダラーを作りながら、3Dレンダリングを段階的に学べる講座です。