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

Liste ordonnée des primitives d'une image, indépendante de Direct3D. More...

#include <ComposedScene.h>

Public Member Functions

void clear () noexcept
 Vide la scène (capacité conservée) et remet les compteurs à zéro. Le cadrage est conservé.
void setVisibleBounds (const core::Rect &worldBounds) noexcept
 Restreint la composition aux primitives visibles dans un cadrage donné (EX-NFR-005).
void clearVisibleBounds () noexcept
 Désactive le culling : toutes les primitives ajoutées sont conservées.
bool isCullingEnabled () const noexcept
core::Rect cullingBounds () const noexcept
 Rectangle réellement utilisé pour le culling : le cadrage élargi de la marge.
bool addSprite (RenderLayer layer, TextureHandle texture, std::int32_t sortOrder, const SpriteQuad &quad)
 Ajoute un rectangle texturé à la scène, s'il est visible.
bool addLine (RenderLayer layer, TextureHandle texture, std::int32_t sortOrder, const LineQuad &quad)
 Ajoute un segment épais à la scène, s'il est visible.
void addTextureBytes (std::size_t bytes) noexcept
 Déclare la mémoire de texture d'une primitive déjà ajoutée (EX-NFR-043).
void sort ()
 Ordonne la scène (calque, puis texture, puis sortOrder), de façon stable.
const std::vector< ComposedQuad > & quads () const noexcept
std::size_t size () const noexcept
int batchCount () const noexcept
SceneStatistics statistics () const noexcept

Static Public Attributes

static constexpr float CULLING_MARGIN_UNITS = 1.0f
 Marge de culling, en unités monde, ajoutée de chaque côté du cadrage visible.

Private Member Functions

int textureRank (TextureHandle texture)
 Rang de première apparition d'une texture, ajoutée à la table si elle est nouvelle.
bool isVisible (const core::Rect &bounds) const

Private Attributes

std::vector< ComposedQuad_quads
std::vector< TextureHandle_textureOrder
std::optional< core::Rect_visibleBounds
 Cadrage marge comprise, calculé une fois par setVisibleBounds : c'est le rectangle comparé à chaque primitive, sur un chemin parcouru des centaines de fois par image.
int _considered = 0
int _culled = 0
std::size_t _textureBytes = 0

Detailed Description

Liste ordonnée des primitives d'une image, indépendante de Direct3D.

Sépare la composition (quels quads, dans quel ordre, avec quelle texture — logique pure) de la soumission (hmi::SpriteBatch, GPU). C'est cette séparation qui rend l'ordre des calques, le regroupement par texture et le culling assertables sans GPU (EX-NFR-004), plutôt que vérifiables à l'œil. Même principe que hmi::buildProceduralAtlasImage (pur, testé) vis-à-vis de hmi::TextureAtlas (GPU).

Ordre de dessin, établi par sort() : calque (RenderLayer, ordre fixe et prioritaire), puis texture (regroupement, dans l'ordre de première apparition), puis sortOrder (core::Sprite::layer, tri fin existant) — jamais l'inverse : regrouper par texture ne doit pouvoir réordonner deux primitives de calques différents sous aucun prétexte. Le tri est stable, donc à clé égale l'ordre de composition est préservé.

Le regroupement se fait sur le rang de première apparition de la texture, pas sur la valeur du pointeur : l'ordre de dessin de deux textures d'un même calque reste ainsi déterministe d'une exécution à l'autre.

L'instance est un tampon réutilisé d'une image à l'autre (clear() conserve la capacité) : la composition n'alloue plus après les premières images, et le rendu ne paie aucun détour d'inspection.

Member Function Documentation

◆ addLine()

bool hmi::ComposedScene::addLine ( RenderLayer layer,
TextureHandle texture,
std::int32_t sortOrder,
const LineQuad & quad )

Ajoute un segment épais à la scène, s'il est visible.

Parameters
layerCalque de dessin.
textureTexture liée (identité opaque).
sortOrderTri fin à l'intérieur du calque et de la texture.
quadPrimitive à composer (unités monde).
Returns
true si la primitive a été conservée, false si le culling l'a écartée.

◆ addSprite()

bool hmi::ComposedScene::addSprite ( RenderLayer layer,
TextureHandle texture,
std::int32_t sortOrder,
const SpriteQuad & quad )

Ajoute un rectangle texturé à la scène, s'il est visible.

Parameters
layerCalque de dessin.
textureTexture liée (identité opaque).
sortOrderTri fin à l'intérieur du calque et de la texture.
quadPrimitive à composer (unités monde).
Returns
true si la primitive a été conservée, false si le culling l'a écartée.

◆ addTextureBytes()

void hmi::ComposedScene::addTextureBytes ( std::size_t bytes)
noexcept

Déclare la mémoire de texture d'une primitive déjà ajoutée (EX-NFR-043).

Séparé de addSprite plutôt qu'ajouté à hmi::SpriteQuad : seuls les plans picturaux portent une texture dont la taille dépend du niveau, et grossir chaque primitive de la scène — atlas, damier, texte, particules — de deux champs jamais lus coûterait sur le chemin parcouru des centaines de fois par image, pour une information qu'un seul émetteur possède.

Parameters
bytesPoids de la texture liée, en octets.

◆ batchCount()

int hmi::ComposedScene::batchCount ( ) const
nodiscardnoexcept
Returns
Le nombre de passes begin/end : groupes contigus de même texture.

◆ clear()

void hmi::ComposedScene::clear ( )
noexcept

Vide la scène (capacité conservée) et remet les compteurs à zéro. Le cadrage est conservé.

◆ clearVisibleBounds()

void hmi::ComposedScene::clearVisibleBounds ( )
noexcept

Désactive le culling : toutes les primitives ajoutées sont conservées.

◆ cullingBounds()

core::Rect hmi::ComposedScene::cullingBounds ( ) const
nodiscardnoexcept

Rectangle réellement utilisé pour le culling : le cadrage élargi de la marge.

Precondition
isCullingEnabled().
Returns
Le cadrage augmenté de CULLING_MARGIN_UNITS de chaque côté.

◆ isCullingEnabled()

bool hmi::ComposedScene::isCullingEnabled ( ) const
inlinenodiscardnoexcept
Returns
true si un cadrage a été fixé, donc si le culling est actif.

◆ isVisible()

bool hmi::ComposedScene::isVisible ( const core::Rect & bounds) const
nodiscardprivate
Returns
true si la boîte englobante est visible (ou si le culling est désactivé).

◆ quads()

const std::vector< ComposedQuad > & hmi::ComposedScene::quads ( ) const
inlinenodiscardnoexcept
Returns
Les primitives composées, dans l'ordre de dessin après sort().

◆ setVisibleBounds()

void hmi::ComposedScene::setVisibleBounds ( const core::Rect & worldBounds)
noexcept

Restreint la composition aux primitives visibles dans un cadrage donné (EX-NFR-005).

Parameters
worldBoundsRectangle cadré par la caméra, en unités monde (la marge est ajoutée par la scène, l'appelant n'a pas à la connaître).

◆ size()

std::size_t hmi::ComposedScene::size ( ) const
inlinenodiscardnoexcept
Returns
Le nombre de primitives conservées.

◆ sort()

void hmi::ComposedScene::sort ( )

Ordonne la scène (calque, puis texture, puis sortOrder), de façon stable.

◆ statistics()

SceneStatistics hmi::ComposedScene::statistics ( ) const
nodiscardnoexcept
Returns
Les compteurs de l'image composée (EX-NFR-005).

◆ textureRank()

int hmi::ComposedScene::textureRank ( TextureHandle texture)
nodiscardprivate

Rang de première apparition d'une texture, ajoutée à la table si elle est nouvelle.

Member Data Documentation

◆ _considered

int hmi::ComposedScene::_considered = 0
private

◆ _culled

int hmi::ComposedScene::_culled = 0
private

◆ _quads

std::vector<ComposedQuad> hmi::ComposedScene::_quads
private

◆ _textureBytes

std::size_t hmi::ComposedScene::_textureBytes = 0
private

◆ _textureOrder

std::vector<TextureHandle> hmi::ComposedScene::_textureOrder
private

◆ _visibleBounds

std::optional<core::Rect> hmi::ComposedScene::_visibleBounds
private

Cadrage marge comprise, calculé une fois par setVisibleBounds : c'est le rectangle comparé à chaque primitive, sur un chemin parcouru des centaines de fois par image.

◆ CULLING_MARGIN_UNITS

float hmi::ComposedScene::CULLING_MARGIN_UNITS = 1.0f
staticconstexpr

Marge de culling, en unités monde, ajoutée de chaque côté du cadrage visible.

Une case entière : une entité à cheval sur la frontière (personnage, décor débordant, effet) doit rester composée, sinon elle disparaîtrait avant d'être sortie de l'écran.


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