MCPcopy Create free account
hub / github.com/CesiumGS/cesium-native / decodeSpz

Function decodeSpz

CesiumGltfReader/src/decodeSpz.cpp:431–473  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

429} // namespace
430
431void decodeSpz(CesiumGltfReader::GltfReaderResult& readGltf) {
432 CESIUM_TRACE("CesiumGltfReader::decodeSpz");
433 if (!readGltf.model) {
434 return;
435 }
436
437 CesiumGltf::Model& model = readGltf.model.value();
438
439 for (CesiumGltf::Mesh& mesh : model.meshes) {
440 for (CesiumGltf::MeshPrimitive& primitive : mesh.primitives) {
441 // KHR_spz_gaussian_splats_compression has no KHR_gaussian_splatting
442 // extension attached Just throw one on there to make this easier
443 if (primitive.extensions.contains(ALTERNATE_EXT_NAME1)) {
444 primitive.addExtension<CesiumGltf::ExtensionKhrGaussianSplatting>();
445 }
446
447 CesiumGltf::ExtensionKhrGaussianSplatting* pSplat =
448 primitive.getExtension<CesiumGltf::ExtensionKhrGaussianSplatting>();
449 if (!pSplat) {
450 continue;
451 }
452
453 CesiumGltf::ExtensionKhrGaussianSplattingCompressionSpz2* pSpz =
454 getAndMaybeConvertSpzExtension(readGltf, primitive, *pSplat);
455 if (!pSpz) {
456 continue;
457 }
458
459 fixAttributeNames(primitive);
460 decodePrimitive(readGltf, primitive, *pSpz);
461
462 // Remove the SPZ extension as it no longer applies.
463 pSplat->extensions.erase(
464 CesiumGltf::ExtensionKhrGaussianSplattingCompressionSpz2::
465 ExtensionName);
466 }
467 }
468
469 model.removeExtensionRequired(
470 CesiumGltf::ExtensionKhrGaussianSplattingCompressionSpz2::ExtensionName);
471 model.removeExtensionRequired(ALTERNATE_EXT_NAME1);
472 model.removeExtensionRequired(ALTERNATE_EXT_NAME2);
473}
474
475bool hasSpzExtension(GltfReaderResult& readGltf) {
476 CESIUM_ASSERT(readGltf.model);

Callers 1

postprocessFunction · 0.85

Calls 5

fixAttributeNamesFunction · 0.85
decodePrimitiveFunction · 0.70
containsMethod · 0.45

Tested by

no test coverage detected