载入中...
搜索中...
未找到
PointGraph.h
浏览该文件的文档.
1#pragma once
2#include "common/Export.h"
3
4
6#include "procgen/PointSet.h"
8
9#include <cstdint>
10#include <memory>
11#include <optional>
12#include <string>
13#include <string_view>
14#include <unordered_map>
15#include <vector>
16
17namespace eve::procgen {
18
19class BiomeRules;
20class PointCompute;
21class ShapeGrammar;
22
25 std::string id;
26 int outputCount = 0;
27 float milliseconds = 0.f;
28 bool cacheHit = false;
29 std::string backend = "cpu";
30 float minX = 0.f;
31 float minY = 0.f;
32 float minZ = 0.f;
33 float maxX = 0.f;
34 float maxY = 0.f;
35 float maxZ = 0.f;
36 float averageDensity = 0.f;
37};
38
50 std::string name;
51 std::string type;
52 std::string domain;
53};
54
57 std::string nodeId;
58 int pointCount = 0;
59 std::vector<PointGraphColumnInfo> columns;
61 std::vector<float> sampleFloats;
62 int sampleCount = 0;
63};
64
67public:
69 PointGraph();
71 bool addNode(const std::string& id, const std::string& operation);
73 bool removeNode(const std::string& id);
75 bool hasNode(const std::string& id) const;
77 int getNodeCount() const;
79 std::string getNodeId(int index) const;
81 std::string getNodeOperation(const std::string& id) const;
82
84 bool connect(const std::string& fromId, const std::string& toId, int inputIndex = 0);
86 bool disconnect(const std::string& toId, int inputIndex = 0);
88 std::string getInputNode(const std::string& nodeId, int inputIndex) const;
89
91 bool setNodePoints(const std::string& id, PointSet* points);
93 bool setNodeSpatial(const std::string& id, SpatialData* spatial);
94
99 [[nodiscard]] Result<void> setBindingSpatial(const std::string& name, SpatialData* spatial);
104 [[nodiscard]] Result<void> setBindingPoints(const std::string& name, PointSet* points);
106 [[nodiscard]] Result<void> clearBinding(const std::string& name);
108 void clearBindings();
110 int getBindingCount() const;
112 std::string getBindingName(int index) const;
114 std::string getBindingType(const std::string& name) const;
115
121 [[nodiscard]] Result<PointGraphInspectReport> inspectNode(const std::string& id, int sampleLimit = 0) const;
122
124 bool setNodeBiomeRules(const std::string& id, BiomeRules* rules);
126 bool setNodeShapeGrammar(const std::string& id, ShapeGrammar* grammar);
128 bool setNodeFloat(const std::string& id, const std::string& key, float value);
130 bool setNodeInt(const std::string& id, const std::string& key, int value);
132 bool setNodeString(const std::string& id, const std::string& key, const std::string& value);
134 bool exposeParameter(const std::string& name, const std::string& nodeId,
135 const std::string& key);
137 int getParameterCount() const;
139 std::string getParameterName(int index) const;
141 std::string getParameterKind(const std::string& name) const;
143 bool hasParameterOverride(const std::string& name) const;
145 bool setParameterFloat(const std::string& name, float value);
147 bool setParameterInt(const std::string& name, int value);
149 bool setParameterString(const std::string& name, const std::string& value);
151 float getParameterFloat(const std::string& name, float fallback) const;
153 int getParameterInt(const std::string& name, int fallback) const;
155 std::string getParameterString(const std::string& name, const std::string& fallback) const;
157 bool clearParameterOverride(const std::string& name);
163 bool setNodeSubgraph(const std::string& id, PointGraph* graph, const std::string& inputNode,
164 const std::string& outputNode);
165
173 [[nodiscard]] Result<PointSet> executeResult(std::string_view outputId);
179 [[nodiscard]] Result<void> validateResult() const;
181 PointSet* execute(const std::string& outputId);
183 void setExecutionNodeBudget(int nodes);
185 int getExecutionNodeBudget() const;
187 void setMaxNodeOutputPoints(int points);
189 int getMaxNodeOutputPoints() const;
191 bool setComputePolicy(const std::string& policy);
193 std::string getComputePolicy() const;
195 void setComputeMinimumPoints(int points);
197 int getComputeMinimumPoints() const;
199 void requestCancel();
201 void resetCancellation();
203 bool wasCancelled() const;
205 bool validate();
208 std::string getError() const;
210 void clearCache();
212 uint64_t getRevision() const;
214 int getExecutionCount() const;
216 int getCacheHitCount() const;
223 int getCompiledSegmentCount() const;
230 uint64_t getExecutionPlanBuildCount() const;
231
233 int getMetricCount() const;
235 std::string getMetricNodeId(int index) const;
237 int getMetricOutputCount(int index) const;
239 float getMetricMilliseconds(int index) const;
241 bool isMetricCacheHit(int index) const;
243 std::string getMetricBackend(int index) const;
245 std::string getComputeFallbackReason() const;
247 uint64_t getComputeUploadCount() const;
249 uint64_t getComputeDispatchCount() const;
251 uint64_t getComputeReadbackCount() const;
253 uint64_t getComputeBufferReuseCount() const;
255 uint64_t getComputePeakBufferBytes() const;
257 int getLastFusedTransformCount() const;
259 float getMetricMinX(int index) const;
261 float getMetricMinY(int index) const;
263 float getMetricMinZ(int index) const;
265 float getMetricMaxX(int index) const;
267 float getMetricMaxY(int index) const;
269 float getMetricMaxZ(int index) const;
271 float getMetricAverageDensity(int index) const;
273 PointSet* getNodeOutput(const std::string& id) const;
275 std::string debugReport() const;
282 std::string serializeDefinition() const;
284 bool deserializeDefinition(const std::string& definition);
286 PointGraph* instantiate() const;
287
289 static int getOperationCount();
291 static std::string getOperationId(int index);
293 static int getOperationInputCount(const std::string& operation);
295 static int getOperationParamCount(const std::string& operation);
297 static std::string getOperationParamKey(const std::string& operation, int index);
299 static std::string getOperationParamKind(const std::string& operation, int index);
301 static std::string getOperationParamDefault(const std::string& operation, int index);
302
303private:
304 struct Node {
305 std::string id;
306 std::string operation;
307 std::string inputs[2];
308 std::unordered_map<std::string, float> floats;
309 std::unordered_map<std::string, int> ints;
310 std::unordered_map<std::string, std::string> strings;
312 bool hasPoints = false;
313 std::shared_ptr<SpatialData> spatial;
314 std::shared_ptr<BiomeRules> biomeRules;
315 std::shared_ptr<ShapeGrammar> shapeGrammar;
316 std::shared_ptr<PointGraph> subgraph;
317 std::string subgraphInput;
318 std::string subgraphOutput;
319 PointSet cache;
320 PointGraphNodeMetric cacheMetric;
321 bool cacheValid = false;
322 bool deferredTransformValid = false;
323 };
324
325 struct GraphBinding {
326 std::shared_ptr<SpatialData> spatial;
327 std::shared_ptr<PointSet> points;
328 bool isSpatial = false;
329 };
330 struct ParameterBinding {
331 std::string nodeId;
332 std::string key;
333 std::string kind;
334 };
335 struct ExecutionSegment {
336 std::vector<std::string> nodes;
337 bool gpuTransformChain = false;
338 };
339 struct ExecutionPlan {
340 std::vector<std::string> topologicalOrder;
341 std::vector<ExecutionSegment> segments;
342 std::unordered_map<std::string, std::size_t> segmentByOutput;
343 };
344
345 [[nodiscard]] ResultRef<const PointSet> evaluate(const std::string& id,
346 std::unordered_map<std::string, int>& states);
347 [[nodiscard]] Result<OptionalRef<const PointSet>> evaluateTransformSegment(
348 const std::string& id, std::unordered_map<std::string, int>& states);
349 PointSet* materializeNodeOutput(const std::string& id) const;
350 [[nodiscard]] Result<void> validateNode(const std::string& id, std::unordered_map<std::string, int>& states) const;
351 void invalidate();
352 void invalidateFrom(const std::string& id);
353 void invalidateTopology(const std::string& changedNode);
354 [[nodiscard]] Result<void> compileExecutionPlan(const std::string& outputId);
355 float floatValue(const Node& node, const std::string& key, float fallback) const;
356 int intValue(const Node& node, const std::string& key, int fallback) const;
357 std::string stringValue(const Node& node, const std::string& key,
358 const std::string& fallback = {}) const;
359 [[nodiscard]] Result<std::shared_ptr<SpatialData>> resolveNodeSpatial(const Node& node) const;
360 [[nodiscard]] Result<std::shared_ptr<PointSet>> resolveBindingPoints(const std::string& name) const;
361
362
363
364 std::unordered_map<std::string, GraphBinding> bindings_;
365 std::vector<std::string> bindingOrder_;
366 std::unordered_map<std::string, Node> nodes_;
367 std::vector<std::string> nodeOrder_;
368 std::unordered_map<std::string, ParameterBinding> parameters_;
369 std::vector<std::string> parameterOrder_;
370 std::unordered_map<std::string, float> floatOverrides_;
371 std::unordered_map<std::string, int> intOverrides_;
372 std::unordered_map<std::string, std::string> stringOverrides_;
373 std::vector<PointGraphNodeMetric> metrics_;
374 std::string error_;
375 int executionCount_ = 0;
376 int cacheHitCount_ = 0;
377 uint64_t revision_ = 0;
378 uint64_t executionPlanBuildCount_ = 0;
379 std::shared_ptr<const ExecutionPlan> executionPlan_;
380 std::unordered_map<std::string, std::shared_ptr<const ExecutionPlan>> executionPlans_;
381 std::vector<std::string> executionPlanRecency_;
382 int executionNodeBudget_ = 0;
383 int maxNodeOutputPoints_ = 0;
384 std::string computePolicy_ = "auto";
385 int computeMinimumPoints_ = 1024;
386 std::string computeFallbackReason_;
387 std::shared_ptr<PointCompute> pointCompute_;
388 int evaluatedNodes_ = 0;
389 bool cancelRequested_ = false;
390 bool lastCancelled_ = false;
391};
392
393} // namespace eve::procgen
ActionParameterOperation operation
double value
eve::action::ActionSpatialBinding spatial
Vocabulary aliases for nullable and checked borrowed references.
std::string nodeId
#define EVENGINE_API_DOMAINS
Definition Export.h:110
std::uint32_t key
int inputs
Definition GridGraph.cpp:23
TokenKind kind
std::string name
std::vector< BvhNode > nodes
std::map< std::string, std::vector< std::string > > graph
Definition Package.cpp:59
std::string id
Definition PlayHost.cpp:108
std::shared_ptr< const std::vector< glm::vec2 > > points
const RoadNode * node
LogicalId definition
uint32_t index
Move-only operation result carrying either a value or Status.
Definition Result.h:155
Data-driven biome distribution rules compatible with PointGraph and scene batches.
Definition Biome.h:40
EVENGINE_API_DOMAINS public API.
Definition PointGraph.h:66
Script-friendly collection of attributed 3D samples.
Definition PointSet.h:59
Module-based shape grammar expanded continuously along a 3D polyline.
Queryable spatial input for procedural pipelines.
Definition SpatialData.h:35
A data-flow graph for attributed procedural points.
Definition PointGraph.h:49
Snapshot of one node output for editor Attribute/Inspect panels.
Definition PointGraph.h:56
std::vector< float > sampleFloats
Optional sampled float values: columns-major flattened [column * sampleCount + point].
Definition PointGraph.h:61
std::vector< PointGraphColumnInfo > columns
Definition PointGraph.h:59
Per-node execution information from the most recent graph run.
Definition PointGraph.h:24