MGL::Render::TextureResource
Contents
MGL::Render::TextureResource#
概要#
TextureResourceクラスはMGLのレンダラが扱うテクスチャを実装するための基底クラスです。MGL用のレンダラを実装する際に、このクラスを継承することでプラットフォーム毎に異なるテクスチャリソースの差異を吸収します。
注釈
このクラスは主に独自のレンダラの実装やテクスチャローダを自作する際に利用します。アプリケーション側からテクスチャを利用する場合はMGL::Render::Textureクラスを利用してください。
宣言#
namespace MGL::Render
{
class TextureResource;
}
型、列挙型#
種類 |
名前 |
内容 |
バージョン |
---|---|---|---|
型 |
テクスチャリソースの共有ポインタ |
1.0.0+ |
メンバ情報#
種類 |
名前 |
内容 |
バージョン |
---|---|---|---|
純粋仮想関数 |
リソースがどのレンダラ用のものかを取得 |
1.0.0+ |
|
純粋仮想関数 |
有効状態の取得 |
1.0.0+ |
|
純粋仮想関数 |
このテクスチャがレンダーターゲットかを取得 |
1.0.0+ |
|
純粋仮想関数 |
テクスチャの生成 |
1.0.0+ |
|
純粋仮想関数 |
レンダーターゲットとしてテクスチャを生成 |
1.0.0+ |
|
純粋仮想関数 |
テクスチャのサイズの取得 |
1.0.0+ |
|
純粋仮想関数 |
テクスチャのピクセルフォーマットを取得 |
1.0.0+ |
|
関数 |
テクスチャが読み込み中であるかを取得 |
1.0.0+ |
|
関数 |
テクスチャの読み込み中フラグの更新 |
1.0.0+ |
GetRendererType#
リソースがどのレンダラ用のものかを取得
宣言#
namespace MGL::Render
{
class TextureResource
{
[[nodiscard]] 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)
{
...
}
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
関連#
IsValid#
有効状態の取得
宣言#
namespace MGL::Render
{
class TextureResource
{
[[nodiscard]] virtual bool IsValid() const noexcept = 0;
};
}
戻り値#
- bool
リソースが利用可能であればtrue、そうでなければfalse
説明#
リソースの有効状態を返し、利用可能であるかを判別するための関数です。
継承先のクラスにおいては、リソースが利用可能な場合にtrueを返してください。
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
利用例#
// どこかからTextureResourceを取得してきたものと仮定
MGL::Render::TextureResource &resource = xxx;
if (resource.IsValid())
{
// テクスチャリソースが利用可能であればここに到達
...
}
IsRenderTarget#
このテクスチャがレンダーターゲットかを取得
宣言#
namespace MGL::Render
{
class TextureResource
{
[[nodiscard]] virtual bool IsRenderTarget() const noexcept = 0;
};
}
戻り値#
- bool
リソースがレンダーターゲットであればtrue、そうでなければfalse
説明#
リソースがレンダーターゲットとして扱えるかを取得するための関数です。
継承先のクラスにおいては、リソースを描画先に指定できる場合にtrueを返してください。
利用例#
// どこかからTextureResourceを取得してきたものと仮定
MGL::Render::TextureResource &resource = xxx;
if (resource.IsRenderTarget())
{
// テクスチャリソースが利用可能であればここに到達
...
}
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
関連#
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);
バージョン情報#
- MGL 1.0.0
初回リリース
関連#
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);
バージョン情報#
- MGL 1.0.0
初回リリース
関連#
GetSize#
テクスチャのサイズの取得
宣言#
namespace MGL::Render
{
class TextureResource
{
[[nodiscard]] 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);
}
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
GetPixelFormat#
テクスチャのピクセルフォーマットを取得
宣言#
namespace MGL::Render
{
class TextureResource
{
virtual PixelFormat GetPixelFormat() const noexcept = 0;
};
}
戻り値#
- PixelFormat
テクスチャのピクセルフォーマット
説明#
テクスチャのピクセルフォーマットを取得するための関数です。
継承先のクラスにおいては、有効なテクスチャのピクセルフォーマットを返してください。MGL側に定義が存在しない場合はMGL::Render::PixelFormat::Unknownを、リソースが有効でない場合はMGL::Render::PixelFormat::Invalidを使用してください。
利用例#
// ピクセルフォーマットを表示する関数の例
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;
case MGL::Render::PixelFormat::Invalid:
printf("無効なピクセルフォーマット\n");
break;
}
}
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与MGL::Render::PixelFormatに
Invalid
を追加し、Unknown
の扱いを変更
関連#
IsLoading#
テクスチャが読み込み中であるかを取得
宣言#
namespace MGL::Render
{
class TextureResource
{
[[nodiscard]] bool IsLoading() const noexcept
};
}
戻り値#
- bool
読み込み中である場合はtrue、そうでなければfalse
説明#
テクスチャが読み込み中であるかを取得するための関数です。
この関数はSetLoadingでセットされたフラグを返します。詳細はSetLoadingをの説明を参照してください。
利用例#
// どこかからTextureResourceを取得してきたものと仮定
MGL::TextureResource &resource = xxx;
if (resource.IsLoading())
{
// 読み込み中はここに到達する。
...
}
バージョン情報#
- MGL 1.0.0
初回リリース
- MGL 1.1.13
関数の戻り値に
[[nodiscard]]
属性を付与
SetLoading#
テクスチャの読み込み中フラグの更新
宣言#
namespace MGL::Render
{
class TextureResource
{
void SetLoading(bool isLoading) noexcept
};
}
引数#
- bool isLoading
セットするフラグ
説明#
ロード中を表すフラグを更新するための関数です。
この関数はMGL::Render::TextureStorageが適切なタイミングで呼び出します。独自のレンダラを実装する場合であっても、直接この関数を呼び出す必要はなく、推奨もされません。
バージョン情報#
- MGL 1.0.0
初回リリース