载入中...
搜索中...
未找到
PrimitiveDrawList.cpp
浏览该文件的文档.
22eve::Result<PrimitiveRecordStatus> primitiveBudgetFailure(std::size_t hardLimit, std::size_t current) {
25 {{"hardLimit", std::to_string(hardLimit)}, {"current", std::to_string(current)}}, "graphics.primitive"));
34 if (closed) lengths.back() = lengths[points.size() - 1] + glm::length(points.front() - points.back());
70 const glm::vec3 helper = std::fabs(direction.y) < 0.9f ? glm::vec3(0.f, 1.f, 0.f) : glm::vec3(1.f, 0.f, 0.f);
98std::vector<glm::vec3> circlePoints(glm::vec3 center, glm::vec3 u, glm::vec3 v, float radius, std::uint32_t segments,
104 for (const glm::vec2 unit : *circle.points) points.push_back(center + radius * (unit.x * u + unit.y * v));
123 return (ab >= -1e-6f && bc >= -1e-6f && ca >= -1e-6f) || (ab <= 1e-6f && bc <= 1e-6f && ca <= 1e-6f);
131 if ((a.y > point.y) != (b.y > point.y) && point.x < (b.x - a.x) * (point.y - a.y) / (b.y - a.y) + a.x)
152bool bridgeIsVisible(glm::vec2 holePoint, glm::vec2 outerPoint, std::span<const glm::vec2> outer,
155 if (properSegmentsIntersect(holePoint, outerPoint, outer[i], outer[(i + 1u) % outer.size()])) return false;
157 if (properSegmentsIntersect(holePoint, outerPoint, hole[i], hole[(i + 1u) % hole.size()])) return false;
167 if (hole[i].x > hole[holeIndex].x || (hole[i].x == hole[holeIndex].x && hole[i].y < hole[holeIndex].y))
180 EV_PARAM_CHECK(outerIndex != outer.size(), "path fill could not connect a hole to its outer contour");
191std::vector<std::array<std::size_t, 3>> triangulateSimplePolygon(std::span<const glm::vec2> polygon) {
211 if (glm::length(polygon[candidate] - a) <= 1e-6f || glm::length(polygon[candidate] - b) <= 1e-6f ||
233PrimitiveCanvas2D::PrimitiveCanvas2D(std::size_t hardCommandLimit) : hardCommandLimit_(hardCommandLimit) {
262void PrimitiveCanvas2D::drawPolyline(std::span<const glm::vec2> points, bool closed, const PrimitivePaint& paint) {
267eve::Result<PrimitiveRecordStatus> PrimitiveCanvas2D::tryDrawPolyline(std::span<const glm::vec2> points, bool closed,
282void PrimitiveCanvas2D::drawPath(const Path2D& path, const PrimitivePaint& paint, float tolerance) {
297 if (other == contourIndex || !contours[other].closed || contours[other].points.size() < 3) continue;
341void PrimitiveCanvas2D::drawTriangle(glm::vec2 a, glm::vec2 b, glm::vec2 c, const PrimitivePaint& paint) {
351void PrimitiveCanvas2D::drawColoredTriangle(glm::vec2 a, glm::vec2 b, glm::vec2 c, Color colorA, Color colorB,
358 triangles_.push_back({points, transform_, paint, std::array<Color, 3>{colorA, colorB, colorC}});
362void PrimitiveCanvas2D::drawCoverageFringe(std::span<const glm::vec2> outline, const PrimitivePaint& paint) {
375 const glm::vec2 previousOutward = glm::vec2(previousDirection.y, -previousDirection.x) * orientation;
403void PrimitiveCanvas2D::drawRect(glm::vec2 minimum, glm::vec2 maximum, const PrimitivePaint& paint) {
418 const bool valid = minimum.x <= maximum.x && minimum.y <= maximum.y && std::isfinite(radii.x) &&
453 std::max(glm::length(transformPoint2D(transform_, center + glm::vec2(radius, 0.f)) - transformedCenter),
458void PrimitiveCanvas2D::drawEllipse(glm::vec2 center, glm::vec2 radii, const PrimitivePaint& paint,
477void PrimitiveCanvas2D::drawArc(glm::vec2 center, glm::vec2 radii, float startRadians, float sweepRadians,
479 const bool validArc = std::isfinite(startRadians) && std::isfinite(sweepRadians) && std::isfinite(radii.x) &&
511PrimitiveSceneCanvas3D::PrimitiveSceneCanvas3D(SceneDrawContext context, std::size_t hardCommandLimit)
527void PrimitiveSceneCanvas3D::drawLine(glm::vec3 a, glm::vec3 b, const ScenePrimitivePaint& paint) {
547eve::Result<PrimitiveRecordStatus> PrimitiveSceneCanvas3D::tryDrawPolyline(std::span<const glm::vec3> points,
573void PrimitiveSceneCanvas3D::drawTriangle(glm::vec3 a, glm::vec3 b, glm::vec3 c, const ScenePrimitivePaint& paint) {
581void PrimitiveSceneCanvas3D::recordTriangle(glm::vec3 a, glm::vec3 b, glm::vec3 c, const ScenePrimitivePaint& paint) {
612void PrimitiveSceneCanvas3D::drawArc(glm::vec3 center, glm::vec3 normal, glm::vec3 zeroDirection, float radius,
621 EV_PARAM_CHECK(glm::length(u) > 1e-6f, "primitive arc zero direction must not be parallel to normal");
627 const float angle = startRadians + sweepRadians * static_cast<float>(i) / static_cast<float>(segments);
635void PrimitiveSceneCanvas3D::drawAabb(glm::vec3 minimum, glm::vec3 maximum, const ScenePrimitivePaint& paint) {
636 const bool ordered = minimum.x <= maximum.x && minimum.y <= maximum.y && minimum.z <= maximum.z;
638 const std::array corners{glm::vec3{minimum.x, minimum.y, minimum.z}, glm::vec3{maximum.x, minimum.y, minimum.z},
665 for (const glm::vec3 axis : halfAxes) EV_PARAM_CHECK(glm::length(axis) > 1e-6f, "OBB half axes must be non-zero");
673void PrimitiveSceneCanvas3D::drawGrid(glm::vec3 origin, glm::vec3 axisU, glm::vec3 axisV, std::uint32_t cellsU,
691void PrimitiveSceneCanvas3D::drawSphere(glm::vec3 center, float radius, const ScenePrimitivePaint& paint,
704 return center + radius * glm::vec3(std::cos(latitude) * std::cos(longitude), std::sin(latitude),
717 drawPolyline(circlePoints(center, {1.f, 0.f, 0.f}, {0.f, 1.f, 0.f}, radius, segments, statistics_), true,
719 drawPolyline(circlePoints(center, {1.f, 0.f, 0.f}, {0.f, 0.f, 1.f}, radius, segments, statistics_), true,
721 drawPolyline(circlePoints(center, {0.f, 1.f, 0.f}, {0.f, 0.f, 1.f}, radius, segments, statistics_), true,
726void PrimitiveSceneCanvas3D::drawSphere(glm::vec3 center, float radius, const ScenePrimitivePaint& paint,
743void PrimitiveSceneCanvas3D::drawCapsule(glm::vec3 a, glm::vec3 b, float radius, const ScenePrimitivePaint& paint,
752void PrimitiveSceneCanvas3D::drawCylinder(glm::vec3 a, glm::vec3 b, float radius, const ScenePrimitivePaint& paint,
776void PrimitiveSceneCanvas3D::drawCone(glm::vec3 apex, glm::vec3 axis, float height, float radius,
800void PrimitiveSceneCanvas3D::drawArrow(glm::vec3 from, glm::vec3 to, float headLength, float headRadius,
815void PrimitiveSceneCanvas3D::drawFrustum(const std::array<glm::vec3, 8>& corners, const ScenePrimitivePaint& paint) {
817 {{{0, 1, 3, 2}}, {{4, 6, 7, 5}}, {{0, 4, 5, 1}}, {{2, 3, 7, 6}}, {{0, 2, 6, 4}}, {{1, 5, 7, 3}}}};
EVEngine assertion entry point, backed by zeroerr.
#define EV_PARAM_CHECK(cond,...)
Validate a function parameter / public API precondition.
Definition Assert.h:30
static Diagnostic error(DiagnosticCode code, std::string message, std::string path={}, DiagnosticDetails details={}, std::string source={})
Construct an error diagnostic with the standard error severity.
Definition Diagnostic.h:125
static Result failure(Status status)
Construct a failed result from a structured status.
Definition Result.h:175
void drawCircle(glm::vec2 center, float radius, const PrimitivePaint &paint, std::uint32_t segments=48)
Draws a circle using the requested segment quality.
Definition PrimitiveDrawList.cpp:443
void drawLine(glm::vec2 a, glm::vec2 b, const PrimitivePaint &paint)
Records a two-point line. Input data is copied.
Definition PrimitiveDrawList.cpp:247
void drawEllipse(glm::vec2 center, glm::vec2 radii, const PrimitivePaint &paint, std::uint32_t segments=48)
Draws an axis-aligned ellipse using the requested segment quality.
Definition PrimitiveDrawList.cpp:458
void drawPolyline(std::span< const glm::vec2 > points, bool closed, const PrimitivePaint &paint)
Records an owning polyline snapshot.
Definition PrimitiveDrawList.cpp:262
void drawArc(glm::vec2 center, glm::vec2 radii, float startRadians, float sweepRadians, const PrimitivePaint &paint, std::uint32_t segments=32)
Draws an arc or filled sector. Angles are radians.
Definition PrimitiveDrawList.cpp:477
void drawRect(glm::vec2 minimum, glm::vec2 maximum, const PrimitivePaint &paint)
Draws an axis-aligned rectangle with fill/stroke paint semantics.
Definition PrimitiveDrawList.cpp:403
void drawRoundedRect(glm::vec2 minimum, glm::vec2 maximum, glm::vec2 radii, const PrimitivePaint &paint, std::uint32_t cornerSegments=8)
Draws a rounded axis-aligned rectangle with per-axis corner radii.
Definition PrimitiveDrawList.cpp:415
void concat(const glm::mat3 &transform)
Post-concatenates a local transform.
Definition PrimitiveDrawList.cpp:245
void reset()
Clears commands and state while retaining allocated capacity.
Definition PrimitiveDrawList.cpp:503
void drawPath(const Path2D &path, const PrimitivePaint &paint, float tolerance=0.25f)
Flattens and records every non-empty contour in path.
Definition PrimitiveDrawList.cpp:282
PrimitiveCanvas2D(std::size_t hardCommandLimit=65536)
Primitive canvas 2 d.
Definition PrimitiveDrawList.cpp:233
void drawPoint(glm::vec2 point, const PrimitivePaint &paint)
Draws a point using stroke width and cap semantics.
Definition PrimitiveDrawList.cpp:252
eve::Result< PrimitiveRecordStatus > tryDrawPolyline(std::span< const glm::vec2 > points, bool closed, const PrimitivePaint &paint)
Atomically records an owning polyline or returns a structured budget failure.
Definition PrimitiveDrawList.cpp:267
void drawArrow(glm::vec3 from, glm::vec3 to, float headLength, float headRadius, const ScenePrimitivePaint &paint)
Records a shaft and four-sided arrow head.
Definition PrimitiveDrawList.cpp:800
void drawRay(glm::vec3 origin, glm::vec3 direction, float length, const ScenePrimitivePaint &paint)
Draws ray.
Definition PrimitiveDrawList.cpp:563
void drawSphere(glm::vec3 center, float radius, const ScenePrimitivePaint &paint, std::uint32_t segments=32)
Records three orthogonal great circles.
Definition PrimitiveDrawList.cpp:691
void drawCapsule(glm::vec3 a, glm::vec3 b, float radius, const ScenePrimitivePaint &paint, std::uint32_t segments=32)
Draws capsule.
Definition PrimitiveDrawList.cpp:743
void drawLine(glm::vec3 a, glm::vec3 b, const ScenePrimitivePaint &paint)
Draws line.
Definition PrimitiveDrawList.cpp:527
void drawFrustum(const std::array< glm::vec3, 8 > &corners, const ScenePrimitivePaint &paint)
Draws frustum.
Definition PrimitiveDrawList.cpp:815
PrimitiveSceneCanvas3D(SceneDrawContext context, std::size_t hardCommandLimit=65536)
Primitive scene canvas 3 d.
Definition PrimitiveDrawList.cpp:511
void drawObb(glm::vec3 center, const std::array< glm::vec3, 3 > &halfAxes, const ScenePrimitivePaint &paint)
Draws obb.
Definition PrimitiveDrawList.cpp:663
void drawGrid(glm::vec3 origin, glm::vec3 axisU, glm::vec3 axisV, std::uint32_t cellsU, std::uint32_t cellsV, const ScenePrimitivePaint &paint)
Records a planar grid spanned by two caller-provided axes.
Definition PrimitiveDrawList.cpp:673
void drawAabb(glm::vec3 minimum, glm::vec3 maximum, const ScenePrimitivePaint &paint)
Records the twelve edges of an axis-aligned box.
Definition PrimitiveDrawList.cpp:635
void drawPolyline(std::span< const glm::vec3 > points, bool closed, const ScenePrimitivePaint &paint)
Draws polyline.
Definition PrimitiveDrawList.cpp:541
void drawArc(glm::vec3 center, glm::vec3 normal, glm::vec3 zeroDirection, float radius, float startRadians, float sweepRadians, const ScenePrimitivePaint &paint, std::uint32_t segments=32)
Draws arc.
Definition PrimitiveDrawList.cpp:612
void drawCylinder(glm::vec3 a, glm::vec3 b, float radius, const ScenePrimitivePaint &paint, std::uint32_t segments=32)
Records endpoint circles and four side lines of a cylinder.
Definition PrimitiveDrawList.cpp:752
void drawPoint(glm::vec3 point, const ScenePrimitivePaint &paint)
Draws point.
Definition PrimitiveDrawList.cpp:532
void drawDisk(glm::vec3 center, glm::vec3 normal, float radius, const ScenePrimitivePaint &paint, std::uint32_t segments=32)
Draws disk.
Definition PrimitiveDrawList.cpp:600
void drawTriangle(glm::vec3 a, glm::vec3 b, glm::vec3 c, const ScenePrimitivePaint &paint)
Draws triangle.
Definition PrimitiveDrawList.cpp:573
void drawQuad(glm::vec3 a, glm::vec3 b, glm::vec3 c, glm::vec3 d, const ScenePrimitivePaint &paint)
Draws quad.
Definition PrimitiveDrawList.cpp:588
void drawCone(glm::vec3 apex, glm::vec3 axis, float height, float radius, const ScenePrimitivePaint &paint, std::uint32_t segments=32)
Records the base circle and four side lines of a cone.
Definition PrimitiveDrawList.cpp:776
eve::Result< PrimitiveRecordStatus > tryDrawPolyline(std::span< const glm::vec3 > points, bool closed, const ScenePrimitivePaint &paint)
Atomically records an owning 3D polyline or returns a structured budget failure.
Definition PrimitiveDrawList.cpp:547
卡牌游戏 UI 工具模块:工厂 + 脚本绑定入口。 功能参考 ycarowr/UiCard:扇形手牌布局、抽牌/洗牌、悬浮放大、拖拽到落牌区、 敌方手牌(背面/偷看)、费用不足置灰,以及可实时调节的布局...
Definition Animation.h:25
@ Square
@ Stroke
eve::Color Color
RGBA color used by every graphics draw call. Lives inside eve::graphics so including a graphics heade...
Definition Color.h:13
@ EvenOdd
@ WorldUnits
std::uint32_t resolveRadialSegments(const RadialTessellation &tessellation, float projectedRadiusPixels)
Resolves a radial tessellation policy to a validated segment count.
Definition PrimitiveTypes.cpp:13
constexpr HexDirection next(HexDirection d) noexcept
The next direction clockwise (NW wraps to NE).
Definition HexMetrics.h:76
bool pointInPolygon(const Vec2 &p, const Polygon &poly)
Point-in-polygon test (ray casting; boundary counts as inside).
Definition UrbanGeometry.cpp:112
double signedArea(const Polygon &poly)
Return the raw (possibly negative) signed area of a polygon ring.
Definition UrbanGeometry.cpp:34
float distanceSquared(float ax, float ay, float bx, float by)
Definition RTSSystemMovementInternal.h:23
@ Failed
Definition Container.h:602
std::size_t segmentCount
Definition PrimitiveTypes.h:113
std::size_t commandCount
Definition PrimitiveTypes.h:112
std::size_t droppedCommands
Definition PrimitiveTypes.h:118
std::size_t cacheHits
Definition PrimitiveTypes.h:117
Quality and screen-error policy used by circles and curved spatial primitives.
Definition PrimitiveTypes.h:37
Immutable camera and viewport facts used to resolve one 3D draw list. Projection uses the engine's RH...
Definition PrimitiveTypes.h:98
Additional scene-pass state carried by every 3D command.
Definition PrimitiveTypes.h:85