MGL::Renderフォント関連各種定義#

概要#

MGL::Renderで定義されている、フォント描画に関する処理が共通で使用する宣言・定義です。

#

種類

名前

内容

バージョン

列挙型

FontFaceType

フォントの書体を表すための型

1.1.5+

列挙型

FontFeature

フォントリソースが持つ機能を表すための型

1.1.5+

列挙型

FontOrigin

フォントの原点を表すための型

1.1.5+

構造体#

種類

名前

内容

バージョン

構造体

FontGlyph

グリフの情報を格納するための構造体

1.1.5+

構造体

FontWorkdata

フォント描画のためのワークデータ

1.1.6+

関数・定数式#

種類

名前

内容

バージョン

定数式

MakeFontFaceType

文字列からフォントの書体を表す値を生成

1.1.5+


FontFaceType#

フォントの書体を表すための型

宣言#

namespace MGL::Render
{
    enum class FontFaceType : uint32_t
    {
        Default = Hash::FNV1a("default"),    //!< デフォルト
        Bold    = Hash::FNV1a("bold"),       //!< ボールド体
        Ruby    = Hash::FNV1a("ruby"),       //!< ルビ
    };
}

説明#

フォントの書体を表すための型と定数値です。値の内容は書体名をMGL::Hash::FNV1aによってハッシュ化した値と同値です。

この値はMGL::Render::MakeFontFaceTypeによって文字列からも生成可能です。

バージョン情報#

  • MGL 1.1.5

    • 初回リリース

関連#


FontFeature#

フォントリソースが持つ機能を表すための型

宣言#

namespace MGL::Render
{
    enum class FontFeature : uint32_t
    {
        IndexedCharacter    = 1u << 0u,     //!< インデックス文字
        GetGlyph            = 1u << 1u,     //!< グリフの取得
        Tag                 = 1u << 2u,     //!< タグ
        Ruby                = 1u << 3u,     //!< ルビ

        UnusedMask          = 0xFFFFFFF0,   //!< 未使用ビットフィールドのマスク値
    };
}

説明#

フォントリソースが持つ機能を表すための型と定数値です。値の種類と内容は次の通りです。

IndexedCharacter

インデックス文字に対応しているかを表す値です。

GetGlyph

グリフ情報の取得に対応しているかを表す値です。

Tag

タグによるテキスト装飾に対応しているかを表す値です。

Ruby

ルビ(振り仮名)に対応しているかを表す値です。

UnusedMask

未使用ビットフィールドを表すマスク値です。通常、アプリケーション側からこの値を使用する必要はありません。

各値はビットフラグによって定義されており、1つのFontFeature型の変数で全ての機能の有無を表現可能です。ただし、通常はMGL::Render::Font::IsEnabledおよびMGL::Render::FontResource::SetEnabledを用いて取得・設定を行うため、この値の内容がビットフラグであることを意識する必要はありません。

バージョン情報#

  • MGL 1.1.5

    • 初回リリース

  • MGL 1.1.13

    • UnusedMaskを追加


FontOrigin#

フォントの原点を表すための型

宣言#

namespace MGL::Render
{
    enum class FontOrigin : uint8_t
    {
        TopLeft,        //!< 左上
        BaseLine,       //!< ベースライン
    };
}

説明#

フォントリソースが原点とする位置を表すための型と定数値です。

MGL::Render::Font::SetPositionで設定した座標の基準位置が文字の左上となる場合はTopLeftで表現し、ベースラインを基準とする場合はBaseLineで表現します。

../_images/font_origin.svg

左横書きにおける文字の位置と原点位置との関係図#

バージョン情報#

  • MGL 1.1.5

    • 初回リリース

  • MGL 1.1.13

    • 型のサイズにuint8_tを指定


FontGlyph#

グリフの情報を格納するための構造体

宣言#

namespace MGL::Render
{
    struct FontGlyph
    {
        char32_t code;              //!< 文字コード(UTF-32)
        Vector2 size;               //!< サイズ(幅と高さ)
        float advance;              //!< 送り幅
        Vector2 bearing;            //!< ベアリング
        TextureWithBounds texture;  //!< 表示するテクスチャ
    };
}

説明#

グリフの情報を格納するための構造体です。メンバ変数の内容は次の通りです。

char32_t code

このグリフに対応した文字をUTF-32で表した値です。

MGL::Vector2 size

この文字の幅と高さを表す値です。xには幅を、yには高さを格納します。

float advance

この文字の送り幅です。この文字の表示位置に送り幅を適用した座標が次の文字の表示位置となります。

座標への適用方法は文字によって異なります。例として、左横書きの文字の場合、X座標にこの値を加算した位置が次の文字の表示位置となります。

MGL::Vector2 bearing

このグリフを表示する際に適用するオフセット値です。

この値が表すオフセットは左下を原点とした座標系になります。スクリーン座標系で表示する場合、Y座標の向きが異なる点にご注意ください。

MGL::Render::TextureWithBounds texture

このグリフが格納されているテクスチャとその座標を表す値です。

バージョン情報#

  • MGL 1.1.5

    • 初回リリース


FontWorkdata#

フォント描画のためのワークデータ

宣言#

namespace MGL::Render
{
    struct FontWorkdata
    {
        Vector2 position;   //!< 表示位置
        int32_t limitCount; //!< 表示上限数
    };
}

説明#

フォントリソースの描画に使用する共通のパラメータです。この情報は描画実行後に更新され得るパラメータとなります。

この構造体は通常はアプリケーションから参照することはありません。フォントリソースを実装する際に、引数として渡されるこのワークデータの内容を適切に使用・更新する必要があります。

メンバ変数の内容は次の通りです。

MGL::Vector2 position

描画位置を表す値です。通常は1文字目の描画の基準位置を表します。

フォントリソース実装時においては、描画実行後に次の文字の基準位置へと更新してください。

int32_t limitCount

文字描画の上限数を表す値です。この値が負数の場合は上限なしとして扱われます。

フォントリソース実装時においては、この値が正数である場合にその数以上の文字数を描画しないように実装してください。また、上限数が表示文字数を上回っている場合は、渡された値から実際に表示した文字数を引いた値を設定してください。

バージョン情報#

  • MGL 1.1.6

    • 初回リリース


MakeFontFaceType#

文字列からフォントの書体を表す値を生成

宣言#

namespace MGL::Render
{
    constexpr FontFaceType MakeFontFaceType(const char *name) noexcept;
}

引数#

const char *name

書体名

戻り値#

MGL::Render::FontFaceType

フォントの書体を表す値

説明#

書体名の文字列から書体を表す値を生成して取得します。

この値はMGL::Hash::FNV1aで書体名をハッシュ化した値と同値です。

利用例#

auto faceType = MGL::Render::MakeFontFaceType("bold");

if (faceType == MGL::Render::FontFaceType::Bold)
{
    // ここに必ず到達
}

バージョン情報#

  • MGL 1.1.5

    • 初回リリース

関連#