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)

バッファー

gfx::BufferCreateInfo

CPU メモリまたは GPU メモリ内に置くことができるメモリブロックを表します。通常、ユニフォーム、頂点データやインデックスデータの格納、およびその他の汎用的な用途に使用されます。

イメージ (Image)

gfx::ImageCreateInfo

シェーダーからサンプリングできるイメージオブジェクトを表します。

フレームバッファー

gfx::FrameBufferCreateInfo

レンダーターゲットとして使用できるオンスクリーンまたはオフスクリーンのフレームバッファーを表します。

頂点インプットステート

gfx::VertexInputStateCreateInfo

バッファーに格納された頂点データのレイアウトを表します。

デプスステンシルステート

gfx::DepthStencilStateCreateInfo

デプスイメージまたはステンシルイメージの使用方法に関する一連の設定オプションを表します。

ブレンドステート

gfx::BlendStateCreateInfo

レンダーパイプラインの出力をブレンドする方法に関する一連の設定オプションを表します。

ラスターステート

gfx::RasterStateCreateInfo

フィルモード、カルモード、三角形トポロジーなど、ラスタライザーの動作に関する一連の設定オプションを表します。

サンプラー

gfx::SamplerCreateInfo

シェーダーによるイメージのサンプリング方法を設定するサンプラーオブジェクトを表します。

レンダーリソースセット

gfx::RenderResourceSetCreateInfo

レンダーパイプラインに必要なバッファー、イメージ、サンプラーなどのリソースのセットを表します。

コンピュートリソースセット

gfx::ComputeResourceSetCreateInfo

コンピュートパイプラインに必要なバッファーやイメージなどのリソースのセットを表します。

シェーダー (Shader)

gfx::ShaderCreateInfo

シェーダープログラムを表します。これは頂点シェーダー、フラグメントシェーダー、テッセレーションシェーダー、ジオメトリシェーダー、またはコンピュートシェーダーのいずれかです。これらを他のステートオブジェクトと組み合わせて、完全なレンダーパイプラインまたはコンピュートパイプラインを構成します。

コンピュートパイプライン

gfx::ComputePipelineCreateInfo

コンピュートプログラムを表します。

レンダーパイプライン

gfx::RenderPipelineCreateInfo

シェーダーの完全なセット、デプスステンシルステート、ブレンドステート、ラスターステート、頂点インプットステート、およびレンダーターゲットのディスクリプションを含むレンダープログラムを表します。

レンダーパス

gfx::RenderPassCreateInfo

レンダーターゲットのセットと、それらのターゲットをメモリにロードまたはストアする方法を表します。

コマンドバッファー

gfx::CommandBufferCreateInfo

Kanzi グラフィックス API が実行する Kanzi グラフィックスコマンドを格納する CPU メモリ内の領域を表します。

GPU フェンス

gfx::GpuFenceCreateInfo

コマンドバッファーの特定の部分が完了するまでスレッドを待機させるために使用できる同期オブジェクトを表します。

コマンド

コマンドはコマンドバッファーに記録され、gfx::processCommands 関数で実行されます。コマンドの実行は、ロードされたバックエンドが非同期で処理します。

コマンド

ディスクリプション (Description)

gfx::CopyBufferCommand

ソースバッファーからデスティネーションバッファーにメモリをコピーします。

gfx::CopyBufferToImageCommand

ソースバッファーからデスティネーションイメージにメモリをコピーします。

gfx::CopyImageCommand

ソースイメージからデスティネーションイメージにコンテンツをコピーします。

gfx::CopyImageToBufferCommand

ソースイメージからデスティネーションイメージにコンテンツをコピーします。

gfx::CopySurfaceToBufferCommand

オンスクリーンのフレームバッファーからデスティネーションバッファーにコンテンツをコピーします。

gfx::BeginRenderPassCommand

指定したレンダーパス (Render Pass) へのレンダリングを開始します。

gfx::EndRenderPassCommand

前のレンダーパス (Render Pass) からのレンダリングを終了します。

gfx::BeginRenderPipelineCommand

以降の描画コマンドで使用するレンダーパイプラインをアタッチします。

gfx::EndRenderPipelineCommand

前のレンダーパイプラインの使用を終了します。

gfx::ConstantDataCommand

後続の描画コマンドで使用するコンスタント (Constant) ユニフォーム (Uniform) データを更新します。

gfx::DrawCommand

現在設定されているリソースに基づいて、複数の三角形またはインスタンスを描画します。

gfx::DrawIndirectCommand

バッファの内容に基づいて間接描画を発行します。

gfx::BeginComputePipelineCommand

以降のディスパッチコマンドで使用するコンピュートパイプラインをアタッチします。

gfx::EndComputePipelineCommand

前のコンピュートパイプラインの使用を終了します。

gfx::DispatchCommand

現在設定されているリソースを使用して、コンピュートオペレーション (Operation) をディスパッチします。

gfx::DispatchIndirectCommand

バッファの内容に基づいて間接ディスパッチを発行します。

gfx::PresentCommand

オンスクリーンサーフェスをスクリーン (Screen) に表示するようプラットフォームレイヤーに指示します。

gfx::SignalGpuFenceCommand

GPU フェンスオブジェクトをシグナル状態にします。

gfx::ResolveMultisampleImageCommand

マルチサンプルのイメージ (Image) を明示的に解決します。

gfx::GenerateMipmapsCommand

イメージ (Image) のミップマップを生成します。

gfx::SetViewportCommand

以降のレンダリングオペレーション (Operation) で使用するアクティブなビューポート (Viewport) を設定します。

gfx::SetScissorCommand

以降のレンダリングオペレーション (Operation) で使用するアクティブなシザーを設定します。

gfx::ClearCommand

現在のレンダーパス (Render Pass) のレンダーターゲットをクリアします。

gfx::SetLineWidthCommand

ラインベースのラスタライズオプションを使用するときのラインのウィズス (Width) を設定します。

gfx::BindVertexInputCommand

頂点バッファのセットと、オプションのインデックスバッファをバインドします。

gfx::SetUniformOffsetCommand

後続の操作で使用する、ユニフォームバッファ内のオフセットを設定します。

gfx::BindRenderResourceSetCommand

以降のレンダリング操作のために、レンダーリソースセット (Render Resource Set) のセットをバインドします。

gfx::BindComputeResourceSetCommand

以降のコンピュート操作のために、コンピュートリソースセット (Compute Resource Set) のセットをバインドします。

gfx::SubroutineCommand

コマンドバッファから 2 つ目のコマンドバッファを呼び出し、その後で実行を次のコマンドに戻せるようにします。

関連項目

レンダリング

Graphics