9 #ifndef hifi_QmlTextureCache_h
10 #define hifi_QmlTextureCache_h
15 #include <unordered_map>
19 #include <QtCore/QSize>
21 namespace hifi {
namespace qml {
namespace impl {
23 class TextureAndFence :
public std::pair<uint32_t, void*> {
24 using Parent = std::pair<uint32_t, void*>;
26 TextureAndFence() : Parent(0, 0) {}
27 TextureAndFence(uint32_t texture,
void* sync) : Parent(texture, sync) {};
33 using Value = TextureAndFence;
34 using ValueList = std::list<Value>;
35 using Size = uint64_t;
39 size_t clientCount { 0 };
40 ValueList returnedTextures;
43 void releaseSize(
const QSize& size);
44 void acquireSize(
const QSize& size);
45 uint32_t acquireTexture(
const QSize& size);
46 void releaseTexture(
const Value& textureAndFence);
50 size_t getUsedTextureMemory();
52 static size_t getMemoryForSize(
const QSize& size);
54 uint32_t createTexture(
const QSize& size);
55 void destroyTexture(uint32_t texture);
57 void destroy(
const Value& textureAndFence);
60 using Mutex = std::mutex;
61 using Lock = std::unique_lock<Mutex>;
62 std::atomic<int> _allTextureCount;
63 std::atomic<int> _activeTextureCount;
64 std::unordered_map<Size, TextureSet> _textures;
65 std::unordered_map<uint32_t, QSize> _textureSizes;
67 std::list<Value> _returnedTextures;
68 size_t _totalTextureUsage { 0 };