载入中...
搜索中...
未找到
GltfImporter.cpp
浏览该文件的文档.
32 const size_t offset = uv.offset + size_t(vertex) * uv.stride + axis * componentSize(uv.componentType);
39Result<PrimitiveOutput> decodePrimitive(const Value::Object& root, const Value::Object& primitive,
46 DiagnosticCode::Unsupported, "only glTF TRIANGLES primitives are supported", {}, {}, "asset.import"));
51 Diagnostic::error(DiagnosticCode::ParseError, "primitive attributes are required", {}, {}, "asset.import"));
52 auto positionIndex = unsignedValue(member(*attributes, "POSITION"), "primitive.attributes.POSITION");
56 if (positions.value().count == 0 || positions.value().components != 3 || positions.value().componentType != 5126 ||
59 DiagnosticCode::Unsupported, "POSITION must be a bounded FLOAT VEC3 accessor", {}, {}, "asset.import"));
69 Diagnostic::error(DiagnosticCode::Unsupported, "NORMAL must match POSITION", {}, {}, "asset.import"));
78 if (parsed.ec != std::errc{} || parsed.ptr != suffix.data() + suffix.size() || std::to_string(set) != suffix)
80 Diagnostic::error(DiagnosticCode::ParseError, "invalid UV set semantic", {}, {}, "asset.import"));
90 DiagnosticCode::Unsupported, "UV sets must match POSITION and use FLOAT or normalized unsigned VEC2",
128 if (accessor.value().count == 0 || accessor.value().count > limits.maximumIndicesPerPrimitive ||
144 DiagnosticCode::ParseError, "unindexed triangle vertex count must be divisible by three", {}, {},
149 const std::uint64_t decodedSize = (extraAttributes.empty() ? 24 : 28) + uint64_t(texcoords.size()) * 4 +
154 if (decodedSize > limits.maximumDecodedBytes || decodedSize > std::numeric_limits<std::size_t>::max())
156 DiagnosticCode::InvalidArgument, "canonical mesh exceeds decoded budget", {}, {}, "asset.import"));
164 for (const auto& [name, attribute] : extraAttributes) mesh.attributes[name].components = attribute.components;
193 mesh, {limits.maximumVerticesPerPrimitive, limits.maximumIndicesPerPrimitive, limits.maximumDecodedBytes});
206 if (request.sourceName.empty() || request.sourceName.size() > request.limits.maximumStringBytes)
208 Diagnostic::error(DiagnosticCode::InvalidArgument, "glTF source name is invalid", {}, {}, "asset.import"));
214 Diagnostic::error(DiagnosticCode::ParseError, "glTF root must be an object", {}, {}, "asset.import"));
231 DiagnosticCode::UnknownVersion, "only glTF 2.x is supported", "$.asset.version", {}, "asset.import"));
238 Diagnostic::error(DiagnosticCode::ParseError, "glTF contains no meshes", "$.meshes", {}, "asset.import"));
252 Diagnostic::error(DiagnosticCode::ParseError, "glTF mesh has no primitives", {}, {}, "asset.import"));
256 Diagnostic::error(DiagnosticCode::InvalidArgument, "glTF primitive asset count exceeds limits", {},
Tool-side image and glTF importers producing canonical .eva candidates.
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
Result< std::string > toJson() const
Serialize this value as deterministic compact JSON.
Definition Value.cpp:67
const std::string & asString() const
Return the string payload; the caller must have checked the kind.
Definition Value.cpp:87
const T * getIf() const noexcept
Return a typed pointer, or nullptr when the kind differs.
Definition Value.h:180
Id128 child(std::string_view role) const noexcept
Derives a deterministic child UUID for a hierarchical identity.
Definition Identity.h:192
EVENGINE_API_PLATFORM Result< void > finalizeImportReport(PreparedAssetImport &prepared, const ImportPackageIdentity &package, std::string_view sourceEngine, std::string_view sourceVersion, Value::Object options={})
Append the deterministic mandatory import report and bind it from provenance.
Definition ImportReport.cpp:21
Result< asset::EvaManifest > baseManifest(const ImportPackageIdentity &package, std::string_view importer)
Base manifest.
Definition ImportCommon.h:31
Result< Accessor > accessorAt(const Value::Object &root, const std::vector< std::span< const std::uint8_t > > &buffers, std::uint64_t accessorIndex, const AssetImportLimits &limits)
Validate an accessor retaining only buffer spans borrowed for this import.
Definition GltfDecode.cpp:148
bool supportsMaterialExtension(std::string_view name)
Whether this adapter translates the named standard material/texture extension.
Definition GltfMaterials.cpp:310
Result< float > readFloat(const Accessor &accessor, std::uint32_t element, std::uint32_t component)
Read one bounded finite FLOAT component.
Definition GltfDecode.cpp:221
Result< std::vector< std::span< const std::uint8_t > > > resolveBuffers(const Value::Object &root, const Document &document, const GltfImportRequest &request)
Resolve immutable spans borrowed from document/request; both must outlive their use.
Definition GltfDecode.cpp:89
Result< std::uint64_t > unsignedValue(const Value *value, std::string path, bool required, std::uint64_t fallback)
Validate an optional integer field. @ownership Borrowed nullable field owned by the input document....
Definition GltfDecode.cpp:13
Result< Document > parseDocument(const GltfImportRequest &request)
Parse a bounded document into an owning result.
Definition GltfDecode.cpp:34
Result< std::uint32_t > readIndex(const Accessor &accessor, std::uint32_t element)
Read one bounded unsigned scalar index.
Definition GltfDecode.cpp:234
Result< void > appendMaterials(const GltfImportRequest &request, const Value::Object &root, const std::vector< std::span< const uint8_t > > &buffers, PreparedAssetImport &output)
Definition GltfMaterials.cpp:315
Result< void > appendAnimation(const GltfImportRequest &request, const Value::Object &root, const std::vector< std::span< const std::uint8_t > > &buffers, PreparedAssetImport &output)
Append owning canonical skeleton, skin and clip assets to an unpublished candidate.
Definition GltfAnimation.cpp:379
std::uint32_t componentSize(std::uint32_t type)
Return encoded component byte size, or zero for an unknown type.
Definition GltfDecode.cpp:141
Definition AssetImporter.h:14
@ Translated
@ Unsupported
EVENGINE_API_PLATFORM Result< PreparedAssetImport > prepareGltfImport(const GltfImportRequest &request)
Decode triangle primitives from glTF 2.0 into canonical typed mesh blobs.
Definition GltfImporter.cpp:205
EVENGINE_API_FOUNDATION Result< std::vector< std::uint8_t > > encodeCanonicalMesh(const CanonicalMeshData &mesh, const CanonicalMeshLimits &limits={})
Encode an owning snapshot to EVMESH v3, or v2 when no named attributes exist. Borrows input synchrono...
Definition CanonicalMeshEncode.cpp:9
std::variant< std::monostate, std::int64_t, double, std::string, bool > Value
Definition Database.h:26
@ InvalidArgument
@ UnknownVersion
@ Unsupported
@ ParseError
detail::StrongUint64< detail::SchemaVersionTag > SchemaVersion
Persistent data-format version; not a runtime replacement generation.
Definition SchemaVersion.h:13
Definition Container.h:602
std::map< std::string, AssetRef > entrypoints
Definition EvaManifest.h:71
std::uint32_t maximumAssets
Definition AssetImporter.h:20
std::uint32_t maximumVerticesPerPrimitive
Definition AssetImporter.h:21
std::uint64_t maximumDecodedBytes
Definition AssetImporter.h:19
std::uint32_t maximumIndicesPerPrimitive
Definition AssetImporter.h:22
std::uint32_t maximumStringBytes
Definition AssetImporter.h:23
Untrusted .gltf/.glb input plus explicitly supplied external URI bytes.
Definition AssetImporter.h:54
std::vector< std::uint8_t > documentBytes
Definition AssetImporter.h:57
ImportPackageIdentity package
Definition AssetImporter.h:55
PersistentId packageId
Definition AssetImporter.h:34
Owning, validated source archive candidate not yet published to disk/database.
Definition AssetImporter.h:90
std::vector< ImportFinding > findings
Definition AssetImporter.h:93
std::vector< asset::EvaArchiveEntry > entries
Definition AssetImporter.h:92
std::vector< ImportSourceMapping > sourceMappings
Definition AssetImporter.h:94
asset::EvaManifest manifest
Definition AssetImporter.h:91