コンテンツにスキップ

GLCompositor

OGLDrawDevice を使わない状況 (画面の描画デバイスが D3D11 や SDL_Renderer 等) でも、裏で OpenGL ES によるオフスクリーン合成を行い、その結果を Layer へ書き戻すためのクラスです。

旧 krkrgles プラグインの GLESAdaptor 相当の機能を、本体内蔵かつ Canvas / Offscreen の 既存 GL 描画コードを共有する形で提供します。描画デバイスに依存せず、ウィンドウから GL コンテキストを取得して自前でカレント化します (画面への present は行わず、 オフスクリーン FBO への描画のみ)。OGL 描画デバイスが動作中の場合はそのコンテキストを 共有します。

capture() のコールバックは「incontextof このコンポジタ」で実行され、 コールバック内の this はこの GLCompositor になります。そのため this.canvas (内部 Canvas) の フル API (drawTexture / beginEffect / endEffect / クリップ等) や this.drawLayer / this.copyLayer をそのまま利用できます (GLESAdaptor 互換)。

メンバー一覧

コンストラクタ

プロパティ

メソッド


GLCompositor

コンストラクタ

引数

引数 既定値 説明
window Window   対象の Window オブジェクト

解説

GLCompositor を生成。

指定ウィンドウの GL コンテキストで初期化します。


canvas

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

解説

内部 Canvas。

drawTexture / beginEffect / endEffect / クリップ等、Canvas の フル API を利用できます。


blendMode

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

解説

描画の合成モード指定。

内部 Canvas の blendMode に対応します。


unpremultiply

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

解説

capture の読み戻しで un-premultiply するか (既定 false)。

true にすると capture() の読み戻し時に premultiplied-alpha を straight-alpha へ戻して (RGB = RGB×255÷A) Layer へ書き込みます。MSAA を効かせた 3D (VRM 立ち絵等) の半透明縁が premultiplied のまま読み戻ると、通常アルファ合成 (ltAlpha) で縁に白フリンジが出るのを防ぎます。旧 GLESAdaptor.unpremultiply 相当。


screenWidth

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

解説

オフスクリーン合成の既定幅。


screenHeight

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

解説

オフスクリーン合成の既定高さ。


GLGetProcAddress

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

解説

GL エントリポイント解決関数へのポインタ (整数)。

GLES 系プラグイン (EffekseerDevice 等) の oglbase として利用します。 例: new EffekseerDevice(compositor)。


capture

メソッド

引数

引数 既定値 説明
layer Layer   描画結果の書き戻し先 Layer
callback     描画コールバック function(w:int, h:int, param) (this=GLCompositor)
param     callback へ渡す任意の値
color int   クリア色 (ARGB)

解説

オフスクリーン合成を実行し、結果を layer へ書き戻す。

layer のサイズのオフスクリーン FBO を color でクリアしたのち、 callback(w, h, param) を「incontextof このコンポジタ」で呼び出して描画させ、 その結果を layer のメインイメージへ読み戻します。callback 内では this が この GLCompositor になるので、this.canvas を使って drawTexture / beginEffect / クリップ等の描画が行え、this.drawLayer / this.copyLayer も直接利用できます (GLESAdaptor 互換。canvas は引数ではなく this.canvas で参照します)。


drawLayer

メソッド

引数

引数 既定値 説明
layer Layer   描画元 Layer
a real   変換行列 m11
b real   変換行列 m12
c real   変換行列 m21
d real   変換行列 m22
tx real   平行移動 x
ty real   平行移動 y
opacity int 255 = 255 不透明度 (0〜255)

解説

layer をアフィン変換 + 不透明度で現在の描画先へ描く。

capture() のコールバック内から呼び出します。変換行列は 2x2 部 (a,b,c,d) + 平行移動 (tx,ty) で指定します。


copyLayer

メソッド

引数

引数 既定値 説明
layer Layer   描画元 Layer
left int   配置 x
top int   配置 y

解説

layer を (left, top) にそのまま描く。

drawLayer の単純平行移動版です。capture() のコールバック内から 呼び出します。


setScreenSize

メソッド

引数

引数 既定値 説明
width int  
height int   高さ

解説

オフスクリーン合成の既定サイズを設定。


makeCurrent

メソッド

解説

この GLCompositor の GL コンテキストをカレントにする。