|
JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
|
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 |
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.
| 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.
| layer | Calque de dessin. |
| texture | Texture liée (identité opaque). |
| sortOrder | Tri fin à l'intérieur du calque et de la texture. |
| quad | Primitive à composer (unités monde). |
| 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.
| layer | Calque de dessin. |
| texture | Texture liée (identité opaque). |
| sortOrder | Tri fin à l'intérieur du calque et de la texture. |
| quad | Primitive à composer (unités monde). |
|
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.
| bytes | Poids de la texture liée, en octets. |
|
nodiscardnoexcept |
|
noexcept |
Vide la scène (capacité conservée) et remet les compteurs à zéro. Le cadrage est conservé.
|
noexcept |
Désactive le culling : toutes les primitives ajoutées sont conservées.
|
nodiscardnoexcept |
Rectangle réellement utilisé pour le culling : le cadrage élargi de la marge.
|
inlinenodiscardnoexcept |
|
nodiscardprivate |
|
inlinenodiscardnoexcept |
|
noexcept |
Restreint la composition aux primitives visibles dans un cadrage donné (EX-NFR-005).
| worldBounds | Rectangle 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). |
|
inlinenodiscardnoexcept |
| void hmi::ComposedScene::sort | ( | ) |
Ordonne la scène (calque, puis texture, puis sortOrder), de façon stable.
|
nodiscardnoexcept |
|
nodiscardprivate |
Rang de première apparition d'une texture, ajoutée à la table si elle est nouvelle.
|
private |
|
private |
|
private |
|
private |
|
private |
|
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.
|
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.