载入中...
搜索中...
未找到
SceneImportRuntime.cpp
浏览该文件的文档.
1#include <utility>
5namespace {} // namespace
8 if (!loader)
9 return eve::editing::failed<SceneImportPreflight>(EditorStatus::Rejected, RuleId("editor.scene-import.loader"),
10 "SceneLoader is required");
11 auto diagnostics = target.validate();
12 for (const auto& d : diagnostics)
13 if (d.severity() == DiagnosticSeverity::Error)
14 return Result<SceneImportPreflight>::failure(eve::Status(EditorStatus::Rejected, diagnostics));
15 const auto& v = target.value();
17 o.triangulate = v.triangulate;
18 o.generateNormalsIfMissing = v.generateNormals;
19 o.joinIdenticalVertices = v.joinVertices;
20 o.flipUVs = v.flipUvs;
21 o.improveCacheLocality = v.improveCache;
22 o.sharedMeshes = v.sharedMeshes;
23 o.mipmaps = v.mipmaps;
24 o.importLights = v.importLights;
25 o.importCameras = v.importCameras;
26 o.importAnimations = v.importAnimations;
27 auto inspected = loader->inspect(v.sourceAsset, o);
28 if (!inspected.hasValue()) {
29 const auto* primary = inspected.status().primaryDiagnostic();
30 return eve::editing::failed<SceneImportPreflight>(
31 EditorStatus::Failed, RuleId("editor.scene-import.decode"),
32 primary ? primary->message() : "Scene import inspection failed");
33 }
34 const auto& s = inspected.value();
36 out.sourceRevision = target.revision();
37 out.nodes = s.nodeCount;
38 out.meshNodes = s.meshNodeCount;
39 out.added = s.diff.added;
40 out.removed = s.diff.removed;
41 out.modified = s.diff.modified;
42 out.moved = s.diff.moved;
43 out.warnings = s.warnings;
44 out.sockets = s.sockets;
45 out.collisions = s.collisions;
46 for (const auto& w : s.warnings)
48 RuleId("editor.scene-import.warning"), DiagnosticSeverity::Warning, w));
49 return eve::editing::applied<SceneImportPreflight>(std::move(out), std::move(diagnostics));
50}
51} // namespace eve::sceneloader_editing
LogicalId target
float w
Definition AnimClip.cpp:738
const std::string & s
float v
float d
Move-only operation result carrying either a value or Status.
Definition Result.h:155
const T & value() const &
Borrow the value from a const lvalue after checking success.
Definition Result.h:308
Structured status and zero or more diagnostics for an operation.
Definition Status.h:68
UUID-backed identifier adapter for legacy textual boundaries.
Definition Identity.h:314
Loads a 3D scene (glTF / OBJ / FBX / GLB ... via Assimp/medialoader) into the ECS scene tree.
eve::Result< SceneInspection > inspect(const std::string &path, const LoadOptions &options={})
Decode with explicit options and return copied metadata without mounting or GPU upload.
Result< SceneImportPreflight > inspect(const SceneImportTarget &, sceneloader::SceneLoader *) const
Inspect.
EVENGINE_API_ORCHESTRATION public API.
StrongId< RuleIdTag > RuleId
Definition EditingIds.h:60
Diagnostic ruleDiagnostic(eve::DiagnosticCode code, RuleId rule, DiagnosticSeverity severity, std::string message)
Build a common diagnostic carrying an open editing rule identity.
Options controlling how a 3D scene file is decoded and mounted.
bool importLights
Import aiLight entries as graphics::Light3D entities.
bool mipmaps
Generate mipmaps + anisotropic filtering for imported textures.
bool sharedMeshes
Reuse one GPU mesh when several nodes reference the same aiMesh.
bool importAnimations
Import aiAnimation clips (skeleton + clips exposed via accessors).
bool importCameras
Import aiCamera entries as inactive graphics::Camera3D entities.