Kanzi グラフィックス¶
Kanzi グラフィックス (kzgfx) は、Kanzi のレンダーハードウェアインターフェイス (RHI) です。これは、Kanzi がさまざまなグラフィックス API を使用できるようにする抽象化レイヤーを提供します。Kanzi は、このインターフェイスの次の実装を提供しています。
OpenGL 3.3 以降、OpenGL ES 3.0 以降、および WebGL 2.0 をサポートする OpenGL ベースのバックエンド
Vulkan 1.1 以降のバックエンド
ほとんどの Kanzi アプリケーションでは、Kanzi グラフィックス API を直接使用する必要はなく、代わりにレンダリングシステムの高レベルな概念を使用します。Kanzi グラフィックスを直接使用するのは、コンピュートや手動レンダリングなどの高度なユースケースを実現する場合だけにしてください。
Kanzi グラフィックス API には、次の主要なコンポーネントがあります。
グラフィックスオブジェクトは、バッファー、イメージ、シェーダーなど、インターフェイス内のエンティティを表します。
コマンドはグラフィックスオブジェクトを操作し、遅延実行のためにコマンドバッファーに収集されます。コピー、描画、プレゼントなどの操作が典型的なコマンドです。
Kanzi グラフィックスで使用するシェーダープログラムは、未加工のシェーダーソースに加えてリフレクション情報を提供する必要があります。ほとんどのユースケースでは、プロジェクトのエクスポート時に Kanzi Studio がこれを自動的に行いますが、Kanzi Shader Compiler ライブラリを使用するか、手動で構築することでもこれを行えます。
Kanzi グラフィックス API は、任意のスレッドから安全に呼び出せます。これは、すべての呼び出しをスレッド固有のコンテキスト内で行う必要がある OpenGL 系の API とは対照的です。Kanzi グラフィックスの OpenGL バックエンドは、API のこの要件を満たすためにレンダリングスレッドを提供します。
OpenGL や Vulkan などの特定のグラフィックス API を、カスタム Kanzi アプリケーションやプラグインから直接使用することはできない点に注意してください。代わりに Kanzi グラフィックス API を使用してください。
バックエンドに加えて、Kanzi グラフィックスでは複数のレイヤーを設定でき、バックエンドに依存しない追加の動作を実現できます。Kanzi グラフィックスの各関数呼び出しは、バックエンドで処理される前に、まずレイヤーのリストを経由してルーティングされます。Kanzi は次のレイヤーを提供しています。
検証レイヤーは、想定される API の使用方法に対する違反を報告します。
統計レイヤーには、Kanzi グラフィックスに関する一連の統計情報が含まれています。
グラフィックスオブジェクト¶
グラフィックスオブジェクトは、該当する作成情報オブジェクトと gfx::create 関数を使用して作成できます。グラフィックスオブジェクトは、タイプ固有のハンドルガードオブジェクトで表されます。ガードは参照カウントされるため、すべての参照が破棄されると、オブジェクト自体が破棄キューに入れられます。
作成後は、オブジェクトの定義は変更できません。たとえば、バッファーやイメージのサイズを変更することはできません。代わりに、新しいプロパティで新しいオブジェクトを作成する必要があります。
オブジェクト |
作成構造体 |
ディスクリプション (Description) |
|---|---|---|
バッファー |
CPU メモリまたは GPU メモリ内に置くことができるメモリブロックを表します。通常、ユニフォーム、頂点データやインデックスデータの格納、およびその他の汎用的な用途に使用されます。 |
|
イメージ (Image) |
シェーダーからサンプリングできるイメージオブジェクトを表します。 |
|
フレームバッファー |
レンダーターゲットとして使用できるオンスクリーンまたはオフスクリーンのフレームバッファーを表します。 |
|
頂点インプットステート |
バッファーに格納された頂点データのレイアウトを表します。 |
|
デプスステンシルステート |
デプスイメージまたはステンシルイメージの使用方法に関する一連の設定オプションを表します。 |
|
ブレンドステート |
レンダーパイプラインの出力をブレンドする方法に関する一連の設定オプションを表します。 |
|
ラスターステート |
フィルモード、カルモード、三角形トポロジーなど、ラスタライザーの動作に関する一連の設定オプションを表します。 |
|
サンプラー |
シェーダーによるイメージのサンプリング方法を設定するサンプラーオブジェクトを表します。 |
|
レンダーリソースセット |
レンダーパイプラインに必要なバッファー、イメージ、サンプラーなどのリソースのセットを表します。 |
|
コンピュートリソースセット |
コンピュートパイプラインに必要なバッファーやイメージなどのリソースのセットを表します。 |
|
シェーダー (Shader) |
シェーダープログラムを表します。これは頂点シェーダー、フラグメントシェーダー、テッセレーションシェーダー、ジオメトリシェーダー、またはコンピュートシェーダーのいずれかです。これらを他のステートオブジェクトと組み合わせて、完全なレンダーパイプラインまたはコンピュートパイプラインを構成します。 |
|
コンピュートパイプライン |
コンピュートプログラムを表します。 |
|
レンダーパイプライン |
シェーダーの完全なセット、デプスステンシルステート、ブレンドステート、ラスターステート、頂点インプットステート、およびレンダーターゲットのディスクリプションを含むレンダープログラムを表します。 |
|
レンダーパス |
レンダーターゲットのセットと、それらのターゲットをメモリにロードまたはストアする方法を表します。 |
|
コマンドバッファー |
Kanzi グラフィックス API が実行する Kanzi グラフィックスコマンドを格納する CPU メモリ内の領域を表します。 |
|
GPU フェンス |
コマンドバッファーの特定の部分が完了するまでスレッドを待機させるために使用できる同期オブジェクトを表します。 |
コマンド¶
コマンドはコマンドバッファーに記録され、gfx::processCommands 関数で実行されます。コマンドの実行は、ロードされたバックエンドが非同期で処理します。
コマンド |
ディスクリプション (Description) |
|---|---|
ソースバッファーからデスティネーションバッファーにメモリをコピーします。 |
|
ソースバッファーからデスティネーションイメージにメモリをコピーします。 |
|
ソースイメージからデスティネーションイメージにコンテンツをコピーします。 |
|
ソースイメージからデスティネーションイメージにコンテンツをコピーします。 |
|
オンスクリーンのフレームバッファーからデスティネーションバッファーにコンテンツをコピーします。 |
|
指定したレンダーパス (Render Pass) へのレンダリングを開始します。 |
|
前のレンダーパス (Render Pass) からのレンダリングを終了します。 |
|
以降の描画コマンドで使用するレンダーパイプラインをアタッチします。 |
|
前のレンダーパイプラインの使用を終了します。 |
|
後続の描画コマンドで使用するコンスタント (Constant) ユニフォーム (Uniform) データを更新します。 |
|
現在設定されているリソースに基づいて、複数の三角形またはインスタンスを描画します。 |
|
バッファの内容に基づいて間接描画を発行します。 |
|
以降のディスパッチコマンドで使用するコンピュートパイプラインをアタッチします。 |
|
前のコンピュートパイプラインの使用を終了します。 |
|
現在設定されているリソースを使用して、コンピュートオペレーション (Operation) をディスパッチします。 |
|
バッファの内容に基づいて間接ディスパッチを発行します。 |
|
オンスクリーンサーフェスをスクリーン (Screen) に表示するようプラットフォームレイヤーに指示します。 |
|
GPU フェンスオブジェクトをシグナル状態にします。 |
|
マルチサンプルのイメージ (Image) を明示的に解決します。 |
|
イメージ (Image) のミップマップを生成します。 |
|
以降のレンダリングオペレーション (Operation) で使用するアクティブなビューポート (Viewport) を設定します。 |
|
以降のレンダリングオペレーション (Operation) で使用するアクティブなシザーを設定します。 |
|
現在のレンダーパス (Render Pass) のレンダーターゲットをクリアします。 |
|
ラインベースのラスタライズオプションを使用するときのラインのウィズス (Width) を設定します。 |
|
頂点バッファのセットと、オプションのインデックスバッファをバインドします。 |
|
後続の操作で使用する、ユニフォームバッファ内のオフセットを設定します。 |
|
以降のレンダリング操作のために、レンダーリソースセット (Render Resource Set) のセットをバインドします。 |
|
以降のコンピュート操作のために、コンピュートリソースセット (Compute Resource Set) のセットをバインドします。 |
|
コマンドバッファから 2 つ目のコマンドバッファを呼び出し、その後で実行を次のコマンドに戻せるようにします。 |