MGL::Render::TextureResource#

概要#

TextureResourceクラスはMGLのレンダラが扱うテクスチャを実装するための基底クラスです。MGL用のレンダラを実装する際に、このクラスを継承することでプラットフォーム毎に異なるテクスチャリソースの差異を吸収します。

注釈

このクラスは主に独自のレンダラの実装やテクスチャローダを自作する際に利用します。アプリケーション側からテクスチャを利用する場合はMGL::Render::Textureクラスを利用してください。

宣言#

namespace MGL::Render
{
    class TextureResource;
}

#

名前

内容

SharedTextureResource

テクスチャリソースの共有ポインタ

メンバ情報#

種類

名前

内容

純粋仮想関数

GetRendererType

リソースがどのレンダラ用のものかを取得

純粋仮想関数

IsValid

有効状態の取得

純粋仮想関数

IsRenderTarget

このテクスチャがレンダーターゲットかを取得

純粋仮想関数

Create

テクスチャの生成

純粋仮想関数

CreateRenderTarget

レンダーターゲットとしてテクスチャを生成

純粋仮想関数

GetSize

テクスチャのサイズの取得

純粋仮想関数

GetPixelFormat

テクスチャのピクセルフォーマットを取得

関数

IsLoading

テクスチャが読み込み中であるかを取得

関数

SetLoading

テクスチャの読み込み中フラグの更新


SharedTextureResource#

テクスチャリソースの共有ポインタ

宣言#

namespace MGL::Render
{
    using SharedTextureResource = std::shared_ptr<MGL::Render::TextureResource>;
}

説明#

TextureResourceクラスを共有ポインタとして扱うためのエイリアスです。


GetRendererType#

リソースがどのレンダラ用のものかを取得

宣言#

namespace MGL::Render
{
    class TextureResource
    {
        virtual RendererType GetRendererType() const noexcept = 0;
    };
}

戻り値#

RendererType

対象となるレンダラの種類を表す値

説明#

このテクスチャリソースがどのレンダラ用のものであるかを表すための値を返します。レンダラはこの関数を戻り値を参照して、自身が扱えるか否かを判断します。

継承先のクラスにおいては、そのクラスが対象としているレンダラの種類を表す値を返してください。値のに生成はMGL::Render::MakeRendererTypeを利用してください。

利用例#

// 独自レンダラの判別用の値を定義
// この値はレンダラ本体のデリゲートも扱うため定数として定義した方が便利
constexpr auto kYourRendererType = MGL::Render::MakeRendererType("YourRendererName");
// 実装例

// 継承先のクラスで判別用の値を返すよう実装
virtual MGL::Render::RendererType YourTextureResource::GetRendererType() const noexcept override
{
    return kYourRendererType;
}
// 参照例

// どこかからTextureResourceを取得してきたものと仮定
MGL::Render::TextureResource &resource = xxx;

// テクスチャリソースが自身の扱えるものかを判別
if (resource.GetRendererType() == kYourRendererType)
{
    ...
}

関連#


IsValid#

有効状態の取得

宣言#

namespace MGL::Render
{
    class TextureResource
    {
        virtual bool IsValid() const noexcept = 0;
    };
}

戻り値#

bool

リソースが利用可能であればtrue、そうでなければfalse

説明#

リソースの有効状態を返し、利用可能であるかを判別するための関数です。

継承先のクラスにおいては、リソースが利用可能な場合にtrueを返してください。

利用例#

// どこかからTextureResourceを取得してきたものと仮定
MGL::Render::TextureResource &resource = xxx;

if (resource.IsValid())
{
    // テクスチャリソースが利用可能であればここに到達
    ...
}

IsRenderTarget#

このテクスチャがレンダーターゲットかを取得

宣言#

namespace MGL::Render
{
    class TextureResource
    {
        virtual bool IsRenderTarget() const noexcept = 0;
    };
}

戻り値#

bool

リソースがレンダーターゲットであればtrue、そうでなければfalse

説明#

リソースがレンダーターゲットとして扱えるかを取得するための関数です。

継承先のクラスにおいては、リソースを描画先に指定できる場合にtrueを返してください。

利用例#

// どこかからTextureResourceを取得してきたものと仮定
MGL::Render::TextureResource &resource = xxx;

if (resource.IsRenderTarget())
{
    // テクスチャリソースが利用可能であればここに到達
    ...
}

関連#


Create#

テクスチャの生成

宣言#

namespace MGL::Render
{
    class TextureResource
    {
        virtual bool Create(
            const void *pixelData,
            PixelFormat pixelFormat,
            uint32_t width,
            uint32_t height) noexcept = 0;
    };
}

引数#

const void *pixelData

生成時に利用するピクセルデータの先頭アドレス

PixelFormat pixelFormat

pixelDataのピクセルフォーマット

uint32_t width

生成するテクスチャの幅(ピクセル数)

uint32_t height

生成するテクスチャの高さ(ピクセル数)

戻り値#

bool

成功時にtrue、失敗時にfalse

説明#

ピクセルデータを元に新規にテクスチャを生成します。アプリケーション側からテクスチャの読み込みや生成が要求された際にこの関数が呼び出されます。

継承先のクラスにおいては、引数の情報を元に適切なテクスチャリソースを生成してください。

利用例#

// pixelDataを512x512ピクセルの32bit RGBA画像と仮定
const void *pixelData = xxx;

// テクスチャリソースを準備(実際にはnewで生成したりはしない)
MGL::Render::TextureResource *resource = new YourTextureResource();

// pixelDataを元にテクスチャを生成
resource->Create(
    pixelData,
    MGL::Render::PixelFormat::RGBA8_UNorm,
    512,
    512);

関連#


CreateRenderTarget#

レンダーターゲットとしてテクスチャを生成

宣言#

namespace MGL::Render
{
    class TextureResource
    {
        virtual bool CreateRenderTarget(uint32_t width, uint32_t height) noexcept = 0;
    };
}

引数#

uint32_t width

生成するテクスチャの幅(ピクセル数)

uint32_t height

生成するテクスチャの高さ(ピクセル数)

戻り値#

bool

成功時にtrue、失敗時にfalse

説明#

レンダラが描画先として指定可能なテクスチャを生成するための関数です。アプリケーション側からレンダーターゲットの生成を要求された際にこの関数が呼び出されます。

継承先のクラスにおいては、引数の情報を元に適切なレンダーターゲットを生成してください。

注釈

現時点において、ピクセルフォーマットを指定したレンダーターゲットの生成には対応していません。MGLの標準のレンダラでは、メインのフレームバッファ(Direct3Dではスワップチェーンに登録したビュー、Metalではドローアブル)と同じピクセルフォーマットで生成しています。

利用例#

// テクスチャリソースを準備(実際にはnewで生成したりはしない)
MGL::Render::TextureResource *resource = new YourTextureResource();

// 512x512のレンダーターゲットを生成
resource->CreateRenderTarget(512, 512);

関連#


GetSize#

テクスチャのサイズの取得

宣言#

namespace MGL::Render
{
    class TextureResource
    {
        virtual Vector2 GetSize() const noexcept = 0;
    };
}

戻り値#

MGL::Vector2

テクスチャのサイズ

説明#

テクスチャの幅と高さを取得するための関数です。

継承先のクラスにおいては、有効なテクスチャの幅と高さを返してください。リソースが有効でない場合は各要素がゼロの値を返してください。

利用例#

// テクスチャのサイズを表示する関数の例
void PrintTextureSize(const MGL::Render::TextureResource &resource)
{
    auto textureSize = resource.GetSize();

    printf("width = %f, height = %f\n", textureSize.x, textureSize.y);
}

GetPixelFormat#

テクスチャのピクセルフォーマットを取得

宣言#

namespace MGL::Render
{
    class TextureResource
    {
        virtual PixelFormat GetPixelFormat() const noexcept = 0;
    };
}

戻り値#

PixelFormat

テクスチャのピクセルフォーマット

説明#

テクスチャのピクセルフォーマットを取得するための関数です。

継承先のクラスにおいては、有効なテクスチャのピクセルフォーマットを返してください。リソースが有効でない場合はMGL::Render::PixelFormat::Unknownを返してください。

利用例#

// ピクセルフォーマットを表示する関数の例
void PrintPixelFormat(const MGL::Render::TextureResource &resource)
{
    // ピクセルフォーマットを取得
    switch (resource.GetPixelFormat)
    {
        case MGL::Render::PixelFormat::RGBA8_UNorm:
            printf("32bit RGBA\n");
            break;

        case MGL::Render::PixelFormat::BGRA8_UNorm:
            printf("32bit BGRA\n");
            break;

        case MGL::Render::PixelFormat::B5G6R5_UNorm:
            printf("16bit BGR\n");
            break;

        ...

        case MGL::Render::PixelFormat::Unknown:
            printf("不明なピクセルフォーマット\n");
            break;
    }
}

IsLoading#

テクスチャが読み込み中であるかを取得

宣言#

namespace MGL::Render
{
    class TextureResource
    {
        bool IsLoading() const noexcept
    };
}

戻り値#

bool

読み込み中である場合はtrue、そうでなければfalse

説明#

テクスチャが読み込み中であるかを取得するための関数です。

この関数はSetLoadingでセットされたフラグを返します。詳細はSetLoadingをの説明を参照してください。

利用例#

// どこかからTextureResourceを取得してきたものと仮定
MGL::TextureResource &resource = xxx;

if (resource.IsLoading())
{
    // 読み込み中はここに到達する。
    ...
}

SetLoading#

テクスチャの読み込み中フラグの更新

宣言#

namespace MGL::Render
{
    class TextureResource
    {
        void SetLoading(bool isLoading) noexcept
    };
}

引数#

bool isLoading

セットするフラグ

説明#

ロード中を表すフラグを更新するための関数です。

この関数はMGL::Render::TextureStorageが適切なタイミングで呼び出します。独自のレンダラを実装する場合であっても、直接この関数を呼び出す必要はなく、推奨もされません。

関連#