|
JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
|
Lot de sprites, atlas, police bitmap, registre de textures et catalogue de skins — créés ensemble, libérés ensemble, dans le bon ordre. More...
#include <SceneResources.h>
Public Member Functions | |
| SceneResources () | |
| ~SceneResources () | |
| SceneResources (const SceneResources &)=delete | |
| SceneResources & | operator= (const SceneResources &)=delete |
| void | create (QRhi *rhi, QRhiResourceUpdateBatch *updates) |
Crée les ressources sur rhi, en déposant les téléversements dans updates. | |
| void | release () noexcept |
| Libère tout, dans l'ordre imposé par les dépendances entre ressources. | |
| bool | created () const noexcept |
| void | setFrameUpdates (QRhiResourceUpdateBatch *updates) noexcept |
| Déclare le lot de téléversements de l'image en cours (nullptr pour le retirer en fin d'image). | |
| RhiContext & | context () noexcept |
| SpriteBatch & | sprites () noexcept |
| TextureAtlas & | atlas () noexcept |
| BitmapFont & | font () noexcept |
| TextureCache & | textures () noexcept |
| SkinCatalog & | skins () noexcept |
Private Attributes | |
| RhiContext | _context |
| std::unique_ptr< SpriteBatch > | _spriteBatch |
| std::unique_ptr< TextureAtlas > | _atlas |
| std::unique_ptr< BitmapFont > | _font |
| std::unique_ptr< TextureCache > | _textureCache |
| SkinCatalog | _skins |
Lot de sprites, atlas, police bitmap, registre de textures et catalogue de skins — créés ensemble, libérés ensemble, dans le bon ordre.
Pourquoi cette classe. Depuis le LOT-86, deux surfaces dessinent la même scène : le viewport à widget de l'éditeur (hmi::GameViewport, un QRhiWidget) et l'élément Qt Quick du jeu (hmi::GameViewportItem, un QQuickRhiItem). Elles n'ont ni le même hôte, ni la même boucle, ni les mêmes entrées — mais elles créent exactement les mêmes ressources graphiques. Les écrire deux fois aurait suffi à les faire diverger : c'est ce qui arrive toujours, et ça ne se voit qu'à l'exécution, sur une seule des deux.
L'ordre de libération est la raison d'être du regroupement. Ce qui tient une texture doit mourir avant la texture, et la texture avant le pipeline qui l'échantillonne. Libérer dans le désordre ne produit pas une erreur nette mais un plantage à la fermeture, intermittent selon le pilote. release() fixe cet ordre une fois pour toutes ; aucun appelant n'a plus à s'en souvenir.
Ce qui n'est pas ici : le brouillon d'édition, le DraftRenderer, la caméra, les plans, la session de jeu. Ils appartiennent à un seul des deux hôtes — les remonter ici rendrait la classe dépendante de l'éditeur, et le jeu paierait pour ce dont il ne se sert pas.
|
default |
| hmi::SceneResources::~SceneResources | ( | ) |
|
delete |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
| void hmi::SceneResources::create | ( | QRhi * | rhi, |
| QRhiResourceUpdateBatch * | updates ) |
Crée les ressources sur rhi, en déposant les téléversements dans updates.
updates est le lot de la première image : les textures se chargent paresseusement et leurs pixels y transitent. L'appelant le soumet ensuite, hors de toute passe de rendu — c'est la contrainte de QRhi que hmi::RhiContext documente.
Le catalogue de skins est lu à côté de l'exécutable. Fichier absent ou illisible : catalogue vide, tout retombe sur le damier de repli — un état de départ légitime, pas une erreur bloquante (EX-NFR-040).
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
delete |
|
noexcept |
Libère tout, dans l'ordre imposé par les dépendances entre ressources.
|
inlinenoexcept |
Déclare le lot de téléversements de l'image en cours (nullptr pour le retirer en fin d'image).
Les propriétaires de textures y déposent leurs pixels pendant la composition.
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
inlinenodiscardnoexcept |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |