JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
hmi::SceneResources Class Reference

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
SceneResourcesoperator= (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).
RhiContextcontext () noexcept
SpriteBatchsprites () noexcept
TextureAtlasatlas () noexcept
BitmapFontfont () noexcept
TextureCachetextures () noexcept
SkinCatalogskins () 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

Detailed Description

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.

Constructor & Destructor Documentation

◆ SceneResources() [1/2]

hmi::SceneResources::SceneResources ( )
default

◆ ~SceneResources()

hmi::SceneResources::~SceneResources ( )

◆ SceneResources() [2/2]

hmi::SceneResources::SceneResources ( const SceneResources & )
delete

Member Function Documentation

◆ atlas()

TextureAtlas & hmi::SceneResources::atlas ( )
inlinenodiscardnoexcept

◆ context()

RhiContext & hmi::SceneResources::context ( )
inlinenodiscardnoexcept

◆ create()

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).

◆ created()

bool hmi::SceneResources::created ( ) const
inlinenodiscardnoexcept
Returns
true si create a réussi et que rien n'a été libéré depuis.

◆ font()

BitmapFont & hmi::SceneResources::font ( )
inlinenodiscardnoexcept

◆ operator=()

SceneResources & hmi::SceneResources::operator= ( const SceneResources & )
delete

◆ release()

void hmi::SceneResources::release ( )
noexcept

Libère tout, dans l'ordre imposé par les dépendances entre ressources.

◆ setFrameUpdates()

void hmi::SceneResources::setFrameUpdates ( QRhiResourceUpdateBatch * updates)
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.

◆ skins()

SkinCatalog & hmi::SceneResources::skins ( )
inlinenodiscardnoexcept

◆ sprites()

SpriteBatch & hmi::SceneResources::sprites ( )
inlinenodiscardnoexcept

◆ textures()

TextureCache & hmi::SceneResources::textures ( )
inlinenodiscardnoexcept

Member Data Documentation

◆ _atlas

std::unique_ptr<TextureAtlas> hmi::SceneResources::_atlas
private

◆ _context

RhiContext hmi::SceneResources::_context
private

◆ _font

std::unique_ptr<BitmapFont> hmi::SceneResources::_font
private

◆ _skins

SkinCatalog hmi::SceneResources::_skins
private

◆ _spriteBatch

std::unique_ptr<SpriteBatch> hmi::SceneResources::_spriteBatch
private

◆ _textureCache

std::unique_ptr<TextureCache> hmi::SceneResources::_textureCache
private

The documentation for this class was generated from the following files:
  • /home/runner/work/JustAnotherDnDGame/JustAnotherDnDGame/Source/HMI/Graphics/SceneResources.h
  • /home/runner/work/JustAnotherDnDGame/JustAnotherDnDGame/Source/HMI/Graphics/SceneResources.cpp