Nameless Engine
Loading...
Searching...
No Matches
TextureManager.h
1#pragma once
2
3// Standard.
4#include <unordered_map>
5#include <string>
6#include <mutex>
7#include <memory>
8#include <variant>
9
10// Custom.
11#include "misc/Error.h"
12#include "render/general/resources/GpuResource.h"
13
14namespace ne {
15
16 class TextureManager;
17 class GpuResourceManager;
18
25 // We expect that only texture manager will create texture handles.
26 friend class TextureManager;
27
28 public:
29 TextureHandle() = delete;
30
31 TextureHandle(const TextureHandle&) = delete;
32 TextureHandle& operator=(const TextureHandle&) = delete;
33
34 TextureHandle(TextureHandle&&) = delete;
35 TextureHandle& operator=(TextureHandle&&) = delete;
36
43
49 std::string getPathToResourceRelativeRes();
50
53
54 private:
66 const std::string& sPathToResourceRelativeRes,
68
75
78
81 };
82
85 // Texture handles will notify texture manager in destructor to mark referenced texture resource
86 // as not used so that texture manager can release the texture resource from memory
87 // if no texture handle is referencing it.
88 friend class TextureHandle;
89
90 public:
91 TextureManager(const TextureManager&) = delete;
92 TextureManager& operator=(const TextureManager&) = delete;
93
94 TextureManager() = delete;
95
102
105
112
126 std::variant<std::unique_ptr<TextureHandle>, Error>
127 getTexture(const std::string& sPathToResourceRelativeRes);
128
129 private:
133 std::unique_ptr<GpuResource> pTexture;
134
137 };
138
146 void releaseTextureResourceIfNotUsed(const std::string& sPathToResourceRelativeRes);
147
150
160 std::unique_ptr<TextureHandle> createNewTextureHandle(const std::string& sPathToResourceRelativeRes);
161
170 std::variant<std::unique_ptr<TextureHandle>, Error>
171 loadTextureAndCreateNewTextureHandle(const std::string& sPathToResourceRelativeRes);
172
177 std::pair<std::recursive_mutex, std::unordered_map<std::string, TextureResource>> mtxTextureResources;
178
181
184 };
185}
Definition: Error.h:27
Definition: GpuResourceManager.h:42
Definition: GpuResource.h:14
Definition: TextureManager.h:24
GpuResource * pTexture
Definition: TextureManager.h:80
std::string sPathToResourceRelativeRes
Definition: TextureManager.h:74
~TextureHandle()
Definition: TextureManager.cpp:216
TextureManager * pTextureManager
Definition: TextureManager.h:77
GpuResource * getResource()
Definition: TextureManager.cpp:212
std::string getPathToResourceRelativeRes()
Definition: TextureManager.cpp:214
Definition: TextureManager.h:84
std::pair< std::recursive_mutex, std::unordered_map< std::string, TextureResource > > mtxTextureResources
Definition: TextureManager.h:177
std::variant< std::unique_ptr< TextureHandle >, Error > loadTextureAndCreateNewTextureHandle(const std::string &sPathToResourceRelativeRes)
Definition: TextureManager.cpp:161
size_t getTextureInMemoryCount()
Definition: TextureManager.cpp:48
~TextureManager()
Definition: TextureManager.cpp:22
GpuResourceManager *const pResourceManager
Definition: TextureManager.h:183
std::string sTextureFormatExtension
Definition: TextureManager.h:180
std::variant< std::unique_ptr< TextureHandle >, Error > getTexture(const std::string &sPathToResourceRelativeRes)
Definition: TextureManager.cpp:55
std::unique_ptr< TextureHandle > createNewTextureHandle(const std::string &sPathToResourceRelativeRes)
Definition: TextureManager.cpp:129
void determineTextureFormatExtension()
Definition: TextureManager.cpp:120
void releaseTextureResourceIfNotUsed(const std::string &sPathToResourceRelativeRes)
Definition: TextureManager.cpp:77
Definition: TextureManager.h:131
std::unique_ptr< GpuResource > pTexture
Definition: TextureManager.h:133
size_t iActiveTextureHandleCount
Definition: TextureManager.h:136