MGL(Win32)
読み取り中…
検索中…
一致する文字列を見つけられません
mgl_texture_storage.h
[詳解]
1// SPDX-License-Identifier: Zlib
2/* ------------------------------------------------------------------------- */
9/* ------------------------------------------------------------------------- */
10
11#ifndef INCGUARD_MGL_TEXTURE_STORAGE_H_1607583805
12#define INCGUARD_MGL_TEXTURE_STORAGE_H_1607583805
13
20
21#include <condition_variable>
22#include <mutex>
23
24namespace MGL::Render
25{
27enum class TextureKey : uint32_t {};
28
30constexpr uint32_t kDefaultTextureKeySeed = MGL::Hash::kFNV1aDefaultValue32; // 32bitの値なら何でもいい.衝突する場合は変更を
31
32/* ------------------------------------------------------------------------- */
39/* ------------------------------------------------------------------------- */
40constexpr TextureKey MakeTextureKey(const char *key, uint32_t seed = kDefaultTextureKeySeed) noexcept
41{
42 return TextureKey{MGL::Hash::FNV1a(key, seed)};
43}
44
45
48{
49public:
51 static constexpr TextureLoaderKey kDefaultLoaderKey = MakeTextureLoaderKey("MGL-DefaultLoader");
52
54 ~TextureStorage() noexcept;
55
56 [[nodiscard]] SharedTextureResource Load(const void *imageData, size_t dataSize, TextureLoaderKey loaderKey = kDefaultLoaderKey) noexcept;
57 [[nodiscard]] SharedTextureResource LoadAsync(const void *imageData, size_t dataSize, TextureLoaderKey loaderKey = kDefaultLoaderKey) noexcept;
58 [[nodiscard]] SharedTextureResource Load(const File::PathView &imagePath, TextureLoaderKey loaderKey = kDefaultLoaderKey) noexcept;
59 [[nodiscard]] SharedTextureResource LoadAsync(const File::PathView &imagePath, TextureLoaderKey loaderKey = kDefaultLoaderKey) noexcept;
60
61 SharedTextureResource Load(TextureKey key, const void *imageData, size_t dataSize, TextureLoaderKey loaderKey = kDefaultLoaderKey) noexcept;
62 SharedTextureResource LoadAsync(TextureKey key, const void *imageData, size_t dataSize, TextureLoaderKey loaderKey = kDefaultLoaderKey) noexcept;
63 SharedTextureResource Load(TextureKey key, const File::PathView &imagePath, TextureLoaderKey loaderKey = kDefaultLoaderKey) noexcept;
64 SharedTextureResource LoadAsync(TextureKey key, const File::PathView &imagePath, TextureLoaderKey loaderKey = kDefaultLoaderKey) noexcept;
65
66 SharedTextureResource Create(TextureKey key, const void *pixelData, PixelFormat pixelFormat, uint32_t width, uint32_t height) noexcept;
67 [[nodiscard]] SharedTextureResource Create(const void *pixelData, PixelFormat pixelFormat, uint32_t width, uint32_t height) noexcept;
68
69 SharedTextureResource CreateRenderTarget(TextureKey key, uint32_t width, uint32_t height) noexcept;
70 [[nodiscard]] SharedTextureResource CreateRenderTarget(uint32_t width, uint32_t height) noexcept;
71
73
74 bool Destroy(TextureKey key) noexcept;
75
76 /* ------------------------------------------------------------------------- */
81 /* ------------------------------------------------------------------------- */
82 constexpr void SetDefaultLoader(TextureLoaderKey loaderKey) noexcept
83 {
84 _defaultLoaderKey = loaderKey;
85 }
86
87 bool RegisterLoader(TextureLoaderKey loaderKey, UniqueTextureLoader loader) noexcept;
88
89private:
90 TextureLoader *GetTextureLoader(TextureLoaderKey loaderKey) const noexcept;
91 SharedTextureResource CreateDerivedResource() const noexcept;
92
93 void SetLoading(TextureResource *resource, bool isLoading) noexcept;
94 void WaitLoading() noexcept;
95
96 STL::unique_ptr<TextureGenerator> _textureGenerator;
97 STL::unordered_map<TextureKey, SharedTextureResource> _resources;
98 STL::unordered_map<TextureLoaderKey, UniqueTextureLoader> _loaders;
99 TextureLoaderKey _defaultLoaderKey;
100
101 std::atomic<uint32_t> _loadingCount;
102 std::condition_variable _loadingCondition;
103 std::mutex _loadingMutex;
104
105 std::mutex _tableMutex;
106};
107} // namespace MGL::Render
108#endif // INCGUARD_MGL_TEXTURE_STORAGE_H_1607583805
109
110// vim: et ts=4 sw=4 sts=4
テクスチャ生成クラス
Definition mgl_texture_generator.h:20
テクスチャローダー
Definition mgl_texture_loader.h:43
テクスチャリソース
Definition mgl_texture_resource.h:25
テクスチャストレージ
Definition mgl_texture_storage.h:48
~TextureStorage() noexcept
デストラクタ
Definition mgl_texture_storage.cc:49
bool Destroy(TextureKey key) noexcept
テクスチャリソースを破棄
Definition mgl_texture_storage.cc:586
TextureStorage(STL::unique_ptr< TextureGenerator > generator) noexcept
コンストラクタ
Definition mgl_texture_storage.cc:36
static constexpr TextureLoaderKey kDefaultLoaderKey
デフォルトのテクスチャローダーを表すキー
Definition mgl_texture_storage.h:51
SharedTextureResource Create(TextureKey key, const void *pixelData, PixelFormat pixelFormat, uint32_t width, uint32_t height) noexcept
テクスチャリソースの生成
Definition mgl_texture_storage.cc:429
SharedTextureResource Load(const void *imageData, size_t dataSize, TextureLoaderKey loaderKey=kDefaultLoaderKey) noexcept
テクスチャをメモリ上のイメージデータから読み込み
Definition mgl_texture_storage.cc:67
SharedTextureResource LoadAsync(const void *imageData, size_t dataSize, TextureLoaderKey loaderKey=kDefaultLoaderKey) noexcept
テクスチャをメモリ上のイメージデータから非同期で読み込み
Definition mgl_texture_storage.cc:104
SharedTextureResource Get(TextureKey key) noexcept
テクスチャリソースの取得
Definition mgl_texture_storage.cc:567
SharedTextureResource CreateRenderTarget(TextureKey key, uint32_t width, uint32_t height) noexcept
レンダーターゲットの生成
Definition mgl_texture_storage.cc:497
bool RegisterLoader(TextureLoaderKey loaderKey, UniqueTextureLoader loader) noexcept
テクスチャローダーの登録
Definition mgl_texture_storage.cc:603
constexpr void SetDefaultLoader(TextureLoaderKey loaderKey) noexcept
デフォルトで使用するローダーを設定
Definition mgl_texture_storage.h:82
MGL FNV-1aハッシュ計算関数
PixelFormat
ピクセルフォーマット
Definition mgl_render_types.h:37
MGL シングルトンクラス
MGL STLコンテナの代替
std::unique_ptr< T, Deleter > unique_ptr
MGLのアロケータを利用するユニークポインタ
Definition mgl_stl_memory.h:247
MGL テクスチャ生成クラス
MGL テクスチャローダー
uint32_t TextureLoaderKey
テクスチャローダーのキー
Definition mgl_texture_loader.h:23
STL::unique_ptr< TextureLoader > UniqueTextureLoader
テクスチャローダーのユニークポインタ
Definition mgl_texture_loader.h:72
constexpr TextureLoaderKey MakeTextureLoaderKey(const char *key, uint32_t seed=kDefaultTextureLoaderKeySeed) noexcept
テクスチャローダーのキーを生成
Definition mgl_texture_loader.h:36
MGL テクスチャリソース
std::shared_ptr< MGL::Render::TextureResource > SharedTextureResource
共有するテクスチャリソースの型
Definition mgl_texture_resource.h:145
TextureKey
テクスチャにアクセスするキーの型
Definition mgl_texture_storage.h:27
constexpr uint32_t kDefaultTextureKeySeed
テクスチャキーを生成する際のハッシュのシード値
Definition mgl_texture_storage.h:30
constexpr TextureKey MakeTextureKey(const char *key, uint32_t seed=kDefaultTextureKeySeed) noexcept
テクスチャキーを生成
Definition mgl_texture_storage.h:40