载入中...
搜索中...
未找到
PrimitiveDrawList.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
5#include "common/Result.h"
8
9#include <glm/glm.hpp>
10
11#include <array>
12#include <cstddef>
13#include <span>
14#include <vector>
15
16namespace eve::graphics {
17
20 std::vector<glm::vec2> points;
21 std::vector<float> cumulativeLengths;
22 glm::mat3 transform{1.f};
24 bool closed = false;
25};
26
29 std::array<glm::vec2, 3> points;
30 glm::mat3 transform{1.f};
32 std::optional<std::array<Color, 3>> vertexColors;
33};
34
37 std::vector<glm::vec3> points;
38 std::vector<float> cumulativeWorldLengths;
39 glm::mat4 transform{1.f};
41 bool closed = false;
42};
43
46 std::array<glm::vec3, 3> points;
47 glm::mat4 transform{1.f};
49};
50
53public:
55 explicit PrimitiveCanvas2D(std::size_t hardCommandLimit = 65536);
56
58 void save();
60 void restore();
62 void concat(const glm::mat3& transform);
64 void drawLine(glm::vec2 a, glm::vec2 b, const PrimitivePaint& paint);
66 void drawPoint(glm::vec2 point, const PrimitivePaint& paint);
68 void drawPolyline(std::span<const glm::vec2> points, bool closed, const PrimitivePaint& paint);
70 [[nodiscard]] eve::Result<PrimitiveRecordStatus> tryDrawPolyline(std::span<const glm::vec2> points, bool closed,
71 const PrimitivePaint& paint);
73 void drawPath(const Path2D& path, const PrimitivePaint& paint, float tolerance = 0.25f);
75 void drawRect(glm::vec2 minimum, glm::vec2 maximum, const PrimitivePaint& paint);
77 void drawRoundedRect(glm::vec2 minimum, glm::vec2 maximum, glm::vec2 radii, const PrimitivePaint& paint,
78 std::uint32_t cornerSegments = 8);
80 void drawCircle(glm::vec2 center, float radius, const PrimitivePaint& paint, std::uint32_t segments = 48);
82 void drawCircle(glm::vec2 center, float radius, const PrimitivePaint& paint,
83 const RadialTessellation& tessellation);
85 void drawEllipse(glm::vec2 center, glm::vec2 radii, const PrimitivePaint& paint, std::uint32_t segments = 48);
87 void drawArc(glm::vec2 center, glm::vec2 radii, float startRadians, float sweepRadians, const PrimitivePaint& paint,
88 std::uint32_t segments = 32);
90 void reset();
91
93 [[nodiscard]] const std::vector<PolylineCommand2D>& commands() const noexcept { return commands_; }
95 [[nodiscard]] const std::vector<TriangleCommand2D>& triangles() const noexcept { return triangles_; }
97 [[nodiscard]] const PrimitiveDrawStatistics& statistics() const noexcept { return statistics_; }
98
99private:
100 std::size_t hardCommandLimit_;
101 glm::mat3 transform_{1.f};
102 std::vector<glm::mat3> stack_;
103 std::vector<PolylineCommand2D> commands_;
104 std::vector<TriangleCommand2D> triangles_;
105 PrimitiveDrawStatistics statistics_;
106
107 void drawTriangle(glm::vec2 a, glm::vec2 b, glm::vec2 c, const PrimitivePaint& paint);
108 void drawColoredTriangle(glm::vec2 a, glm::vec2 b, glm::vec2 c, Color colorA, Color colorB, Color colorC,
109 const PrimitivePaint& paint);
110 void drawCoverageFringe(std::span<const glm::vec2> outline, const PrimitivePaint& paint);
111};
112
115public:
117 explicit PrimitiveSceneCanvas3D(SceneDrawContext context, std::size_t hardCommandLimit = 65536);
118
120 void save();
122 void restore();
124 void concat(const glm::mat4& transform);
126 void drawLine(glm::vec3 a, glm::vec3 b, const ScenePrimitivePaint& paint);
128 void drawPoint(glm::vec3 point, const ScenePrimitivePaint& paint);
130 void drawPolyline(std::span<const glm::vec3> points, bool closed, const ScenePrimitivePaint& paint);
132 [[nodiscard]] eve::Result<PrimitiveRecordStatus> tryDrawPolyline(std::span<const glm::vec3> points, bool closed,
133 const ScenePrimitivePaint& paint);
135 void drawRay(glm::vec3 origin, glm::vec3 direction, float length, const ScenePrimitivePaint& paint);
137 void drawTriangle(glm::vec3 a, glm::vec3 b, glm::vec3 c, const ScenePrimitivePaint& paint);
139 void drawQuad(glm::vec3 a, glm::vec3 b, glm::vec3 c, glm::vec3 d, const ScenePrimitivePaint& paint);
141 void drawDisk(glm::vec3 center, glm::vec3 normal, float radius, const ScenePrimitivePaint& paint,
142 std::uint32_t segments = 32);
144 void drawArc(glm::vec3 center, glm::vec3 normal, glm::vec3 zeroDirection, float radius, float startRadians,
145 float sweepRadians, const ScenePrimitivePaint& paint, std::uint32_t segments = 32);
147 void drawAabb(glm::vec3 minimum, glm::vec3 maximum, const ScenePrimitivePaint& paint);
149 void drawObb(glm::vec3 center, const std::array<glm::vec3, 3>& halfAxes, const ScenePrimitivePaint& paint);
151 void drawGrid(glm::vec3 origin, glm::vec3 axisU, glm::vec3 axisV, std::uint32_t cellsU, std::uint32_t cellsV,
152 const ScenePrimitivePaint& paint);
154 void drawSphere(glm::vec3 center, float radius, const ScenePrimitivePaint& paint, std::uint32_t segments = 32);
156 void drawSphere(glm::vec3 center, float radius, const ScenePrimitivePaint& paint,
157 const RadialTessellation& tessellation);
159 void drawCapsule(glm::vec3 a, glm::vec3 b, float radius, const ScenePrimitivePaint& paint,
160 std::uint32_t segments = 32);
162 void drawCylinder(glm::vec3 a, glm::vec3 b, float radius, const ScenePrimitivePaint& paint,
163 std::uint32_t segments = 32);
165 void drawCone(glm::vec3 apex, glm::vec3 axis, float height, float radius, const ScenePrimitivePaint& paint,
166 std::uint32_t segments = 32);
168 void drawArrow(glm::vec3 from, glm::vec3 to, float headLength, float headRadius, const ScenePrimitivePaint& paint);
170 void drawFrustum(const std::array<glm::vec3, 8>& corners, const ScenePrimitivePaint& paint);
172 void reset();
173
175 [[nodiscard]] const SceneDrawContext& context() const noexcept { return context_; }
177 [[nodiscard]] const std::vector<PolylineCommand3D>& commands() const noexcept { return commands_; }
179 [[nodiscard]] const std::vector<TriangleCommand3D>& triangles() const noexcept { return triangles_; }
181 [[nodiscard]] const PrimitiveDrawStatistics& statistics() const noexcept { return statistics_; }
182
183private:
184 friend class PrimitiveScene;
185 SceneDrawContext context_;
186 std::size_t hardCommandLimit_;
187 glm::mat4 transform_{1.f};
188 std::vector<glm::mat4> stack_;
189 std::vector<PolylineCommand3D> commands_;
190 std::vector<TriangleCommand3D> triangles_;
191 PrimitiveDrawStatistics statistics_;
192
193 void recordTriangle(glm::vec3 a, glm::vec3 b, glm::vec3 c, const ScenePrimitivePaint& paint);
194};
195
196} // namespace eve::graphics
std::string from
float length
Definition CaveMesh.cpp:94
Vec3 radii
Definition CaveMesh.cpp:56
#define EVENGINE_API_BACKENDS
Definition Export.h:108
float maximum[3]
float minimum[3]
std::int32_t c
HexCoordinates to
Cell the unit walks towards on this segment.
Definition HexUnits.cpp:64
std::uint32_t height
MeleePoint3 b
Definition MeleeHit.cpp:41
MeleePoint3 a
Definition MeleeHit.cpp:40
Texture * normal
float radius
std::string path
Definition PlayHost.cpp:110
std::shared_ptr< const std::vector< glm::vec2 > > points
float d
Move-only, checked operation results for the common layer.
V3 origin
Definition RoadBake.cpp:138
RoadLaneDirection direction
const VegetationPresetContext & context
glm::vec3 point
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Owning backend-neutral 2D vector path.
Frame-local Skia-style recorder for 2D line primitives.
const std::vector< TriangleCommand2D > & triangles() const noexcept
Triangles.
const std::vector< PolylineCommand2D > & commands() const noexcept
Commands.
const PrimitiveDrawStatistics & statistics() const noexcept
Statistics.
Frame-local scene recorder for 3D line primitives.
const std::vector< TriangleCommand3D > & triangles() const noexcept
Triangles.
const std::vector< PolylineCommand3D > & commands() const noexcept
Commands.
const SceneDrawContext & context() const noexcept
Context.
const PrimitiveDrawStatistics & statistics() const noexcept
Statistics.
Authoritative owner for primitives that persist across frames.
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...
Definition Animation.h:25
glm::vec4 Color
Render-neutral RGBA color shared by graphics-facing modules.
Definition RenderTypes.h:8
One owning 2D polyline command recorded for the current frame.
std::vector< glm::vec2 > points
std::vector< float > cumulativeLengths
One owning 3D polyline command recorded for the current frame.
std::vector< glm::vec3 > points
std::vector< float > cumulativeWorldLengths
Per-frame observable primitive workload.
Backend-neutral fill and stroke paint.
Quality and screen-error policy used by circles and curved spatial primitives.
Immutable camera and viewport facts used to resolve one 3D draw list. Projection uses the engine's RH...
Additional scene-pass state carried by every 3D command.
One owning filled 2D triangle command.
std::array< glm::vec2, 3 > points
std::optional< std::array< Color, 3 > > vertexColors
One owning filled 3D triangle command.
std::array< glm::vec3, 3 > points