JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
TextureCache.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 Valentin Eloy
2// SPDX-License-Identifier: GPL-3.0-or-later
3
4#pragma once
5
6#include <filesystem>
7#include <optional>
8#include <string>
9
18
23
24namespace hmi {
25
61public:
68 TextureCache(const RhiContext& context, AssetPaths paths);
69
70 TextureCache(const TextureCache&) = delete;
72
80 [[nodiscard]] const LoadedTexture* get(const std::string& fileName, AssetFamily family);
81
102 [[nodiscard]] const LoadedTexture* getMasked(const std::string& fileName, AssetFamily family,
103 core::TileType type);
104
120 [[nodiscard]] const AnimationDescription* getAnimation(const std::string& fileName,
121 int textureWidth, int textureHeight);
122
138 [[nodiscard]] const LoadedTexture* getFromPath(const std::filesystem::path& path);
139
149 void invalidate(const std::string& fileName);
150
153 void invalidateAll();
154
156 [[nodiscard]] std::size_t entryCount() const noexcept {
157 return _entries.size();
158 }
159
168 [[nodiscard]] const LoadedTexture* missingTexture();
169
171 [[nodiscard]] const AssetPaths& assetPaths() const noexcept {
172 return _paths;
173 }
174
175private:
178 [[nodiscard]] std::optional<LoadedTexture> load(
179 const std::string& fileName, AssetFamily family,
180 std::optional<core::TileType> maskType = std::nullopt) const;
181
183 [[nodiscard]] const LoadedTexture* getUnderKey(const std::string& cacheKey,
184 const std::string& fileName, AssetFamily family,
185 std::optional<core::TileType> maskType);
186
190 [[nodiscard]] std::optional<AnimationDescription> loadAnimation(const std::string& fileName,
191 int textureWidth,
192 int textureHeight) const;
193
194 const RhiContext& _context; // possédé par le viewport
204 std::optional<LoadedTexture> _missingTexture;
205};
206
220[[nodiscard]] const LoadedTexture* resolveOrPlaceholder(TextureCache& cache,
221 const std::string& fileName,
222 AssetFamily family);
223
224} // namespace hmi
Lecture et validation du format nom-asset.anim.json (LOT-46 TACHE-03).
Contrat de dimensions par famille d'assets graphiques et validation pure (EX-REN-007).
Résolution de chemins d'assets graphiques dans un dossier donné.
Registre générique clé → ressource chargée paresseusement, avec invalidation (EX-REN-043,...
Accès partagé au QRhi courant et au lot de mises à jour de ressources de l'image en cours (EX-REN-050...
Chargement de textures GPU depuis des fichiers image (EX-REN-041), au travers de QRhi.
Détourage des tuiles dont la matière n'occupe pas toute la case.
Types de tuiles d'une carte et utilitaires associés.
Résout des noms d'assets logiques vers des chemins de fichiers, dans un dossier donné.
Definition AssetPaths.h:26
Mémoïsation par clé logique : charge au premier accès, retient aussi un échec, et s'invalide par clé ...
Definition CacheRegistry.h:33
Charge, valide et met en cache des textures GPU désignées par leur nom de fichier logique.
Definition TextureCache.h:60
std::optional< AnimationDescription > loadAnimation(const std::string &fileName, int textureWidth, int textureHeight) const
Charge et valide la description d'animation d'un asset depuis le disque (sans cache),...
Definition TextureCache.cpp:113
CacheRegistry< AnimationDescription > _animationEntries
Nom logique → description d'animation, sous la même clé que _entries (LOT-46 TACHE-03) : c'est ce qui...
Definition TextureCache.h:203
void invalidateAll()
Retire toutes les entrées du cache (rechargement global, LOT-43/LOT-54), textures et descriptions d'a...
Definition TextureCache.cpp:158
std::optional< LoadedTexture > _missingTexture
Definition TextureCache.h:204
void invalidate(const std::string &fileName)
Retire une entrée du cache, de sorte que le prochain get relise le fichier.
Definition TextureCache.cpp:152
const LoadedTexture * getMasked(const std::string &fileName, AssetFamily family, core::TileType type)
Obtient la variante d'un asset détourée à la silhouette d'un type de tuile.
Definition TextureCache.cpp:92
TextureCache(const TextureCache &)=delete
const LoadedTexture * missingTexture()
Texture de repli en damier magenta, créée une seule fois à la demande.
Definition TextureCache.cpp:164
const RhiContext & _context
Definition TextureCache.h:194
std::size_t entryCount() const noexcept
Definition TextureCache.h:156
const LoadedTexture * getUnderKey(const std::string &cacheKey, const std::string &fileName, AssetFamily family, std::optional< core::TileType > maskType)
Obtient une entrée du cache sous une clé donnée, en la chargeant au premier accès.
Definition TextureCache.cpp:103
const AssetPaths & assetPaths() const noexcept
Definition TextureCache.h:171
AssetPaths _paths
Definition TextureCache.h:195
CacheRegistry< LoadedTexture > _entries
Nom logique → texture chargée ; mémorise aussi un échec déjà journalisé.
Definition TextureCache.h:199
const LoadedTexture * getFromPath(const std::filesystem::path &path)
Obtient la texture d'un fichier désigné par son chemin, hors du dossier d'assets.
Definition TextureCache.cpp:71
const AnimationDescription * getAnimation(const std::string &fileName, int textureWidth, int textureHeight)
Obtient la description d'animation d'un asset (nom-asset.anim.json, LOT-46 TACHE-03),...
Definition TextureCache.cpp:143
TextureCache & operator=(const TextureCache &)=delete
std::optional< LoadedTexture > load(const std::string &fileName, AssetFamily family, std::optional< core::TileType > maskType=std::nullopt) const
Charge et valide un asset depuis le disque, sans passer par le cache.
Definition TextureCache.cpp:22
TextureCache(const RhiContext &context, AssetPaths paths)
Construit un cache vide pour un contexte de rendu et un dossier d'assets donnés.
Definition TextureCache.cpp:16
const LoadedTexture * get(const std::string &fileName, AssetFamily family)
Obtient la texture d'un asset, en la chargeant au premier accès.
Definition TextureCache.cpp:66
TileType
Type d'une tuile de la grille d'une carte (EX-GP-001).
Definition TileType.h:32
Definition AudioEngine.cpp:15
AssetFamily
Famille d'un asset graphique, qui détermine les dimensions attendues du fichier image.
Definition AssetContract.h:22
const LoadedTexture * resolveOrPlaceholder(TextureCache &cache, const std::string &fileName, AssetFamily family)
Obtient la texture d'un asset, ou le repli en damier magenta à défaut.
Definition TextureCache.cpp:179
Description d'animation d'un asset : disposition de sa spritesheet et ses clips.
Definition AnimationCatalog.h:44
Texture GPU chargée (RAII).
Definition TextureLoader.h:40
Le QRhi courant et le lot de téléversements de l'image en cours.
Definition RhiContext.h:34