MGL::Render::Renderer2D#

概要#

Renderer2Dクラスは2D描画を行うためのラッパークラスです。

宣言#

namespace MGL::Render
{
    class Renderer2D;
}

メンバ情報#

種類

名前

内容

関数

Clear

画面のクリア

関数

DrawLine

線の描画

関数

DrawRectangle

矩形の描画

関数

DrawSprite

スプライトの描画

関数

SetRenderTarget

レンダーターゲットの設定

関数

GetRenderTarget

レンダーターゲットの取得

関数

GetMainRenderTarget

メインのレンダーターゲットを取得

関数

ResetRenderTarget

レンダーターゲットのリセット

関数

SetScissor

シザー矩形を設定

関数

GetDrawOption

描画オプションを取得

関数

GetRendererType

レンダラの種類を取得


Clear#

画面のクリア

宣言#

namespace MGL::Render
{
    class Renderer2D
    {
    public:
        void Clear(const Color &color) noexcept;
    };
}

引数#

const MGL::Color &color

クリアする色を指定します。

説明#

引数で指定した色を用いて、現在のレンダーターゲットをクリアします。

利用例#

MGL::Render::Renderer2D renderer;

// 現在のレンダーターゲットを赤色でクリア
renderer.Clear(MGL::Color(1.0f, 0.0f, 0.0f));

実行結果(640x480)

../_images/renderer2d_clear.png

DrawLine#

線の描画

宣言#

namespace MGL::Render
{
    class Renderer2D
    {
    public:
        void DrawLine(
            const Vector2 &start,
            const Vector2 &end,
            const Color &color) noexcept;
    };
}

引数#

const MGL::Vector2 &start

開始点

const MGL::Vector2 &end

終了点

const MGL::Color &color

線の色

説明#

指定した開始点から終了点までの線分を、colorで指定した色を用いて描画します。

利用例#

MGL::Render::Renderer2D renderer;

// 画面をクリア
renderer.Clear(MGL::kColorBlack);

// (100, 100)の位置から(400, 400)の位置まで、赤い線を描画
renderer.DrawLine(
    MGL::Vector2(100.0f, 100.0f),   // 開始点
    MGL::Vector2(400.0f, 400.0f),   // 終了点
    MGL::kColorRed);                // 線の色

実行結果(640x480)

../_images/renderer2d_drawline.png

DrawRectangle#

矩形の描画

宣言#

namespace MGL::Render
{
    class Renderer2D
    {
    public:
        // (1) クラス内部の描画オプションを用いて描画
        void DrawRectangle(
            const Rectangle &rectangle,
            const Color &color) noexcept;

        // (2) 外部から描画オプションを指定して描画
        void DrawRectangle(
            const Rectangle &rectangle,
            const Color &color,
            const DrawOption2D &option) noexcept;
    };
}

引数#

(1) クラス内部の描画オプションを用いて描画
const MGL::Rectangle &rectangle

描画する矩形の座標とサイズ

const MGL::Color &color

矩形の色

(2) 外部から描画オプションを指定して描画
const MGL::Rectangle &rectangle

描画する矩形の座標とサイズ

const MGL::Color &color

矩形の色

const MGL::Render::DrawOption2D &option

描画オプション

説明#

引数rectangleで指定した範囲を、colorで指定した色で塗りつぶします。

(1)はこのクラスが内部に保持している描画オプションを用いて描画を行います。クラス内部の描画オプションはGetDrawOptionにて取得可能です。

(2)はクラス内部の描画オプションを用いず、外部から指定して描画を行います。

利用例#

MGL::Render::Renderer2D renderer;

// 画面をクリア
renderer.Clear(MGL::kColorBlack);

// 矩形を準備
MGL::Rectangle rectangle(100.0f, 100.0f, 100.0f, 100.0f);

// (1) クラス内部の描画オプションを用いて描画
renderer.DrawRectangle(rectangle, MGL::kColorRed);


// 指定座標から(50, 50)ずらす描画オプションを準備
MGL::Render::DrawOption2D option;
option.SetOffset(MGL::Vector2(50.0f, 50.0f));

// (2) 外部から描画オプションを指定して描画
renderer.DrawRectangle(rectangle, MGL::kColorGreen, option);
実行結果(640x480)
../_images/renderer2d_drawrectangle.png

関連#


DrawSprite#

スプライトの描画

宣言#

namespace MGL::Render
{
    class Renderer2D
    {
    public:
        // (1) クラス内部の描画オプションを用いて描画
        void DrawSprite(
            const Vector2 &position,
            const Texture &texture,
            const Rectangle &sourceRectangle) noexcept;

        // (2) 外部から描画オプションを指定して描画
        void DrawSprite(
            const Vector2 &position,
            const Texture &texture,
            const Rectangle &sourceRectangle,
            const DrawOption2D &option) noexcept;

        // (3) 領域付きテクスチャを用いて描画
        void DrawSprite(
            const Vector2 &position,
            const TextureWithBounds &textureWithBounds) noexcept;

        // (4) 領域付きテクスチャを用いて外部オプションで描画
        void DrawSprite(
            const Vector2 &position,
            const TextureWithBounds &textureWithBounds,
            const DrawOption2D &option) noexcept;
    };
}

引数#

(1) クラス内部の描画オプションを用いて描画
const MGL::Vector2 &position

描画位置

const MGL::Render::Texture &texture

描画元のテクスチャ

const MGL::Rectangle &sourceRectangle

描画するテクスチャの領域

(2) 外部から描画オプションを指定して描画
const MGL::Vector2 &position

描画位置

const MGL::Render::Texture &texture

描画元のテクスチャ

const MGL::Rectangle &sourceRectangle

描画するテクスチャの領域

const MGL::Render::DrawOption2D &option

描画オプション

(3) 領域付きテクスチャを用いて描画
const MGL::Vector2 &position

描画位置

const MGL::Render::TextureWithBounds &textureWithBount

描画元の領域付きテクスチャ

(4) 領域付きテクスチャを用いて外部オプションで描画
const MGL::Vector2 &position

描画位置

const MGL::Render::TextureWithBounds &textureWithBount

描画元の領域付きテクスチャ

const MGL::Render::DrawOption2D &option

描画オプション

説明#

描画先のpositionで指定した位置にテクスチャの一部を切り抜いて描画します。

(1)と(2)はテクスチャクラス(MGL::Render::Texture)とテクスチャ上の領域を用いて描画を行います。領域を表す矩形sourceRectangleは、テクスチャ側の切り抜く領域をピクセル単位で指定します。

(3)と(4)はtexturesourceRectangleの指定の代わりに、その両方を内包しているMGL::Render::TextureWithBoundsクラスを指定して描画を行います。

(1)と(3)はこのクラスが保持している描画オプションを使用して描画を行います。クラス内部の描画オプションはGetDrawOptionにて取得可能です。 (2)と(4)はクラス内部の描画オプションを用いず、引数で指定されたoptionを用いて描画を行います。

指定したテクスチャが無効または読み込み中の場合、この関数は何もせずに処理を返します。

利用例#

読み込み部分
// テクスチャキーの準備
constexpr auto kTextureKey = MGL::Render::MakeTextureKey("mgl.png");

...

// テクスチャの準備
MGL::Render::Texture texture;
texture.Load(kTextureKey, "$resource/mgl.png");
表示部分
// レンダラを準備
MGL::Render::Renderer2D renderer;

// 画面をクリア
renderer.Clear(MGL::kColorBlack);

// テクスチャを準備
MGL::Render::Texture texture(kTextureKey);

// テクスチャの表示領域を準備
MGL::Rectangle textureRectangle(
    MGL::Vector2(0.0f, 0.0f),   // 左上から
    texture.GetSize());         // テクスチャ全体

// (100, 100)の位置にテクスチャを表示
renderer.DrawSprite(
    MGL::Vector2(100.0f, 100.0f),   // 表示座標
    texture,                        // テクスチャ
    textureRectangle);              // 表示するテクスチャの領域
実行結果(640x480)
../_images/renderer2d_drawsprite.png
"mgl.png"の内容(128x128)
../_images/mgl.png

関連#


SetRenderTarget#

レンダーターゲットの設定

宣言#

namespace MGL::Render
{
    class Renderer2D
    {
    public:
        bool SetRenderTarget(const Texture &renderTarget) noexcept;
    };
}

引数#

const MGL::Render::Texture &renderTarget

レンダーターゲットに設定するテクスチャ

戻り値#

bool

成功時にtrue、失敗時にfalse

説明#

レンダーターゲットを設定し、描画先を変更します。主にオフスクリーンレンダリングに使用します。

引数のrenderTargetにはレンダーターゲットとして生成されたを指定します。指定したテクスチャがレンダーターゲットでない場合、処理は失敗しfalseが返ります。レンダーターゲットの生成についてはCreateRenderTargetを参照してください。

この関数で変更した描画先は、このクラスのスコープを超えて全ての描画命令に影響します。描画先を元の状態に戻す際にはResetRenderTargetを利用してください。

利用例#

レンダーターゲットの初期化
// レンダーターゲット用のテクスチャキーを準備
constexpr auto kRenderTargetkey = MGL::Render::MakeTextureKey("RenderTarget");

...

// レンダーターゲットを生成(640x480)
MGL::Render::Texture renderTarget;
renderTarget.CreateRenderTarget(kRenderTargetkey, 640, 480);
表示部分
// 2Dレンダラとレンダーターゲットを準備
MGL::Render::Renderer2D renderer;
MGL::Render::Texture renderTarget(kRenderTargetkey);

// 描画先を renderTarget に変更
renderer.SetRenderTarget(renderTarget);

// renderTarget全体を青色でクリア
renderer.Clear(MGL::kColorBlue);

// 描画先をメインに戻す
renderer.ResetRenderTarget();

// メインの画面を黒でクリア
renderer.Clear(MGL::kColorBlack);

// renderTargetの内容の左上から100x100を(100, 100)の位置に表示
renderer.DrawSprite(
    MGL::Vector2(100.0f, 100.0f),
    renderTarget,
    MGL::Rectangle(0.0f, 0.0f, 100.0f, 100.0f));
実行結果(640x480)
../_images/renderer2d_setrendertarget.png

関連#


GetRenderTarget#

レンダーターゲットの取得

宣言#

namespace MGL::Render
{
    class Renderer2D
    {
    public:
        Texture GetRenderTarget() const noexcept;
    };
}

戻り値#

MGL::Render::Texture

レンダーターゲット

説明#

現在レンダーターゲットに設定されているテクスチャを取得します。

利用例#

MGL::Render::Renderer2D renderer;

// 現在のレンダーターゲットを取得
auto currentRenderTarget = renderer.GetRenderTarget();

関連#


GetMainRenderTarget#

メインのレンダーターゲットを取得

宣言#

namespace MGL::Render
{
    class Renderer2D
    {
    public:
        Texture GetMainRenderTarget() const noexcept;
    };
}

戻り値#

MGL::Render::Texture

メインのレンダーターゲット

説明#

メインのレンダーターゲットを取得します。

メインのレンダーターゲットの扱いはレンダラによって異なりますが、通常は実際に画面に表示される領域です。MGL初期化後のデフォルトの描画先、およびResetRenderTargetで設定されるレンダーターゲットは、この関数の戻り値と等価になります。

利用例#

MGL::Render::Renderer2D renderer;

// メインのレンダーターゲットを取得
auto mainRenderTarget = renderer.GetMainRenderTarget();

関連#


ResetRenderTarget#

レンダーターゲットのリセット

宣言#

namespace MGL::Render
{
    class Renderer2D
    {
    public:
        void ResetRenderTarget() noexcept;
    };
}

説明#

レンダーターゲットの設定を初期状態に戻します。

この関数が行う処理は、GetMainRenderTargetの戻り値をSetRenderTargetの引数に渡す事と同等です。

利用例#

変更の利用例と併せてSetRenderTargetを参照してください。

関連#


SetScissor#

シザー矩形を設定

宣言#

namespace MGL::Render
{
    class Renderer2D
    {
    public:
        void SetScissor(
            bool isEnabled,
            const Rectangle &rectangle = Rectangle()) noexcept;
    };
}

引数#

bool isEnabled

有効フラグ。trueで有効、falseで無効。

const MGL::Rectangle rectangle

設定する範囲。isEnabledfalseの場合は未使用。

説明#

現在のレンダーターゲットにシザー矩形を設定します。

シザー矩形は描画範囲を限定するための矩形です。レンダーターゲットにシザー矩形が設定されている場合、描画は矩形の内側に限定され、外側への描画は行われなくなります。

引数isEnabledtrueを設定することで、rectangleで指定した範囲のシザー矩形が有効化されます。isEnabledfalseを指定した場合、シザー矩形は無効化されます。

なお、Clearに対してはシザー矩形の効果は及びません。

利用例#

MGL::Render::Renderer2D renderer;

// 画面をクリア
renderer.Clear(MGL::kColorBlack);

// 画面の(0, 0)から(400, 400)を青色で塗りつぶす
renderer.DrawRectangle(MGL::Rectangle(0.0f, 0.0f, 400.0f, 400.0f), MGL::kColorBlue);

// (100, 100)からサイズ(200, 200)の領域にシザー矩形を設定
renderer.SetScissor(true, MGL::Rectangle(100.0f, 100.0f, 200.0f, 200.0f));

// もう一度、画面の(0, 0)から(400, 400)を赤色で塗りつぶす。
// 中央部分にシザー矩形が設定されているため、外周に赤で塗りつぶされず青のままの領域が発生する。
renderer.DrawRectangle(MGL::Rectangle(0.0f, 0.0f, 400.0f, 400.0f), MGL::kColorRed);

// シザー矩形を無効化。
// 引数にfalseを指定した場合はrectangleは参照されないため省略可。
renderer.SetScissor(false);
実行結果(640x480)
../_images/renderer2d_setscissor.png

GetDrawOption#

描画オプションを取得

宣言#

namespace MGL::Render
{
    class Renderer2D
    {
    public:
        constexpr DrawOption2D &GetDrawOption() noexcept;
    };
}

戻り値#

MGL::Render::DrawOption2D

このクラスが内包している描画オプションの参照

説明#

このクラスが内包している描画オプションの参照を取得します。

この関数で得た描画オプションを変更することで、各種描画命令の引数で描画オプションを省略した場合にこの内容が使用されます。

描画オプションは各々のインスタンスが個別に保持しているため、内容の変更は異なるインスタンスへは影響しません。

利用例#

// 2Dレンダラを準備
MGL::Render::Renderer2D renderer;

// 画面をクリア
renderer.Clear(MGL::kColorBlack);

// 描画オプションの参照を得る
// * 注意 *  `&`を付け忘れるとコピーとなり、変更が内部オプションに反映されなくなる
auto &drawOption = renderer.GetDrawOption();

// 透過値を0.5に設定
drawOption.SetTransparency(0.5f);

// 赤い矩形を表示(左)
// 描画オプションの引数を省略しているため、透過値を書き換えた内部オプションが使用される
renderer.DrawRectangle(MGL::Rectangle(100.0f, 100.0f, 100.0f, 100.0f), MGL::kColorRed);


// 描画オプションを複製して透過値を0.8に設定
auto copiedOption = drawOption;
copiedOption.SetTransparency(0.8f);

// 描画オプションを引数で指定して赤い矩形を表示(右)
// この場合は内部オプションは使用されず、透過値0.8のオプションが使用される
renderer.DrawRectangle(MGL::Rectangle(250.0f, 100.0f, 100.0f, 100.0f), MGL::kColorRed, copiedOption);
実行結果(640x480)
../_images/renderer2d_getdrawoption.png

関連#


GetRendererType#

レンダラの種類を取得

宣言#

namespace MGL::Render
{
    class Renderer2D
    {
    public:
        RendererType GetRendererType() const noexcept;
    };
}

戻り値#

RendererType

現在使用中のレンダラの種類を表す値

説明#

使用中のレンダラの種類を表す値を取得します。この関数が返す値は使用中のレンダラによって異なります。

通常、アプリケーション側からこの関数の戻り値を参照することは推奨されません。何らかの理由により、使用中のレンダラによって処理を変更する必要がある場合にのみ使用してください。

利用例#

MGL::Render::Renderer2D renderer;

// 使用中のレンダラをチェックする処理の例
switch (renderer.GetRendererType())
{
    case MGL::Render::MakeRendererType("MGL-Metal"):
        printf("MGL標準のMetalレンダラを使用中\n");
        break;

    case MGL::Render::MakeRendererType("MGL-Direct3D11"):
        printf("MGL標準のDirect3D 11レンダラを使用中\n");
        break;

    default:
        printf("不明なレンダラを使用中\n");
        break;
}

関連#