载入中...
搜索中...
未找到
PrimitiveScene.h
浏览该文件的文档.
1#pragma once
2
3#include "common/Result.h"
6
7#include <glm/glm.hpp>
8
9#include <array>
10#include <cstddef>
11#include <cstdint>
12#include <optional>
13#include <span>
14#include <variant>
15#include <vector>
16
17namespace eve::graphics {
18
19struct PrimitiveSceneTag;
22public:
26 using owner_type = std::uint64_t;
28
30 constexpr PrimitiveHandle() noexcept = default;
36 [[nodiscard]] constexpr bool isValid() const noexcept { return owner_ != 0 && local_.isValid(); }
38 [[nodiscard]] constexpr index_type index() const noexcept { return local_.index(); }
40 [[nodiscard]] constexpr generation_type generation() const noexcept { return local_.generation(); }
42 [[nodiscard]] constexpr owner_type owner() const noexcept { return owner_; }
44 [[nodiscard]] static constexpr std::optional<generation_type> nextGeneration(generation_type current) noexcept {
47 }
49 friend constexpr bool operator==(const PrimitiveHandle&, const PrimitiveHandle&) noexcept = default;
50
51private:
52 owner_type owner_ = 0;
53 LocalHandle local_{};
54};
55
58 std::vector<glm::vec3> points;
59 bool closed = false;
60};
63 glm::vec3 minimum{0.f};
64 glm::vec3 maximum{0.f};
65};
68 glm::vec3 center{0.f};
69 std::array<glm::vec3, 3> halfAxes{{{1.f, 0.f, 0.f}, {0.f, 1.f, 0.f}, {0.f, 0.f, 1.f}}};
70};
73 glm::vec3 center{0.f};
74 glm::vec3 normal{0.f, 1.f, 0.f};
75 float radius = 1.f;
76 std::uint32_t segments = 32;
77};
80 glm::vec3 center{0.f};
81 glm::vec3 normal{0.f, 1.f, 0.f};
82 glm::vec3 zeroDirection{1.f, 0.f, 0.f};
83 float radius = 1.f;
84 float startRadians = 0.f;
85 float sweepRadians = 1.f;
86 std::uint32_t segments = 32;
87};
90 glm::vec3 center{0.f};
91 float radius = 1.f;
92 std::uint32_t segments = 32;
93};
96 glm::vec3 a{0.f};
97 glm::vec3 b{0.f, 1.f, 0.f};
98 float radius = 1.f;
99 std::uint32_t segments = 32;
100};
103 glm::vec3 a{0.f};
104 glm::vec3 b{0.f, 1.f, 0.f};
105 float radius = 1.f;
106 std::uint32_t segments = 32;
107};
110 glm::vec3 apex{0.f};
111 glm::vec3 axis{0.f, 1.f, 0.f};
112 float height = 1.f;
113 float radius = 1.f;
114 std::uint32_t segments = 32;
115};
118 glm::vec3 origin{0.f};
119 glm::vec3 axisU{1.f, 0.f, 0.f};
120 glm::vec3 axisV{0.f, 0.f, 1.f};
121 std::uint32_t cellsU = 10;
122 std::uint32_t cellsV = 10;
123};
126 glm::vec3 from{0.f};
127 glm::vec3 to{0.f, 1.f, 0.f};
128 float headLength = 0.2f;
129 float headRadius = 0.1f;
130};
133 std::array<glm::vec3, 8> corners{};
134};
135
139
147
149enum class PrimitiveUpdateStatus : std::uint8_t { Updated, Unchanged };
151enum class PrimitiveRemoveStatus : std::uint8_t { Removed };
157
168public:
182 [[nodiscard]] eve::Result<std::size_t> updateMany(std::span<const PrimitiveBatchUpdate> updates);
192 [[nodiscard]] const PrimitiveDescriptor3D* tryGet(PrimitiveHandle handle) const noexcept;
194 [[nodiscard]] bool isStale(PrimitiveHandle handle) const noexcept;
196 void clear();
211 [[nodiscard]] eve::Result<void> tryRender(PrimitiveSceneCanvas3D& canvas) const;
218 void render(PrimitiveSceneCanvas3D& canvas) const;
220 [[nodiscard]] std::size_t size() const noexcept { return liveCount_; }
221
222private:
223 struct Slot {
224 std::optional<PrimitiveDescriptor3D> descriptor;
226 bool retired = false;
227 mutable std::optional<PrimitiveSceneCanvas3D> cache;
228 };
229
230 [[nodiscard]] bool matches(PrimitiveHandle handle) const noexcept;
231 std::vector<Slot> slots_;
232 std::vector<PrimitiveHandle::index_type> freeSlots_;
233 std::size_t liveCount_ = 0;
234 PrimitiveHandle::owner_type owner_ = 0;
235};
236
237} // namespace eve::graphics
std::string descriptor
#define EVENGINE_API_BACKENDS
Definition Export.h:108
bool retired
std::uint32_t generation
PrimitiveHandle handle
Move-only, checked operation results for the common layer.
Strong generation-qualified handles for non-ECS runtime registries.
double current
Move-only operation result carrying either a value or Status.
Definition Result.h:155
constexpr generation_type generation() const noexcept
Returns the owner-local replacement generation.
constexpr bool isValid() const noexcept
Returns whether both coordinates are usable handle values.
constexpr index_type index() const noexcept
Returns the owner-local slot index.
detail::HandleCoordinates::generation_type generation_type
Unsigned owner-local generation type.
constexpr std::optional< RuntimeHandle > nextGeneration() const noexcept
Returns this slot at its next generation.
static constexpr index_type invalidIndex
Reserved index value shared by all invalid handles.
detail::HandleCoordinates::index_type index_type
Unsigned owner-local slot index type.
Instance-qualified persistent primitive handle.
constexpr generation_type generation() const noexcept
Generation.
LocalHandle::generation_type generation_type
constexpr bool isValid() const noexcept
True when valid.
LocalHandle::index_type index_type
constexpr PrimitiveHandle() noexcept=default
Constructs a PrimitiveHandle.
constexpr owner_type owner() const noexcept
Owner.
static constexpr index_type invalidIndex
friend constexpr bool operator==(const PrimitiveHandle &, const PrimitiveHandle &) noexcept=default
Operator ==.
constexpr index_type index() const noexcept
Index.
static constexpr std::optional< generation_type > nextGeneration(generation_type current) noexcept
Next generation.
Frame-local scene recorder for 3D line primitives.
Authoritative owner for primitives that persist across frames.
std::size_t size() const noexcept
Returns the size of .
PrimitiveScene & operator=(PrimitiveScene &&)=delete
PrimitiveScene(PrimitiveScene &&)=delete
PrimitiveScene(const PrimitiveScene &)=delete
PrimitiveScene & operator=(const PrimitiveScene &)=delete
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...
Definition Animation.h:25
std::variant< PrimitivePolyline3D, PrimitiveAabb3D, PrimitiveObb3D, PrimitiveDisk3D, PrimitiveArc3D, PrimitiveSphere3D, PrimitiveCapsule3D, PrimitiveCylinder3D, PrimitiveCone3D, PrimitiveGrid3D, PrimitiveArrow3D, PrimitiveFrustum3D > PrimitiveGeometry3D
PrimitiveRemoveStatus
PrimitiveRemoveStatus public API.
PrimitiveUpdateStatus
PrimitiveUpdateStatus public API.
PrimitiveAabb3D public API.
PrimitiveArc3D public API.
PrimitiveArrow3D public API.
PrimitiveBatchUpdate public API.
PrimitiveCapsule3D public API.
PrimitiveCone3D public API.
PrimitiveCylinder3D public API.
One persistent scene primitive owned by PrimitiveScene.
PrimitiveDisk3D public API.
PrimitiveFrustum3D public API.
std::array< glm::vec3, 8 > corners
PrimitiveGrid3D public API.
PrimitiveObb3D public API.
std::array< glm::vec3, 3 > halfAxes
Owning persistent polyline descriptor.
std::vector< glm::vec3 > points
PrimitiveSphere3D public API.
Additional scene-pass state carried by every 3D command.