コンテンツにスキップ

GPUDrawDevice

GPUDrawDevice クラスは、このインスタンスを Window.drawDevice に登録して使用するための DrawDevice で、SDL3 の GPU API ( SDL_GPU ) を用いて Canvas 系クラスを動かします。開発中の機能 で、Canvas を SDL_GPU で動かすビルド ( CMake オプション KRKRZ_CANVAS_GPU=ON、SDL3 ビルドのみ・OpenGL 版とは排他 ) にだけ含まれます。

このビルドでは起動時の既定 DrawDevice がこのクラスになります ( -drawdevice=gpu。-drawdevice=sdl で SDLDrawDevice に戻せます。 コマンドラインオプション )。SDL_GPU のドライバは自動選択で、-gpudriver で明示できます ( Windows の既定は vulkan。-gpudriver=direct3d12 で D3D12 でも動きます。その場合スクリプトのシェーダーは DXIL のパックが必要です )。

OpenGL 版の無いビルドでは、このクラスは Window.OGLDrawDevice の名前でも登録されます。OGLDrawDevice を使う既存のスクリプト ( 派生クラスの super.OGLDrawDevice() を含む ) は、そのままこのクラスで動きます。

このデバイスがアクティブな間、Canvas / Texture / ShaderProgram / Offscreen / Matrix32 / VertexBuffer / VertexBinder が SDL_GPU の上で機能します。OpenGL ES 版との主な違いは次のとおりです。

  • シェーダーは実行時にコンパイルせず、事前に変換したパック ( canvas_shaders.kzgs ) から引きます。パックに無いシェーダーを使うと例外になります ( -gpushadercollect で書き出して変換します。-gpushaderpack でパックを指定できます )
  • drawText は未対応です ( マスク・ステンシルによるクリッピング ( beginMaskClip / beginStencilClip )・ポストエフェクト ( beginEffect / endEffect )・TextureLayerTreeOwner・GLCompositor は使えます。オーバーレイ動画は SDLDrawDevice と同じ経路で Canvas の上に出ます )
  • Texture.nativeHandle は GL のテクスチャ番号ではなく、SDL_GPU のテクスチャになります
  • matrix / glVideoPresenterHost プロパティはありません

画面への出し方は SDLDrawDevice と同じで、SDL_Renderer を Canvas と同じ GPU デバイスの上で動かし、Canvas が描いた画面をプライマリレイヤーの画像と同じ矩形へ出します。Canvas の座標系はプライマリレイヤーと同じ大きさです。

メンバー一覧

コンストラクタ

プロパティ

メソッド

イベント


GPUDrawDevice

コンストラクタ

解説

GPUDrawDevice オブジェクトの構築

GPUDrawDevice クラスのオブジェクトを構築します。

このクラスが起動時の既定の場合、Window.drawDevice には最初からこのクラスのインスタンスが登録されているので、新たに登録する必要はありません。Canvas を使うには createCanvas を呼びます。


interface

プロパティ \ アクセス: r

解説

インターフェースオブジェクトを取得

プラグインなどで DrawDevice オブジェクトを利用するためにあります。


window

プロパティ \ アクセス: r

解説

関連付けられた Window オブジェクトを取得

この DrawDevice をセットしている Window オブジェクトを返します。


canvas

プロパティ \ アクセス: r

解説

描画用 Canvas オブジェクトを取得

このデバイスが管理している Canvas オブジェクトを返します。 onDraw 内などからアクセスして描画コマンドを発行します。


texture

プロパティ \ アクセス: r

解説

プライマリレイヤーのテクスチャを取得

プライマリレイヤーの画像を保持している Texture オブジェクトを返します。 onDraw 内で Canvas に描くことで、レイヤーの画面を Canvas の描画に取り込めます。


sdlVideoPresenterHost

プロパティ \ アクセス: r

解説

オーバーレイ動画 presenter 登録口 (ポインタ値)

オーバーレイ動画側がこのデバイスへ pull 型で合成するために読み取る presenter host へのポインタ値です ( SDLDrawDevice.sdlVideoPresenterHost と同じ規約 )。 通常はエンジン内部/プラグインが使用します。


dialogRendererHost

プロパティ \ アクセス: r

解説

Elements ダイアログ renderer host (ポインタ値)

Elements のオーバーレイ描画アダプタを取得するための host へのポインタ値です。 通常はエンジン内部/プラグインが使用します。


viewportBackgroundHost

プロパティ \ アクセス: r

解説

ビューポート余白塗り登録口 (ポインタ値)

ゲーム画面が描画領域全体を覆わないときの余白 ( Window.viewportBgColor / Window.setViewportWallpaper ) を受け取る iTVPViewportBackgroundHost へのポインタ値です。 通常はエンジン内部/プラグインが使用します。


recreate

メソッド

解説

内部デバイス再生成

OGLDrawDevice との互換のためにあります。このクラスでは何もしません。


createCanvas

メソッド

解説

Canvas オブジェクトを生成

このデバイスに紐づく Canvas オブジェクトの生成を要求します。 生成された Canvas は canvas プロパティから取得できます。

GPU デバイスがまだ準備できていない場合は、準備ができたとき ( onInit の直前 ) に生成されます。


resumeOnDraw

メソッド

解説

自動停止した onDraw の発火を再開

onDraw ハンドラが毎フレーム例外を投げ続けて連続例外の上限 ( コマンドラインオプション -eventexceptionlimit、既定 10 ) に達すると、 onDraw の発火は自動停止します ( 画面の表示自体は継続 )。 このメソッドを呼ぶと発火を再開します。


onInit

イベント

解説

GPU デバイス準備時に呼び出されるイベント

このデバイスの描画先 ( SDL_Renderer ) が GPU デバイスの上に作られ、Canvas を使える状態になったあとに発火します ( 即時ではなく、次のイベント配送で呼ばれます。onInit の中で例外が起きてもエラーの表示が固まらないようにするためです )。

シェーダ・テクスチャ等の初期リソース確保はここで行います。GPU デバイスが使えない環境では発火せず、Canvas も使えません ( ログに GPU device is not available が出ます )。

関連: GPUDrawDevice.onDone


onDone

イベント

解説

描画先の破棄前に呼び出されるイベント

このデバイスの描画先が破棄される直前に発火します。

onInit で確保したリソースの解放はここで行います。

関連: GPUDrawDevice.onInit


onDraw

イベント

解説

画面描画時に呼び出されるイベント

Canvas がある間、描画サイクルごとに発火します。内部で Canvas の BeginDrawing 〜 EndDrawing で挟まれた状態で呼ばれるため、ハンドラ内で canvas プロパティ経由で描画コマンドを発行できます。

オーバーレイ動画を再生している間は発火しません。