love.graphics.setCanvas (日本語)

LÖVE 0.8.0 から使用可能
love.graphics.setRenderTarget から名称変更。

Canvas へ描画操作を取り込みます。

関数

指定の 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
新規表示対象。
LÖVE 11.0 から利用可能
number mipmap (1)
Canvas のミップマップに対するレンダリング先のミップマップレベル。

返値

ありません。

関数

画面を初期状態に戻して対象を描画します。つまり、画面への描画を再び有効にします。

概要

love.graphics.setCanvas( )

引数

なし。

返値

ありません。

関数

LÖVE 0.9.0 から使用可能
この異形は以前のバージョンでは非対応です。

複数同時に 二次元 Canvas の表示対象を設定します。次回の love.graphics.setCanvas が呼ばれるまで全描画操作は指定された Canvas へ転送されますが、画面には表示されません。

概要

love.graphics.setCanvas( canvas1, canvas2, ... )

引数

Canvas canvas1
最初の表示対象。
Canvas canvas2
次の表示対象。
Canvas ...
追加の Canvas を続けて記述します。

返値

ありません。

注釈

通常、全描画操作は関数に渡された最初の 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 から使用可能
この異形は以前のバージョンでは非対応です。

Sets the active render target(s) and active stencil and depth buffers based on the specified setup information. All drawing operations until the next love.graphics.setCanvas call will be redirected to the specified Canvases and not shown on the screen.

概要

love.graphics.setCanvas( setup )

引数

table setup
A table specifying the active Canvas(es), their mipmap levels and active layers if applicable, and whether to use a stencil and/or depth buffer.
RenderTargetSetup [1]
The Canvas to render to.
RenderTargetSetup [2] (nil)
An additional Canvas to render to, if multiple simultaneous render targets are wanted.
RenderTargetSetup ...
Additional Canvases to render to, if multiple simultaneous render targets are wanted.
boolean stencil (false)
Whether an internally managed stencil buffer should be used, if the depthstencil field isn't set.
boolean depth (false)
Whether an internally managed depth buffer should be used, if the depthstencil field isn't set.
RenderTargetSetup depthstencil (nil)
An optional custom depth/stencil formatted Canvas to use for the depth and/or stencil buffer.

返値

ありません。

注釈

The RenderTargetSetup parameters can either be a Canvas object, or a table in the following format: {canvas, mipmap=#, layer=#, face=#}

Canvas [1]
The Canvas to use for this active render target.
number mipmap (1)
Canvas のミップマップに対するレンダリング先のミップマップレベル。
number layer (1)
Only used for Volume and Array-type Canvases. For Array textures this is the array layer to render to. For volume textures this is the depth slice.
number face (1)
Only used for Cubemap-type Canvases. The cube face index to render to (between 1 and 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


Advanced setup with the table variant of love.graphics.setCanvas

-- Allow love.graphics.stencil calls when drawing to the given Canvas.
love.graphics.setCanvas({canvas, stencil=true})

-- Use multiple simultaneous render targets when drawing to several canvases of the Array Texture type,
-- and use a custom depth buffer as well.
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,
})

関連



そのほかの言語