love.graphics.setCanvas (日本語)
LÖVE 0.8.0 から使用可能 |
love.graphics.setRenderTarget から名称変更。 |
Canvas へ描画操作を取り込みます。
Contents
関数
指定の Canvas へ表示対象を設定します。次回の love.graphics.setCanvas が呼ばれるまで全描画操作は指定の Canvas へ転送されますが、画面には表示されません。
現在使用中の Canvas でステンシルまたは深度テストを行うときは、後述の setCanvas の異形によりステンシルバッファあるいは深度バッファを明示的に有効にしてください。
love.graphics.present を呼び出すときは Canvas を有効にしないように注意してください。 love.graphics.present はデフォルトの love.run に記述されている love.draw の処理終了時に呼び出されます。したがって、この関数を用いて Canvas を使用可能にするならば、通常は love.draw の処理終了前の時点で Canvas を必ず無効にしてください。
概要
love.graphics.setCanvas( canvas, mipmap )
引数
Canvas canvas
- 新規表示対象。
返値
ありません。
関数
画面を初期状態に戻して対象を描画します。つまり、画面への描画を再び有効にします。
概要
love.graphics.setCanvas( )
引数
なし。
返値
ありません。
関数
LÖVE 0.9.0 から使用可能 |
この異形は以前のバージョンでは非対応です。 |
複数同時に 二次元 Canvas の表示対象を設定します。次回の love.graphics.setCanvas が呼ばれるまで全描画操作は指定された Canvas へ転送されますが、画面には表示されません。
概要
love.graphics.setCanvas( canvas1, canvas2, ... )
引数
返値
ありません。
注釈
通常、全描画操作は関数に渡された最初の Canvas だけに描画されますが、標準 void effect
の代わりに vec4 effects
関数を用いるとピクセルシェーダーを変更します。
引数 Canvas で指定した表示対象の幅、高さ、およびテクスチャ形式は全て同一にしてください。全てのコンピューターが Canvas への複数表示対象に対応しているわけではありません。 love.graphics.isSupported("multicanvas") で true が返されたときは、最低でもキャンバスの 4 枚同時有効に対応しています。
関数
LÖVE 11.0 から使用可能 |
この異形は以前のバージョンでは非対応です。 |
指定されたレイヤー/スライスへのレンダリング対象と指定された非二次元 Canvas のミップマップレベルを設定します。次回の love.graphics.setCanvas が呼ばれるまで全描画操作は指定された Canvas へ転送されますが、画面には表示されません。
概要
love.graphics.setCanvas( canvas, slice, mipmap )
引数
Canvas canvas
- 新規レンダリング対象。
number slice
- cubemap ならば、これはレンダリング先のキューブマップ・インデックスです (1 ~ 6までの範囲)。アレイ・テクスチャならば、これはアレイ・レイヤです。ボリューム・テクスチャならば、これは深度スライスです。二次元 Canvas ならば必ず 1 の値を用いてください。
number mipmap (1)
- Canvas のミップマップに対するレンダリング先のミップマップレベルです。
返値
ありません。
関数
LÖVE 11.0 から使用可能 |
この異形は以前のバージョンでは非対応です。 |
レンダリング対象の有効化、およびステンシルの有効化と指定された設定情報に基づき深度バッファの設定を行います。次回の love.graphics.setCanvas が呼ばれるまで全描画操作は指定された Canvas へ転送されますが、画面には表示されません。
概要
love.graphics.setCanvas( setup )
引数
table setup
- 有効な Canvas, ミップマップレベルと適用可能ならば有効なレイヤ、そしてステンシルや深度バッファの使用有無をテーブルで指定します。
RenderTargetSetup [1]
- レンダリング先の Canvas です。
RenderTargetSetup [2] (nil)
- 複数同時にレンダリング対象が必要ならば、レンダリング先の追加 Canvas を記述します。
RenderTargetSetup ...
- さらに複数同時にレンダリング対象が必要ならば、レンダリング先の追加 Canvas を記述します。
boolean stencil (false)
depthstencil
フィールドが未設定の場合、内部管理によるステンシル・バッファを使用するかどうか。boolean depth (false)
depthstencil
フィールドが未設定の場合、内部管理による深度バッファを使用するかどうか。RenderTargetSetup depthstencil (nil)
- 深度やステンシルバッファで用いるオプションのカスタムの深度/ステンシル整形済みの Canvas です。
返値
ありません。
注釈
RenderTargetSetup
の引数には Canvas オブジェクト、または次の形式にて記したテーブルを指定できます: {canvas, mipmap=#, layer=#, face=#}
Canvas [1]
- 有効なレンダリング対象として用いる Canvas です。
number mipmap (1)
- Canvas のミップマップに対するレンダリング先のミップマップレベル。
number layer (1)
- ボリュームとアレイ方式の Canvas に限り使用します。アレイ・テクスチャならば、これはレンダリング先のアレイ・レイヤです。ボリューム・テクスチャならば、これは深度スライスです。
number face (1)
- キューブマップ方式の Canvas に限り使用します。 レンダリング先のキューブマップ・インデックス (1 ~ 6 までの範囲)。
用例
キャンバスへの描画
function love.load()
-- キャンバスの作成。
canvas = love.graphics.newCanvas()
-- 直接的にキャンバスへ描画操作を行います。
love.graphics.setCanvas(canvas)
-- 色付きの正方形を描画します。
love.graphics.setColor(0.8, 0.9, 0.4)
love.graphics.rectangle("fill", 0, 0, 100, 100)
-- メイン画面への描画を再び有効にします。
love.graphics.setCanvas()
end
function love.draw()
-- 拡大したキャンバスを画面へ描画します。
love.graphics.setColor(1, 1, 1)
love.graphics.draw(canvas, 200, 100, 0, 0.5, 0.5)
end
love.graphics.setCanvas の異形テーブルによる高度な設定
-- 指定の Canvas を描画するときに love.graphics.stencil を呼び出せるようにします。
love.graphics.setCanvas({canvas, stencil=true})
-- アレイテクスチャ方式の複数 Canvas 描画時、およびカスタム深度バッファも
-- 併せて用いるときに複数同時にレンダリング対象を使用します。
canvas1 = love.graphics.newCanvas(128, 128, 4, {type="array"})
canvas2 = love.graphics.newCanvas(128, 128, 8, {type="array"})
depthcanvas = love.graphics.newCanvas(128, 128, {format="depth24", readable=true})
love.graphics.setCanvas({
{canvas1, layer = 3},
{canvas2, layer = 1},
depthstencil = depthcanvas,
})
関連