|
|
@@ -136,7 +136,8 @@ static Error getNodeTransform(const cgltf_node& node, Transform& trf)
|
|
|
return Error::kNone;
|
|
|
}
|
|
|
|
|
|
-static Bool stringsExist(const HashMapRaii<CString, StringRaii>& map, const std::initializer_list<CString>& list)
|
|
|
+static Bool stringsExist(const ImporterHashMap<CString, ImporterString>& map,
|
|
|
+ const std::initializer_list<CString>& list)
|
|
|
{
|
|
|
for(CString item : list)
|
|
|
{
|
|
|
@@ -167,13 +168,13 @@ GltfImporter::~GltfImporter()
|
|
|
|
|
|
Error GltfImporter::init(const GltfImporterInitInfo& initInfo)
|
|
|
{
|
|
|
- m_inputFname.create(initInfo.m_inputFilename);
|
|
|
- m_outDir.create(initInfo.m_outDirectory);
|
|
|
- m_rpath.create(initInfo.m_rpath);
|
|
|
- m_texrpath.create(initInfo.m_texrpath);
|
|
|
+ m_inputFname = initInfo.m_inputFilename;
|
|
|
+ m_outDir = initInfo.m_outDirectory;
|
|
|
+ m_rpath = initInfo.m_rpath;
|
|
|
+ m_texrpath = initInfo.m_texrpath;
|
|
|
m_optimizeMeshes = initInfo.m_optimizeMeshes;
|
|
|
m_optimizeAnimations = initInfo.m_optimizeAnimations;
|
|
|
- m_comment.create(initInfo.m_comment);
|
|
|
+ m_comment = initInfo.m_comment;
|
|
|
|
|
|
m_lightIntensityScale = max(initInfo.m_lightIntensityScale, kEpsilonf);
|
|
|
|
|
|
@@ -211,7 +212,7 @@ Error GltfImporter::init(const GltfImporterInitInfo& initInfo)
|
|
|
if(initInfo.m_threadCount > 0)
|
|
|
{
|
|
|
const U32 threadCount = min(getCpuCoresCount(), initInfo.m_threadCount);
|
|
|
- m_hive = newInstance<ThreadHive>(*m_pool, threadCount, m_pool, true);
|
|
|
+ m_hive = newInstance<ThreadHive>(*m_pool, threadCount, true);
|
|
|
}
|
|
|
|
|
|
m_importTextures = initInfo.m_importTextures;
|
|
|
@@ -223,7 +224,7 @@ Error GltfImporter::writeAll()
|
|
|
{
|
|
|
populateNodePtrToIdx();
|
|
|
|
|
|
- StringRaii sceneFname(m_pool);
|
|
|
+ ImporterString sceneFname(m_pool);
|
|
|
sceneFname.sprintf("%sScene.lua", m_outDir.cstr());
|
|
|
ANKI_CHECK(m_sceneFile.open(sceneFname.toCString(), FileOpenFlag::kWrite));
|
|
|
ANKI_CHECK(m_sceneFile.writeTextf("-- Generated by: %s\n", m_comment.cstr()));
|
|
|
@@ -234,7 +235,7 @@ Error GltfImporter::writeAll()
|
|
|
{
|
|
|
for(cgltf_node* const* node = scene->nodes; node < scene->nodes + scene->nodes_count; ++node)
|
|
|
{
|
|
|
- ANKI_CHECK(visitNode(*(*node), Transform::getIdentity(), HashMapRaii<CString, StringRaii>(m_pool)));
|
|
|
+ ANKI_CHECK(visitNode(*(*node), Transform::getIdentity(), ImporterHashMap<CString, ImporterString>(m_pool)));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -374,7 +375,7 @@ Error GltfImporter::writeAll()
|
|
|
return Error::kNone;
|
|
|
}
|
|
|
|
|
|
-Error GltfImporter::getExtras(const cgltf_extras& extras, HashMapRaii<CString, StringRaii>& out) const
|
|
|
+Error GltfImporter::getExtras(const cgltf_extras& extras, ImporterHashMap<CString, ImporterString>& out) const
|
|
|
{
|
|
|
cgltf_size extrasSize;
|
|
|
cgltf_copy_extras_json(m_gltf, &extras, nullptr, &extrasSize);
|
|
|
@@ -383,8 +384,8 @@ Error GltfImporter::getExtras(const cgltf_extras& extras, HashMapRaii<CString, S
|
|
|
return Error::kNone;
|
|
|
}
|
|
|
|
|
|
- DynamicArrayRaii<char, PtrSize> json(m_pool);
|
|
|
- json.create(extrasSize + 1);
|
|
|
+ ImporterDynamicArrayLarge<char> json(m_pool);
|
|
|
+ json.resize(extrasSize + 1);
|
|
|
cgltf_result res = cgltf_copy_extras_json(m_gltf, &extras, &json[0], &extrasSize);
|
|
|
if(res != cgltf_result_success)
|
|
|
{
|
|
|
@@ -404,14 +405,14 @@ Error GltfImporter::getExtras(const cgltf_extras& extras, HashMapRaii<CString, S
|
|
|
return Error::kNone;
|
|
|
}
|
|
|
|
|
|
- DynamicArrayRaii<jsmntok_t> tokens(m_pool);
|
|
|
- tokens.create(U32(tokenCount));
|
|
|
+ ImporterDynamicArray<jsmntok_t> tokens(m_pool);
|
|
|
+ tokens.resize(U32(tokenCount));
|
|
|
|
|
|
// Get tokens
|
|
|
jsmn_init(&parser);
|
|
|
jsmn_parse(&parser, jsonTxt.cstr(), jsonTxt.getLength(), &tokens[0], tokens.getSize());
|
|
|
|
|
|
- StringListRaii tokenStrings(m_pool);
|
|
|
+ ImporterStringList tokenStrings(m_pool);
|
|
|
for(const jsmntok_t& token : tokens)
|
|
|
{
|
|
|
if(token.type != JSMN_STRING && token.type != JSMN_PRIMITIVE)
|
|
|
@@ -419,8 +420,7 @@ Error GltfImporter::getExtras(const cgltf_extras& extras, HashMapRaii<CString, S
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- StringRaii tokenStr(m_pool);
|
|
|
- tokenStr.create(&jsonTxt[token.start], &jsonTxt[token.end]);
|
|
|
+ ImporterString tokenStr(&jsonTxt[token.start], &jsonTxt[token.end], m_pool);
|
|
|
tokenStrings.pushBack(tokenStr.toCString());
|
|
|
}
|
|
|
|
|
|
@@ -437,7 +437,7 @@ Error GltfImporter::getExtras(const cgltf_extras& extras, HashMapRaii<CString, S
|
|
|
auto it2 = it;
|
|
|
++it2;
|
|
|
|
|
|
- out.emplace(it->toCString(), StringRaii(it2->toCString(), m_pool));
|
|
|
+ out.emplace(it->toCString(), ImporterString(it2->toCString(), m_pool));
|
|
|
++it;
|
|
|
++it;
|
|
|
}
|
|
|
@@ -468,13 +468,13 @@ void GltfImporter::populateNodePtrToIdx()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-StringRaii GltfImporter::getNodeName(const cgltf_node& node) const
|
|
|
+ImporterString GltfImporter::getNodeName(const cgltf_node& node) const
|
|
|
{
|
|
|
- StringRaii out(m_pool);
|
|
|
+ ImporterString out(m_pool);
|
|
|
|
|
|
if(node.name)
|
|
|
{
|
|
|
- out.create(node.name);
|
|
|
+ out = node.name;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -486,12 +486,12 @@ StringRaii GltfImporter::getNodeName(const cgltf_node& node) const
|
|
|
return out;
|
|
|
}
|
|
|
|
|
|
-Error GltfImporter::parseArrayOfNumbers(CString str, DynamicArrayRaii<F64>& out, const U32* expectedArraySize)
|
|
|
+Error GltfImporter::parseArrayOfNumbers(CString str, ImporterDynamicArray<F64>& out, const U32* expectedArraySize)
|
|
|
{
|
|
|
- StringListRaii list(m_pool);
|
|
|
+ ImporterStringList list(m_pool);
|
|
|
list.splitString(str, ' ');
|
|
|
|
|
|
- out.create(U32(list.getSize()));
|
|
|
+ out.resize(U32(list.getSize()));
|
|
|
|
|
|
Error err = Error::kNone;
|
|
|
auto it = list.getBegin();
|
|
|
@@ -518,7 +518,7 @@ Error GltfImporter::parseArrayOfNumbers(CString str, DynamicArrayRaii<F64>& out,
|
|
|
}
|
|
|
|
|
|
Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf,
|
|
|
- const HashMapRaii<CString, StringRaii>& parentExtras)
|
|
|
+ const ImporterHashMap<CString, ImporterString>& parentExtras)
|
|
|
{
|
|
|
// Check error from a thread
|
|
|
const Error threadErr = m_errorInThread.load();
|
|
|
@@ -528,7 +528,7 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
|
|
|
return threadErr;
|
|
|
}
|
|
|
|
|
|
- HashMapRaii<CString, StringRaii> outExtras(m_pool);
|
|
|
+ ImporterHashMap<CString, ImporterString> outExtras(m_pool);
|
|
|
if(node.light)
|
|
|
{
|
|
|
ANKI_CHECK(writeLight(node, parentExtras));
|
|
|
@@ -550,15 +550,15 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
|
|
|
else if(node.mesh)
|
|
|
{
|
|
|
// Handle special nodes
|
|
|
- HashMapRaii<CString, StringRaii> extras(parentExtras);
|
|
|
+ ImporterHashMap<CString, ImporterString> extras(parentExtras);
|
|
|
ANKI_CHECK(getExtras(node.mesh->extras, extras));
|
|
|
ANKI_CHECK(getExtras(node.extras, extras));
|
|
|
|
|
|
- HashMapRaii<CString, StringRaii>::Iterator it;
|
|
|
+ ImporterHashMap<CString, ImporterString>::Iterator it;
|
|
|
|
|
|
if((it = extras.find("particles")) != extras.getEnd())
|
|
|
{
|
|
|
- const StringRaii& fname = *it;
|
|
|
+ const ImporterString& fname = *it;
|
|
|
|
|
|
Bool gpuParticles = false;
|
|
|
if((it = extras.find("gpu_particles")) != extras.getEnd() && *it == "true")
|
|
|
@@ -588,7 +588,7 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
|
|
|
|
|
|
if((it = extras.find("skybox_solid_color")) != extras.getEnd())
|
|
|
{
|
|
|
- StringListRaii tokens(m_pool);
|
|
|
+ ImporterStringList tokens(m_pool);
|
|
|
tokens.splitString(*it, ' ');
|
|
|
if(tokens.getSize() != 3)
|
|
|
{
|
|
|
@@ -656,7 +656,7 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
|
|
|
ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newSceneNode(\"%s\")\n", getNodeName(node).cstr()));
|
|
|
|
|
|
ANKI_CHECK(m_sceneFile.writeText("comp = scene:newBodyComponent()\n"));
|
|
|
- const StringRaii meshFname = computeMeshResourceFilename(*node.mesh);
|
|
|
+ const ImporterString meshFname = computeMeshResourceFilename(*node.mesh);
|
|
|
ANKI_CHECK(m_sceneFile.writeTextf("comp:loadMeshResource(\"%s%s\")\n", m_rpath.cstr(), meshFname.cstr()));
|
|
|
|
|
|
Transform localTrf;
|
|
|
@@ -722,16 +722,16 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
|
|
|
}
|
|
|
else if((it = extras.find("decal")) != extras.getEnd() && (*it == "true" || *it == "1"))
|
|
|
{
|
|
|
- StringRaii diffuseAtlas(m_pool);
|
|
|
+ ImporterString diffuseAtlas(m_pool);
|
|
|
if((it = extras.find("decal_diffuse_atlas")) != extras.getEnd())
|
|
|
{
|
|
|
- diffuseAtlas.create(it->toCString());
|
|
|
+ diffuseAtlas = *it;
|
|
|
}
|
|
|
|
|
|
- StringRaii diffuseSubtexture(m_pool);
|
|
|
+ ImporterString diffuseSubtexture(m_pool);
|
|
|
if((it = extras.find("decal_diffuse_sub_texture")) != extras.getEnd())
|
|
|
{
|
|
|
- diffuseSubtexture.create(it->toCString());
|
|
|
+ diffuseSubtexture = *it;
|
|
|
}
|
|
|
|
|
|
F32 diffuseFactor = -1.0f;
|
|
|
@@ -740,16 +740,16 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
|
|
|
ANKI_CHECK(it->toNumber(diffuseFactor));
|
|
|
}
|
|
|
|
|
|
- StringRaii specularRougnessMetallicAtlas(m_pool);
|
|
|
+ ImporterString specularRougnessMetallicAtlas(m_pool);
|
|
|
if((it = extras.find("decal_specular_roughness_metallic_atlas")) != extras.getEnd())
|
|
|
{
|
|
|
- specularRougnessMetallicAtlas.create(it->toCString());
|
|
|
+ specularRougnessMetallicAtlas = *it;
|
|
|
}
|
|
|
|
|
|
- StringRaii specularRougnessMetallicSubtexture(m_pool);
|
|
|
+ ImporterString specularRougnessMetallicSubtexture(m_pool);
|
|
|
if((it = extras.find("decal_specular_roughness_metallic_sub_texture")) != extras.getEnd())
|
|
|
{
|
|
|
- specularRougnessMetallicSubtexture.create(it->toCString());
|
|
|
+ specularRougnessMetallicSubtexture = *it;
|
|
|
}
|
|
|
|
|
|
F32 specularRougnessMetallicFactor = -1.0f;
|
|
|
@@ -800,7 +800,7 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
|
|
|
|
|
|
addRequest<const cgltf_mesh*>(node.mesh, m_modelImportRequests);
|
|
|
|
|
|
- HashMapRaii<CString, StringRaii>::Iterator it2;
|
|
|
+ ImporterHashMap<CString, ImporterString>::Iterator it2;
|
|
|
const Bool selfCollision = (it2 = extras.find("collision_mesh")) != extras.getEnd() && *it2 == "self";
|
|
|
|
|
|
ANKI_CHECK(writeModelNode(node, parentExtras));
|
|
|
@@ -813,7 +813,7 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
|
|
|
{
|
|
|
ANKI_CHECK(m_sceneFile.writeText("comp = node:newBodyComponent()\n"));
|
|
|
|
|
|
- const StringRaii meshFname = computeMeshResourceFilename(*node.mesh);
|
|
|
+ const ImporterString meshFname = computeMeshResourceFilename(*node.mesh);
|
|
|
|
|
|
ANKI_CHECK(m_sceneFile.writeText("comp:setMeshFromModelComponent()\n"));
|
|
|
ANKI_CHECK(m_sceneFile.writeText("comp:teleportTo(trf)\n"));
|
|
|
@@ -866,14 +866,14 @@ Error GltfImporter::writeTransform(const Transform& trf)
|
|
|
|
|
|
Error GltfImporter::writeModel(const cgltf_mesh& mesh) const
|
|
|
{
|
|
|
- const StringRaii modelFname = computeModelResourceFilename(mesh);
|
|
|
+ const ImporterString modelFname = computeModelResourceFilename(mesh);
|
|
|
ANKI_IMPORTER_LOGV("Importing model %s", modelFname.cstr());
|
|
|
|
|
|
- HashMapRaii<CString, StringRaii> extras(m_pool);
|
|
|
+ ImporterHashMap<CString, ImporterString> extras(m_pool);
|
|
|
ANKI_CHECK(getExtras(mesh.extras, extras));
|
|
|
|
|
|
File file;
|
|
|
- StringRaii modelFullFname(m_pool);
|
|
|
+ ImporterString modelFullFname(m_pool);
|
|
|
modelFullFname.sprintf("%s/%s", m_outDir.cstr(), modelFname.cstr());
|
|
|
ANKI_CHECK(file.open(modelFullFname, FileOpenFlag::kWrite));
|
|
|
|
|
|
@@ -884,7 +884,7 @@ Error GltfImporter::writeModel(const cgltf_mesh& mesh) const
|
|
|
{
|
|
|
ANKI_CHECK(file.writeText("\t\t<modelPatch>\n"));
|
|
|
|
|
|
- const StringRaii meshFname = computeMeshResourceFilename(mesh);
|
|
|
+ const ImporterString meshFname = computeMeshResourceFilename(mesh);
|
|
|
if(mesh.primitives_count == 1)
|
|
|
{
|
|
|
ANKI_CHECK(file.writeTextf("\t\t\t<mesh>%s%s</mesh>\n", m_rpath.cstr(), meshFname.cstr()));
|
|
|
@@ -895,7 +895,7 @@ Error GltfImporter::writeModel(const cgltf_mesh& mesh) const
|
|
|
meshFname.cstr()));
|
|
|
}
|
|
|
|
|
|
- HashMapRaii<CString, StringRaii> materialExtras(m_pool);
|
|
|
+ ImporterHashMap<CString, ImporterString> materialExtras(m_pool);
|
|
|
ANKI_CHECK(getExtras(mesh.primitives[primIdx].material->extras, materialExtras));
|
|
|
auto mtlOverride = materialExtras.find("material_override");
|
|
|
if(mtlOverride != materialExtras.getEnd())
|
|
|
@@ -904,7 +904,7 @@ Error GltfImporter::writeModel(const cgltf_mesh& mesh) const
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- const StringRaii mtlFname = computeMaterialResourceFilename(*mesh.primitives[primIdx].material);
|
|
|
+ const ImporterString mtlFname = computeMaterialResourceFilename(*mesh.primitives[primIdx].material);
|
|
|
ANKI_CHECK(file.writeTextf("\t\t\t<material>%s%s</material>\n", m_rpath.cstr(), mtlFname.cstr()));
|
|
|
}
|
|
|
|
|
|
@@ -920,12 +920,12 @@ Error GltfImporter::writeModel(const cgltf_mesh& mesh) const
|
|
|
|
|
|
Error GltfImporter::writeSkeleton(const cgltf_skin& skin) const
|
|
|
{
|
|
|
- StringRaii fname(m_pool);
|
|
|
+ ImporterString fname(m_pool);
|
|
|
fname.sprintf("%s%s", m_outDir.cstr(), computeSkeletonResourceFilename(skin).cstr());
|
|
|
ANKI_IMPORTER_LOGV("Importing skeleton %s", fname.cstr());
|
|
|
|
|
|
// Get matrices
|
|
|
- DynamicArrayRaii<Mat4> boneMats(m_pool);
|
|
|
+ ImporterDynamicArray<Mat4> boneMats(m_pool);
|
|
|
readAccessor(*skin.inverse_bind_matrices, boneMats);
|
|
|
if(boneMats.getSize() != skin.joints_count)
|
|
|
{
|
|
|
@@ -937,14 +937,15 @@ Error GltfImporter::writeSkeleton(const cgltf_skin& skin) const
|
|
|
File file;
|
|
|
ANKI_CHECK(file.open(fname.toCString(), FileOpenFlag::kWrite));
|
|
|
|
|
|
- ANKI_CHECK(file.writeTextf("%s\n<skeleton>\n", XmlDocument::kXmlHeader.cstr()));
|
|
|
+ ANKI_CHECK(
|
|
|
+ file.writeTextf("%s\n<skeleton>\n", XmlDocument<MemoryPoolPtrWrapper<BaseMemoryPool>>::kXmlHeader.cstr()));
|
|
|
ANKI_CHECK(file.writeTextf("\t<bones>\n"));
|
|
|
|
|
|
for(U32 i = 0; i < skin.joints_count; ++i)
|
|
|
{
|
|
|
const cgltf_node& boneNode = *skin.joints[i];
|
|
|
|
|
|
- StringRaii parent(m_pool);
|
|
|
+ ImporterString parent(m_pool);
|
|
|
|
|
|
// Name & parent
|
|
|
ANKI_CHECK(file.writeTextf("\t\t<bone name=\"%s\" ", getNodeName(boneNode).cstr()));
|
|
|
@@ -984,13 +985,13 @@ Error GltfImporter::writeSkeleton(const cgltf_skin& skin) const
|
|
|
return Error::kNone;
|
|
|
}
|
|
|
|
|
|
-Error GltfImporter::writeLight(const cgltf_node& node, const HashMapRaii<CString, StringRaii>& parentExtras)
|
|
|
+Error GltfImporter::writeLight(const cgltf_node& node, const ImporterHashMap<CString, ImporterString>& parentExtras)
|
|
|
{
|
|
|
const cgltf_light& light = *node.light;
|
|
|
- StringRaii nodeName = getNodeName(node);
|
|
|
+ ImporterString nodeName = getNodeName(node);
|
|
|
ANKI_IMPORTER_LOGV("Importing light %s", nodeName.cstr());
|
|
|
|
|
|
- HashMapRaii<CString, StringRaii> extras(parentExtras);
|
|
|
+ ImporterHashMap<CString, ImporterString> extras(parentExtras);
|
|
|
ANKI_CHECK(getExtras(light.extras, extras));
|
|
|
ANKI_CHECK(getExtras(node.extras, extras));
|
|
|
|
|
|
@@ -1079,7 +1080,7 @@ Error GltfImporter::writeLight(const cgltf_node& node, const HashMapRaii<CString
|
|
|
|
|
|
if(lsSpriteSize != extras.getEnd())
|
|
|
{
|
|
|
- DynamicArrayRaii<F64> numbers(m_pool);
|
|
|
+ ImporterDynamicArray<F64> numbers(m_pool);
|
|
|
const U32 count = 2;
|
|
|
ANKI_CHECK(parseArrayOfNumbers(lsSpriteSize->toCString(), numbers, &count));
|
|
|
|
|
|
@@ -1088,7 +1089,7 @@ Error GltfImporter::writeLight(const cgltf_node& node, const HashMapRaii<CString
|
|
|
|
|
|
if(lsColor != extras.getEnd())
|
|
|
{
|
|
|
- DynamicArrayRaii<F64> numbers(m_pool);
|
|
|
+ ImporterDynamicArray<F64> numbers(m_pool);
|
|
|
const U32 count = 4;
|
|
|
ANKI_CHECK(parseArrayOfNumbers(lsColor->toCString(), numbers, &count));
|
|
|
|
|
|
@@ -1105,7 +1106,7 @@ Error GltfImporter::writeLight(const cgltf_node& node, const HashMapRaii<CString
|
|
|
|
|
|
if(lightEventIntensity != extras.getEnd())
|
|
|
{
|
|
|
- DynamicArrayRaii<F64> numbers(m_pool);
|
|
|
+ ImporterDynamicArray<F64> numbers(m_pool);
|
|
|
const U32 count = 4;
|
|
|
ANKI_CHECK(parseArrayOfNumbers(lightEventIntensity->toCString(), numbers, &count));
|
|
|
ANKI_CHECK(m_sceneFile.writeTextf("event:setIntensityMultiplier(Vec4.new(%f, %f, %f, %f))\n", numbers[0],
|
|
|
@@ -1114,7 +1115,7 @@ Error GltfImporter::writeLight(const cgltf_node& node, const HashMapRaii<CString
|
|
|
|
|
|
if(lightEventFrequency != extras.getEnd())
|
|
|
{
|
|
|
- DynamicArrayRaii<F64> numbers(m_pool);
|
|
|
+ ImporterDynamicArray<F64> numbers(m_pool);
|
|
|
const U32 count = 2;
|
|
|
ANKI_CHECK(parseArrayOfNumbers(lightEventFrequency->toCString(), numbers, &count));
|
|
|
ANKI_CHECK(m_sceneFile.writeTextf("event:setFrequency(%f, %f)\n", numbers[0], numbers[1]));
|
|
|
@@ -1125,7 +1126,7 @@ Error GltfImporter::writeLight(const cgltf_node& node, const HashMapRaii<CString
|
|
|
}
|
|
|
|
|
|
Error GltfImporter::writeCamera(const cgltf_node& node,
|
|
|
- [[maybe_unused]] const HashMapRaii<CString, StringRaii>& parentExtras)
|
|
|
+ [[maybe_unused]] const ImporterHashMap<CString, ImporterString>& parentExtras)
|
|
|
{
|
|
|
if(node.camera->type != cgltf_camera_type_perspective)
|
|
|
{
|
|
|
@@ -1146,14 +1147,14 @@ Error GltfImporter::writeCamera(const cgltf_node& node,
|
|
|
return Error::kNone;
|
|
|
}
|
|
|
|
|
|
-Error GltfImporter::writeModelNode(const cgltf_node& node, const HashMapRaii<CString, StringRaii>& parentExtras)
|
|
|
+Error GltfImporter::writeModelNode(const cgltf_node& node, const ImporterHashMap<CString, ImporterString>& parentExtras)
|
|
|
{
|
|
|
ANKI_IMPORTER_LOGV("Importing model node %s", getNodeName(node).cstr());
|
|
|
|
|
|
- HashMapRaii<CString, StringRaii> extras(parentExtras);
|
|
|
+ ImporterHashMap<CString, ImporterString> extras(parentExtras);
|
|
|
ANKI_CHECK(getExtras(node.extras, extras));
|
|
|
|
|
|
- const StringRaii modelFname = computeModelResourceFilename(*node.mesh);
|
|
|
+ const ImporterString modelFname = computeModelResourceFilename(*node.mesh);
|
|
|
|
|
|
ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newSceneNode(\"%s\")\n", getNodeName(node).cstr()));
|
|
|
ANKI_CHECK(m_sceneFile.writeTextf("node:newModelComponent():loadModelResource(\"%s%s\")\n", m_rpath.cstr(),
|
|
|
@@ -1168,9 +1169,9 @@ Error GltfImporter::writeModelNode(const cgltf_node& node, const HashMapRaii<CSt
|
|
|
return Error::kNone;
|
|
|
}
|
|
|
|
|
|
-StringRaii GltfImporter::computeModelResourceFilename(const cgltf_mesh& mesh) const
|
|
|
+ImporterString GltfImporter::computeModelResourceFilename(const cgltf_mesh& mesh) const
|
|
|
{
|
|
|
- StringListRaii list(m_pool);
|
|
|
+ ImporterStringList list(m_pool);
|
|
|
|
|
|
list.pushBack(mesh.name);
|
|
|
|
|
|
@@ -1180,52 +1181,52 @@ StringRaii GltfImporter::computeModelResourceFilename(const cgltf_mesh& mesh) co
|
|
|
list.pushBackSprintf("_%s", mtlName);
|
|
|
}
|
|
|
|
|
|
- StringRaii joined(m_pool);
|
|
|
+ ImporterString joined(m_pool);
|
|
|
list.join("", joined);
|
|
|
|
|
|
const U64 hash = computeHash(joined.getBegin(), joined.getLength());
|
|
|
|
|
|
- StringRaii out(m_pool);
|
|
|
+ ImporterString out(m_pool);
|
|
|
out.sprintf("%.64s_%" PRIx64 ".ankimdl", joined.cstr(), hash); // Limit the filename size
|
|
|
|
|
|
return out;
|
|
|
}
|
|
|
|
|
|
-StringRaii GltfImporter::computeMeshResourceFilename(const cgltf_mesh& mesh) const
|
|
|
+ImporterString GltfImporter::computeMeshResourceFilename(const cgltf_mesh& mesh) const
|
|
|
{
|
|
|
const U64 hash = computeHash(mesh.name, strlen(mesh.name));
|
|
|
- StringRaii out(m_pool);
|
|
|
+ ImporterString out(m_pool);
|
|
|
out.sprintf("%.64s_%" PRIx64 ".ankimesh", mesh.name, hash); // Limit the filename size
|
|
|
return out;
|
|
|
}
|
|
|
|
|
|
-StringRaii GltfImporter::computeMaterialResourceFilename(const cgltf_material& mtl) const
|
|
|
+ImporterString GltfImporter::computeMaterialResourceFilename(const cgltf_material& mtl) const
|
|
|
{
|
|
|
const U64 hash = computeHash(mtl.name, strlen(mtl.name));
|
|
|
|
|
|
- StringRaii out(m_pool);
|
|
|
+ ImporterString out(m_pool);
|
|
|
|
|
|
out.sprintf("%.64s_%" PRIx64 ".ankimtl", mtl.name, hash); // Limit the filename size
|
|
|
|
|
|
return out;
|
|
|
}
|
|
|
|
|
|
-StringRaii GltfImporter::computeAnimationResourceFilename(const cgltf_animation& anim) const
|
|
|
+ImporterString GltfImporter::computeAnimationResourceFilename(const cgltf_animation& anim) const
|
|
|
{
|
|
|
const U64 hash = computeHash(anim.name, strlen(anim.name));
|
|
|
|
|
|
- StringRaii out(m_pool);
|
|
|
+ ImporterString out(m_pool);
|
|
|
|
|
|
out.sprintf("%.64s_%" PRIx64 ".ankianim", anim.name, hash); // Limit the filename size
|
|
|
|
|
|
return out;
|
|
|
}
|
|
|
|
|
|
-StringRaii GltfImporter::computeSkeletonResourceFilename(const cgltf_skin& skin) const
|
|
|
+ImporterString GltfImporter::computeSkeletonResourceFilename(const cgltf_skin& skin) const
|
|
|
{
|
|
|
const U64 hash = computeHash(skin.name, strlen(skin.name));
|
|
|
|
|
|
- StringRaii out(m_pool);
|
|
|
+ ImporterString out(m_pool);
|
|
|
|
|
|
out.sprintf("%.64s_%" PRIx64 ".ankiskel", skin.name, hash); // Limit the filename size
|
|
|
|