JustAnotherDnDGame 0.1.0
Jeu de rôle tactique au d20, vue de dessus, en C++/Qt
Loading...
Searching...
No Matches
ComposedScene.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 <cstddef>
7#include <cstdint>
8#include <optional>
9#include <string>
10#include <vector>
11
12#include "Core/Math/Rect.h"
14#include "HMI/Graphics/Quad.h"
18
24
25namespace core {
26class World;
27}
28
29namespace hmi {
30
32enum class QuadKind {
37};
38
64
73inline constexpr float DEPTH_SUBDIVISIONS_PER_UNIT = 16.0f;
74
87[[nodiscard]] std::int32_t depthSortOrder(float footWorldY) noexcept;
88
94 int considered = 0;
96 int culled = 0;
98 int submitted = 0;
100 int batches = 0;
108 std::size_t textureBytes = 0;
109};
110
135public:
142 static constexpr float CULLING_MARGIN_UNITS = 1.0f;
143
145 void clear() noexcept;
146
153 void setVisibleBounds(const core::Rect& worldBounds) noexcept;
154
156 void clearVisibleBounds() noexcept;
157
159 [[nodiscard]] bool isCullingEnabled() const noexcept {
160 return _visibleBounds.has_value();
161 }
162
168 [[nodiscard]] core::Rect cullingBounds() const noexcept;
169
178 bool addSprite(RenderLayer layer, TextureHandle texture, std::int32_t sortOrder,
179 const SpriteQuad& quad);
180
189 bool addLine(RenderLayer layer, TextureHandle texture, std::int32_t sortOrder,
190 const LineQuad& quad);
191
201 void addTextureBytes(std::size_t bytes) noexcept;
202
204 void sort();
205
207 [[nodiscard]] const std::vector<ComposedQuad>& quads() const noexcept {
208 return _quads;
209 }
210
212 [[nodiscard]] std::size_t size() const noexcept {
213 return _quads.size();
214 }
215
217 [[nodiscard]] int batchCount() const noexcept;
218
220 [[nodiscard]] SceneStatistics statistics() const noexcept;
221
222private:
224 [[nodiscard]] int textureRank(TextureHandle texture);
226 [[nodiscard]] bool isVisible(const core::Rect& bounds) const;
227
228 std::vector<ComposedQuad> _quads;
232 std::optional<core::Rect> _visibleBounds;
233 int _considered = 0;
234 int _culled = 0;
235 std::size_t _textureBytes = 0;
236};
237
243[[nodiscard]] std::string formatSceneStatistics(const SceneStatistics& statistics);
244
250[[nodiscard]] core::Rect spriteQuadBounds(const SpriteQuad& quad) noexcept;
251
261[[nodiscard]] core::Rect lineQuadBounds(const LineQuad& quad) noexcept;
262
292void composeWorldSprites(ComposedScene& scene, core::World& world, RenderMode mode,
293 const SceneTextures& textures, float interpolationAlpha,
294 const LayerVisibility& visibility = LayerVisibility{});
295
296} // namespace hmi
Jeu de visibilités par calque du mode d'inspection de l'éditeur (LOT-51, EX-EDIT-044).
Primitives de dessin 2D (quads texturés), indépendantes de Direct3D.
Rectangle aligné sur les axes en coordonnées monde, propre à Core.
Ordonnancement de calques unique et explicite du rendu (EX-REN-014).
Mode de rendu Physique/Texture et sa persistance (EX-REN-046).
Point de résolution unique de l'apparence d'une entité affichée (EX-REN-046).
Point d'entrée unique de la simulation : possède les entités, les composants et les systèmes.
Definition World.h:35
Liste ordonnée des primitives d'une image, indépendante de Direct3D.
Definition ComposedScene.h:134
core::Rect cullingBounds() const noexcept
Rectangle réellement utilisé pour le culling : le cadrage élargi de la marge.
Definition ComposedScene.cpp:51
bool addSprite(RenderLayer layer, TextureHandle texture, std::int32_t sortOrder, const SpriteQuad &quad)
Ajoute un rectangle texturé à la scène, s'il est visible.
Definition ComposedScene.cpp:77
int _considered
Definition ComposedScene.h:233
SceneStatistics statistics() const noexcept
Definition ComposedScene.cpp:166
void setVisibleBounds(const core::Rect &worldBounds) noexcept
Restreint la composition aux primitives visibles dans un cadrage donné (EX-NFR-005).
Definition ComposedScene.cpp:38
bool isCullingEnabled() const noexcept
Definition ComposedScene.h:159
void sort()
Ordonne la scène (calque, puis texture, puis sortOrder), de façon stable.
Definition ComposedScene.cpp:121
void clearVisibleBounds() noexcept
Désactive le culling : toutes les primitives ajoutées sont conservées.
Definition ComposedScene.cpp:46
int batchCount() const noexcept
Definition ComposedScene.cpp:153
bool addLine(RenderLayer layer, TextureHandle texture, std::int32_t sortOrder, const LineQuad &quad)
Ajoute un segment épais à la scène, s'il est visible.
Definition ComposedScene.cpp:97
int textureRank(TextureHandle texture)
Rang de première apparition d'une texture, ajoutée à la table si elle est nouvelle.
Definition ComposedScene.cpp:58
std::size_t _textureBytes
Definition ComposedScene.h:235
int _culled
Definition ComposedScene.h:234
std::vector< TextureHandle > _textureOrder
Definition ComposedScene.h:229
std::vector< ComposedQuad > _quads
Definition ComposedScene.h:228
void clear() noexcept
Vide la scène (capacité conservée) et remet les compteurs à zéro. Le cadrage est conservé.
Definition ComposedScene.cpp:22
std::size_t size() const noexcept
Definition ComposedScene.h:212
const std::vector< ComposedQuad > & quads() const noexcept
Definition ComposedScene.h:207
bool isVisible(const core::Rect &bounds) const
Definition ComposedScene.cpp:68
static constexpr float CULLING_MARGIN_UNITS
Marge de culling, en unités monde, ajoutée de chaque côté du cadrage visible.
Definition ComposedScene.h:142
std::optional< core::Rect > _visibleBounds
Cadrage marge comprise, calculé une fois par setVisibleBounds : c'est le rectangle comparé à chaque p...
Definition ComposedScene.h:232
void addTextureBytes(std::size_t bytes) noexcept
Déclare la mémoire de texture d'une primitive déjà ajoutée (EX-NFR-043).
Definition ComposedScene.cpp:32
Jeu de visibilités par calque, pour le mode d'inspection « définition des textures » (LOT-51).
Definition LayerVisibility.h:48
Espace de noms du moteur et de la logique de jeu.
Definition Bootstrap.h:9
Definition AudioEngine.cpp:15
constexpr float DEPTH_SUBDIVISIONS_PER_UNIT
Sous-divisions de profondeur par unité monde, pour la quantification du tri par Y.
Definition ComposedScene.h:73
std::int32_t depthSortOrder(float footWorldY) noexcept
Ordre de profondeur d'une primitive, à partir du pied de son quad.
Definition ComposedScene.cpp:116
void composeWorldSprites(ComposedScene &scene, core::World &world, RenderMode mode, const SceneTextures &textures, float interpolationAlpha, const LayerVisibility &visibility)
Compose les entités affichables d'un monde ECS en primitives.
Definition ComposedScene.cpp:292
void * TextureHandle
Identité opaque d'une texture liée, du point de vue de la composition.
Definition RenderLayer.h:107
RenderLayer
Calques de dessin, du plus arrière au plus avant (EX-REN-014, EX-DEC-002).
Definition RenderLayer.h:42
QuadKind
Nature d'une primitive composée : rectangle aligné aux axes, ou segment épais orienté.
Definition ComposedScene.h:32
@ Line
hmi::LineQuad : segment épais, orienté librement.
Definition ComposedScene.h:36
@ Sprite
hmi::SpriteQuad : rectangle aligné sur les axes.
Definition ComposedScene.h:34
std::string formatSceneStatistics(const SceneStatistics &statistics)
Résumé des compteurs d'une image, pour la journalisation de diagnostic (EX-NFR-005).
Definition ComposedScene.cpp:177
constexpr RenderLayer DEFAULT_RENDER_LAYER
Calque appliqué à une entité dépourvue de hmi::RenderLayerTag.
Definition RenderLayer.h:123
RenderMode
Mode de rendu de la scène : lecture directe des collisions, ou habillage.
Definition RenderMode.h:23
core::Rect lineQuadBounds(const LineQuad &quad) noexcept
Boîte englobante d'un segment épais, en unités monde.
Definition ComposedScene.cpp:206
core::Rect spriteQuadBounds(const SpriteQuad &quad) noexcept
Boîte englobante d'un rectangle texturé, en unités monde.
Definition ComposedScene.cpp:189
Rectangle aligné sur les axes (AABB) en unités monde.
Definition Rect.h:23
Une primitive prête à soumettre, avec tout ce qui détermine quand la dessiner.
Definition ComposedScene.h:48
QuadKind kind
Laquelle des deux primitives ci-dessous est valide.
Definition ComposedScene.h:58
SpriteQuad sprite
Primitive rectangle, valide si kind == QuadKind::Sprite.
Definition ComposedScene.h:60
LineQuad line
Primitive segment, valide si kind == QuadKind::Line.
Definition ComposedScene.h:62
int textureRank
Rang de première apparition de la texture dans la scène (critère de regroupement).
Definition ComposedScene.h:54
TextureHandle texture
Texture liée (identité opaque) ; nullptr = primitive non dessinable.
Definition ComposedScene.h:52
std::int32_t sortOrder
Tri fin à l'intérieur d'un calque et d'une texture (core::Sprite::layer).
Definition ComposedScene.h:56
RenderLayer layer
Calque de dessin (critère de tri prioritaire, EX-REN-014).
Definition ComposedScene.h:50
Un segment épais à dessiner : deux extrémités en unités monde, une épaisseur (perpendiculaire au segm...
Definition Quad.h:53
Compteurs d'une image composée, pour l'observabilité du volume soumis (EX-NFR-005).
Definition ComposedScene.h:92
int culled
Primitives écartées parce qu'invisibles (culling).
Definition ComposedScene.h:96
std::size_t textureBytes
Mémoire de texture des plans picturaux liés par cette image, en octets (EX-NFR-043,...
Definition ComposedScene.h:108
int submitted
Primitives conservées, donc soumises au GPU.
Definition ComposedScene.h:98
int considered
Primitives examinées par la composition (avant culling).
Definition ComposedScene.h:94
int batches
Passes begin/end nécessaires : nombre de groupes contigus de même texture.
Definition ComposedScene.h:100
Textures liables par la composition d'une scène, et de quoi choisir laquelle lier.
Definition TileAppearance.h:85
Un quad texturé à dessiner : rectangle en unités monde, région de texture (coordonnées normalisées) e...
Definition Quad.h:29