MGL::Render各種定義#

概要#

MGL::Renderで定義されている、MGLの描画関連の処理が共通で使用する宣言・定義です。

#

種類

名前

内容

RendererType

レンダラの種類を表すための型

列挙型

PixelFormat

ピクセルフォーマットの列挙型

列挙型

SamplerType

サンプラーの列挙型

列挙型

BlendMode

ブレンドモードの列挙型

関数・定数式#

種類

名前

内容

定数式

MakeRendererType

レンダラ判別用の値を作るための定数式

定数式

GetPixelPerBytes

ピクセルフォーマットのサイズを取得するための定数式


RendererType#

レンダラの種類を表すための型

宣言#

namespace MGL::Render
{
    enum class RendererType : uint32_t {};
}

説明#

レンダラの種類を表すための型です。

この型の値はMakeRendererTypeによって生成されます。主にレンダラの判別用に利用されますが、MGLの標準機能を利用する限りは参照する必要はありません。

関連#


PixelFormat#

ピクセルフォーマット

宣言#

namespace MGL::Render
{
    enum class PixelFormat
    {
        Unknown,        //!< 不明
        RGBA8_UNorm,    //!< 32bit RGBA 各8bit
        BGRA8_UNorm,    //!< 32bit BGRA 各8bit

        B5G6R5_UNorm,   //!< 16bit BGR(5,6,5)
        A1BGR5_UNorm,   //!< 16bit ABGR(1,5,5,5)
        BGR5A1_UNorm,   //!< 16bit BGRA(5,5,5,1)
        ABGR4_UNorm,    //!< 16bit ABGR 各4bit
        BGRA4_UNorm,    //!< 16bit BGRA 各4bit

        A8_UNorm,       //!< 8bit アルファのみ
    };
}

説明#

主にテクスチャなどで扱う、ピクセルフォーマットを表す列挙型です。

注釈

全てのピクセルフォーマットを列挙しきれないため、MGLではひとまず使用頻度の高そうなもののみを選定して列挙しています。MGLが定義していないピクセルフォーマットであっても、レンダラが対応しているものであれば利用可能です。その場合はアプリケーション側からはUnknownとなります。

定義済みのピクセルフォーマットとその内容は次の通りです。

Unknown

不明なピクセルフォーマットです。

RGBA8_UNorm

32bitのRGBAフォーマットです。赤8bit、緑8bit、青8bit、アルファ8bitの順に、正規化された符号なしの数値で表現されます。

BGRA8_UNorm

32bitのBGRAフォーマットです。青8bit、緑8bit、赤8bit、アルファ8bitの順に、正規化された符号なしの数値で表現されます。

B5G6R5_UNorm

16bitのBGRフォーマットです。青5bit、緑6bit、赤5bitの順に、正規化された符号なしの数値で表現されます。

A1BGR5_UNorm

16bitのABGRフォーマットです。アルファ1bit、青5bit、緑5bit、赤5bitの順に、正規化された符号なしの数値で表現されます。

BGR5A1_UNorm

16bitのBGRAフォーマットです。青5bit、緑5bit、赤5bit、アルファ1bitの順に、正規化された符号なしの数値で表現されます。

ABGR4_UNorm

16bitのABGRフォーマットです。アルファ4bit、青4bit、緑4bit、赤4bitの順に、正規化された符号なしの数値で表現されます。

BGRA4_UNorm

16bitのABGRフォーマットです。青4bit、緑4bit、赤4bit、アルファ4bitの順に、正規化された符号なしの数値で表現されます。

A8_UNorm

8bitのアルファ値のみのフォーマットです。正規化された符号なしの数値で表現されます。

関連#


SamplerType#

サンプラーの列挙型

宣言#

namespace MGL::Render
{
    enum class SamplerType
    {
        Invalid,    //!< 無効
        Nearest,    //!< 最近傍補間
        Linear,     //!< 線形補間
    };
}

説明#

スケーリングの補間処理に利用するサンプラーの種類を表す列挙型です。定義済みのサンプラータイプとその内容は次の通りです。

Invalid

無効なサンプラータイプを表す値です。通常、この値は利用できません。

Nearest

最近傍補間を表す値です。

Linear

線形補間を表す値です。

関連#


BlendMode#

ブレンドモードの列挙型

宣言#

namespace MGL::Render
{
    enum class BlendMode
    {
        None,       //!< なし
        Alpha,      //!< アルファブレンド
    };
}

説明#

ブレンドモードを表す列挙型です。主にレンダリング時の色の合成方法の指定に利用します。

定義済みのブレンドモードは次の通りです。

None

ブレンディングを行わないモードを表す値です。

Alpha

乗算によるブレンディングを行うモードを表す値です。

関連#


MakeRendererType#

レンダラ判別用の値を作るための定数式

宣言#

namespace MGL::Render
{
    constexpr RendererType MakeRendererType(const char *type) noexcept
    {
        return Hash::FNV1a(type);
    }
}

引数#

const char *type

レンダラの種類を表す文字列

戻り値#

RendererType

レンダラ判別用の値

説明#

レンダラ判別用の値を生成するための定数式です。引数で指定した文字列を元に、32bitの整数値を生成します。生成される値はMGL::Hash::FNV1aによって算出された32bitハッシュ値です。

通常はアプリケーション側からこの機能を利用する必要はありません。独自のレンダラを実装する際には、そのレンダラを表す値をこの定数を用いて定義する必要があります。独自レンダラの実装の詳細については2Dレンダラの作成(準備中)を参照してください。

現在、MGLの標準レンダラが利用している文字列とその値は次の通りです。

文字列

レンダラの種類

MGL-Direct3D11

Direct3D11レンダラ(Windows用)

0xF08449F5

MGL-Metal

Metalレンダラ(macOS, iOS, tvOS用)

0x5AFDB6F4

利用例#

// 2Dレンダラが利用しているレンダラの種類を取得
MGL::Render::Renderer2D renderer;
auto rendererType = renderer.GetRendererType();

// レンダラの種類を判別
// 定数式であり、コンパイル時に値に変換されるため、switchによる分岐が利用可能
switch (rendererType)
{
    case MGL::Render::MakeRendererType("MGL-Direct3D11"):
        print("MGLのDirect3D11レンダラを使用中\n");
        break;

    case MGL::Render::MakeRendererType("MGL-Metal"):
        print("MGLのMetalレンダラを使用中\n");
        break;

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

関連#


GetPixelPerBytes#

ピクセルフォーマットのサイズを取得するための定数式

宣言#

namespace MGL::Render
{
    constexpr size_t GetPixelPerBytes(PixelFormat format) noexcept;
}

引数#

PixelFormat format

ピクセルフォーマット

戻り値#

size_t

1ピクセルあたりのバイト数

説明#

ピクセルのサイズを取得するための定数式です。ピクセルフォーマットから1ピクセルあたりのバイト数を取得します。

利用例#

// PixelFormat::RGBA8_UNormの1ピクセルあたりのサイズを取得
auto size = MGL::Render::GetPixelPerBytes(MGL::Render::PixelFormat::RGBA8_UNorm); // size = 4

関連#