2#ifndef LIBSBX_SPRITES_SPRITES_MODULE_HPP_
3#define LIBSBX_SPRITES_SPRITES_MODULE_HPP_
10#include <magic_enum/magic_enum.hpp>
12#include <libsbx/utility/enum.hpp>
13#include <libsbx/utility/overload.hpp>
15#include <libsbx/core/engine.hpp>
17#include <libsbx/math/vector2.hpp>
18#include <libsbx/math/vector3.hpp>
19#include <libsbx/math/matrix4x4.hpp>
21#include <libsbx/graphics/images/image.hpp>
22#include <libsbx/graphics/images/separate_image2d_array.hpp>
24#include <libsbx/scenes/scenes_module.hpp>
26namespace sbx::sprites {
28enum class sprite_space : std::uint32_t {
37 math::color emissive_factor{0.0f, 0.0f, 0.0f, 1.0f};
38 float emissive_strength{0.0f};
43 std::int32_t sort_order{0};
49 math::color emissive_factor{0.0f, 0.0f, 0.0f, 1.0f};
50 float emissive_strength{0.0f};
56 std::int32_t sort_order{0};
62 math::color emissive_factor{0.0f, 0.0f, 0.0f, 1.0f};
63 float emissive_strength{0.0f};
67 bool is_billboard{
false};
70using sprite = std::variant<screen_overlay_sprite, screen_camera_sprite, world_sprite>;
72[[nodiscard]]
inline auto get_sprite_space(
const sprite& sprite) -> sprite_space {
73 return static_cast<sprite_space
>(sprite.index());
80 inline static constexpr auto flag_is_billboard = 0x00000001u;
81 inline static constexpr auto flag_msdf_text = 0x00000002u;
91 std::float_t emissive_strength;
92 std::uint32_t albedo_image_index;
93 std::uint32_t emissive_image_index;
94 std::int32_t sort_order;
96 std::float_t sdf_px_range;
97 std::uint32_t padding0;
98 std::uint32_t padding1;
103 auto clear() -> void;
109 [[nodiscard]]
auto instances() const -> const std::vector<
sprite_instance>&;
111 [[nodiscard]] auto size() const -> std::
size_t;
113 [[nodiscard]] auto is_empty() const ->
bool;
117 [[nodiscard]] auto byte_size() const -> std::
size_t;
127 inline static constexpr auto mode_count = magic_enum::enum_count<sprite_space>();
129 inline static const auto is_registered = register_module(stage::normal, dependencies<scenes::scenes_module>{});
137 auto update() ->
void override;
143 [[nodiscard]]
auto register_image(
const std::string& attachment) -> std::uint32_t;
145 [[nodiscard]]
auto batch(sprite_space space) ->
sprite_batch&;
147 [[nodiscard]]
auto batch(sprite_space space)
const ->
const sprite_batch&;
155 auto _collect_sprites() -> void;
157 std::array<sprite_batch, mode_count> _batches;
Definition: resource_storage.hpp:18
Definition: separate_image2d_array.hpp:16
Definition: matrix4x4.hpp:26
A vector in two-dimensional space.
Definition: vector2.hpp:28
RGBA color value type.
Definition: color.hpp:48
Definition: sprites_module.hpp:76
Definition: sprites_module.hpp:125
Definition: sprites_module.hpp:46
Definition: sprites_module.hpp:34
Definition: sprites_module.hpp:83
Definition: sprites_module.hpp:59