love.graphics.setCanvas (日本語)

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

画面外表示を行うために Canvas オブジェクトを新規作成します。

O.png この関数は love.update または love.draw などから繰り返し呼び出すと動作が重くなることがあります。もし、特定の資源を何度も使う必要がある場合は、一括で作成と格納を行うことで効率的に再利用できます!  



関数

概要

canvas = love.graphics.newCanvas( )

引数

なし。

返値

Canvas canvas
ウィンドウにあるピクセルの大きさと等価な新規 Canvas の寸法。

関数

概要

canvas = love.graphics.newCanvas( width, height )

引数

number width
出力先の Canvas の幅。
number height
出力先の Canvas の高さ。

返値

Canvas canvas
指定された幅と高さの新規 Canvas です。

関数

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

Creates a 2D or cubemap Canvas using the given settings.

概要

canvas = love.graphics.newCanvas( width, height, settings )

引数

number width
出力先の Canvas の幅。
number height
出力先の Canvas の高さ。
table settings
テーブルには下記の内容をフィールドとして設定します:
TextureType type ("2d")
作成する Canvas の種類。
PixelFormat format ("normal")
Canvas の形式。
boolean readable
Canvas を読み取り可能にするかどうか (描画、およびシェーダでアクセスできるようにするかどうか)。 True ならばデフォルトで通常形式となり、 false ならば 深度/ステンシル形式となります。
number msaa (0)
出力先の Canvas で描画時に使用するマルチサンプル・アンチエイリアシング (MSAA) のサンプル数。
number dpiscale (love.graphics.getDPIScale())
Canvas の画面描画時だけではなく Canvas の描画にも用いられるCanvas の尺度係数
CanvasMipmapMode mipmaps ("none")
Canvas にミップマップを持たせるかどうか。持たせるならば自動生成するかどうか。

返値

Canvas canvas
指定された幅と高さの新規 Canvas です。

注意

一部の Canvas 形式はデフォルト形式の Canvas より高いシステム要件を求められます。対応状況の確認には love.graphics.getCanvasFormats を使用してください。

関数

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

Creates a volume or array texture-type Canvas.

概要

canvas = love.graphics.newCanvas( width, height, layers, settings )

引数

number width
出力先の Canvas の幅。
number height
出力先の Canvas の高さ。
number layers
アレイ・レイヤーの番号 (Canvas がアレイ・テクスチャの場合)、またはボリュームの深度 (Canvas がボリューム・テクスチャの場合)。
table settings
テーブルには下記の内容をフィールドとして設定します:
TextureType type ("array")
作成する Canvas の種類。
PixelFormat format ("normal")
Canvas の形式。
boolean readable
Canvas を読み取り可能にするかどうか (描画、およびシェーダでアクセスできるようにするかどうか)。 True ならばデフォルトで通常形式となり、 false ならば 深度/ステンシル形式となります。
number msaa (0)
出力先の Canvas で描画時に使用するマルチサンプル・アンチエイリアシング (MSAA) のサンプル数。
number dpiscale (love.graphics.getDPIScale())
Canvas の画面描画時だけではなく Canvas の描画にも用いられるCanvas の尺度係数
CanvasMipmapMode mipmaps ("none")
Canvas にミップマップを持たせるかどうか。持たせるならば自動生成するかどうか。

返値

Canvas canvas
指定された幅と高さの新規 Canvas です。

関数

LÖVE 0.9.0 まで使用可能でしたが LÖVE 11.0 で廃止されました
この異形は以降のバージョンでは非対応です。

概要

canvas = love.graphics.newCanvas( width, height, format )

引数

number width (window_width)
出力先の Canvas の幅。
number height (window_height)
出力先の Canvas の高さ。
CanvasFormat format ("normal")
出力先の Canvas で使用するテクスチャ形式。

返値

Canvas canvas
指定された幅と高さの新規 Canvas です。

注意

一部の Canvas 形式はデフォルト形式の Canvas より高いシステム要件を求められます。対応状況の確認には love.graphics.getCanvasFormats を使用してください。

関数

LÖVE 0.9.1 まで使用可能でしたが LÖVE 11.0 で廃止されました
この異形は以降のバージョンでは非対応です。

概要

canvas = love.graphics.newCanvas( width, height, format, msaa )

引数

number width (window_width)
出力先の Canvas の幅。
number height (window_height)
出力先の Canvas の高さ。
CanvasFormat format ("normal")
出力先の Canvas で使用するテクスチャ形式。
number msaa (0)
出力先の Canvas で描画時に使用するマルチサンプル・アンチエイリアシング (MSAA) のサンプル数。

返値

Canvas canvas
指定された幅と高さの新規 Canvas です。

注意

一部の Canvas 形式はデフォルト形式の Canvas より高いシステム要件を求められます。対応状況の確認には love.graphics.getCanvasFormats を使用してください。

対応している MSAA サンプルの最大値はシステムに依存のため異なります。対応状況の確認には love.graphics.getSystemLimit を使用してください。

MSAA サンプル数としてシステムが対応している最大値より大きい物が指定された場合は、そのまま Canvas は作成されますが対応している最大量のみ使用します(これは 0 も当てはまります)。

関連



そのほかの言語



LÖVE 11.0 から使用可能
It has replaced Shader:getExternVariable から変更。

シェーダに uniform / extern 変数が存在するかどうかを取得します。

グラフィックス・ドライバのシェーダ・コンパイラがシェーダの最終出力結果に uniform / extern 変数が影響しないと判断した場合は、変数を最適化して出力します。その場合、この関数は false を返します。

関数

概要

hasuniform = Shader:hasUniform( name )

引数

string name
uniform 変数の名前。

返値

boolean hasuniform
シェーダに uniform が存在しており、最終出力結果に影響を与えるかどうか。

関連


そのほかの言語



LÖVE 0.9.0 から使用可能
PixelEffect:send から名称変更。

シェーダーの内部にある特別な変数 (uniform) へ値を送信します。Uniform 変数は uniform または extern キーワードで区別します。例えば、

uniform float time;  // "float" は GLSL シェーダーで使用される数値型です。
uniform float vars[2];
uniform vec2 light_pos;
uniform vec4 colors[4];

send の相当コードは、

shader:send("time", t)
shader:send("vars",a,b)
shader:send("light_pos", {light_x, light_y})
shader:send("colors", {r1, g1, b1, a1},  {r2, g2, b2, a2},  {r3, g3, b3, a3},  {r4, g4, b4, a4})


Uniform / extern 変数はシェーダのコード側では読み取り専用であり、 Shader:send の呼び出しにより変更されるまで不変です。変数が各々で宣言されている場合に限り、シェーダーの頂点およびピクセルの両方にある要素の Uniform 変数へアクセスできます。

O.png version 0.10.2 では Shader:send で配列を送信すると最後の引数が無視されてしまう不具合があります。解決策は複数の値を送信する時にuniform 配列へ余分な疑似引数を追加します。  


関数

概要

Shader:send( name, number, ... )

引数

string name
シェーダーへ送信する number の名前。
number number
uniform 変数へ格納するために送信する number
number ...
uniform 変数が配列である場合に送信する追加の number

返値

ありません。

注釈

Lua において全ての数値は浮動小数点数であるため、 version 0.10.2 以降ではシェーダーのコードで uniform int 変数の値を送信するには Shader:sendInt 関数を使用してください。

関数

概要

Shader:send( name, vector, ... )

引数

string name
シェーダーへ送信するベクトルの名前。
table vector
ベクトルとして uniform 変数へ格納するために送信する number です。テーブルにある要素数でベクトルの種類を決定します (例えば、数値が二つであれば -> vec2)。最低2つおよび最高4つまでの数値を使用できます。
table ...
uniform 変数が配列である場合に送信する追加のベクトル。ベクトルの大きさは全て同一にしてください (例えば vec3 のみ)。

返値

ありません。

関数

概要

Shader:send( name, matrix, ... )

引数

string name
シェーダーへ送信する行列の名前。
table matrix
uniform 変数へ送信する 2x2, 3x3, または 4x4 の行列。テーブル形式を使用してください: {{a,b,c,d}, {e,f,g,h}, ... } または ( version 0.10.2 から) {a,b,c,d, e,f,g,h, ...} 0.10.2 以前までの順列は縦列方向でしたが、 11.0 以降の順列は横列方向へ変更されました。
table ...
uniform の配列に格納されているmatrix (行列) と同じ種類である追加対象の行列。

返値

ありません。

関数

概要

Shader:send( name, texture )

引数

string name
シェーダーへ送信する Texture の名前。
Texture texture
uniform 変数へ送信するテクスチャ (Image または Canvas)

返値

ありません。

関数

概要

Shader:send( name, boolean, ... )

引数

string name
シェーダーへ送信する Boolean の名前。
boolean boolean
uniform 変数へ送信する Boolean です。
boolean ...
uniform 変数が配列である場合に送信する追加の Boolean です。

返値

ありません。

関数

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

概要

Shader:send( name, matrixlayout, matrix, ... )

引数

string name
シェーダーへ送信する行列 (matrix) の名前。
MatrixLayout matrixlayout
行列の配置方法 (縦列または横列方向)。
table matrix
uniform 変数へ送信する 2x2, 3x3, または 4x4 の行列。テーブル形式を使用してください: {{a,b,c,d}, {e,f,g,h}, ... } または {a,b,c,d, e,f,g,h, ...}
table ...
uniform の配列に格納されているmatrix (行列) と同じ種類である追加対象の行列。

関数

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

Data オブジェクトの内容を元にシェーダへ uniform 値を送信します。これはデータのバイトを直接複写します。

概要

Shader:send( name, data, offset, size )

引数

string name
シェーダーへ送信する uniform の名前。
Data data
送信する値がある Data オブジェクト。
number offset (0)
Data オブジェクトの先頭からのオフセット (バイト単位)。
number size (all)
送信データの大きさ (バイト単位)。 nil ならば、指定された uniform と同じバイト数を複写します。

返値

ありません。

関数

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

Data オブジェクトの内容を元にシェーダへ uniform 行列を送信します。これはデータのバイトを直接複写します。

概要

Shader:send( name, data, matrixlayout, offset, size )

引数

string name
シェーダーへ送信する uniform 行列の名前。
Data data
送信する値がある Data オブジェクト。
MatrixLayout matrixlayout
行列の配置方法 (縦列または横列方向)。
number offset (0)
Data オブジェクトの先頭からのオフセット (バイト単位)。
number size (all)
送信データの大きさ (バイト単位)。 nil ならば、指定された uniform と同じバイト数を複写します。

返値

ありません。

関連



そのほかの言語













LÖVE 11.0 から使用可能
この列挙型は以前のバージョンでは非対応です。

レンダリング時の Mesh 形状を選択する方法。

定数

back
Mesh で三角形の裏面 (back-facing: バック・フェーシング) を選択します (レンダリングではありません)。頂点順序で三角形の表面、または裏面を決定します。
front
Mesh で三角形の表面 (front-facing: フロント・フェーシング) を選択します。
none
Mesh で三角形の裏表両面をレンダリングします。

関連


そのほかの言語



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 から使用可能
この異形は以前のバージョンでは非対応です。

Sets the render target to the specified layer/slice and mipmap level of the given non-2D Canvas. All drawing operations until the next love.graphics.setCanvas call will be redirected to the Canvas and not shown on the screen.

概要

love.graphics.setCanvas( canvas, slice, mipmap )

引数

Canvas canvas
The new render target.
number slice
For cubemaps this is the cube face index to render to (between 1 and 6). For Array textures this is the array layer. For volume textures this is the depth slice. 2D canvases should use a value of 1.
number mipmap (1)
The mipmap level to render to, for Canvases with mipmaps.

返値

ありません。

関数

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)
The mipmap level to render to, for Canvases with mipmaps.
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,
})

関連



そのほかの言語