|
|
@@ -229,7 +229,7 @@ Error GltfImporter::writeAll()
|
|
|
StringAuto sceneFname(m_alloc);
|
|
|
sceneFname.sprintf("%sScene.lua", m_outDir.cstr());
|
|
|
ANKI_CHECK(m_sceneFile.open(sceneFname.toCString(), FileOpenFlag::WRITE));
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("-- Generated by: %s\n", m_comment.cstr()));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("-- Generated by: %s\n", m_comment.cstr()));
|
|
|
ANKI_CHECK(m_sceneFile.writeText("local scene = getSceneGraph()\nlocal events = getEventManager()\n"));
|
|
|
|
|
|
// Nodes
|
|
|
@@ -458,12 +458,12 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
|
|
|
gpuParticles = true;
|
|
|
}
|
|
|
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("\nnode = scene:new%sParticleEmitterNode(\"%s\")\n",
|
|
|
- (gpuParticles) ? "Gpu" : "", getNodeName(node).cstr()));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:new%sParticleEmitterNode(\"%s\")\n",
|
|
|
+ (gpuParticles) ? "Gpu" : "", getNodeName(node).cstr()));
|
|
|
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("comp = node:getSceneNodeBase():get%sParticleEmitterComponent()\n",
|
|
|
- (gpuParticles) ? "Gpu" : ""));
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("comp:loadParticleEmitterResource(\"%s\")\n", fname.cstr()));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("comp = node:getSceneNodeBase():get%sParticleEmitterComponent()\n",
|
|
|
+ (gpuParticles) ? "Gpu" : ""));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("comp:loadParticleEmitterResource(\"%s\")\n", fname.cstr()));
|
|
|
|
|
|
Transform localTrf;
|
|
|
ANKI_CHECK(getNodeTransform(node, localTrf));
|
|
|
@@ -474,7 +474,7 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
|
|
|
{
|
|
|
// Atmosphere
|
|
|
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("\nnode = scene:newSkyboxNode(\"%s\")\n", getNodeName(node).cstr()));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newSkyboxNode(\"%s\")\n", getNodeName(node).cstr()));
|
|
|
ANKI_CHECK(m_sceneFile.writeText("comp = node:getSceneNodeBase():getSkyboxComponent()\n"));
|
|
|
|
|
|
if((it = extras.find("skybox_solid_color")) != extras.getEnd())
|
|
|
@@ -502,40 +502,40 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
|
|
|
solidColor[count++] = f;
|
|
|
}
|
|
|
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("comp:setSolidColor(Vec3.new(%f, %f, %f))\n", solidColor.x(),
|
|
|
- solidColor.y(), solidColor.z()));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("comp:setSolidColor(Vec3.new(%f, %f, %f))\n", solidColor.x(),
|
|
|
+ solidColor.y(), solidColor.z()));
|
|
|
}
|
|
|
else if((it = extras.find("skybox_image")) != extras.getEnd())
|
|
|
{
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("comp:setImage(\"%s\")\n", it->cstr()));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("comp:setImage(\"%s\")\n", it->cstr()));
|
|
|
}
|
|
|
|
|
|
if((it = extras.find("fog_min_density")) != extras.getEnd())
|
|
|
{
|
|
|
F32 val;
|
|
|
ANKI_CHECK(it->toNumber(val));
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("comp:setMinFogDensity(\"%f\")\n", val));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("comp:setMinFogDensity(\"%f\")\n", val));
|
|
|
}
|
|
|
|
|
|
if((it = extras.find("fog_max_density")) != extras.getEnd())
|
|
|
{
|
|
|
F32 val;
|
|
|
ANKI_CHECK(it->toNumber(val));
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("comp:setMaxFogDensity(\"%f\")\n", val));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("comp:setMaxFogDensity(\"%f\")\n", val));
|
|
|
}
|
|
|
|
|
|
if((it = extras.find("fog_height_of_min_density")) != extras.getEnd())
|
|
|
{
|
|
|
F32 val;
|
|
|
ANKI_CHECK(it->toNumber(val));
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("comp:setHeightOfMinFogDensity(\"%f\")\n", val));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("comp:setHeightOfMinFogDensity(\"%f\")\n", val));
|
|
|
}
|
|
|
|
|
|
if((it = extras.find("fog_height_of_max_density")) != extras.getEnd())
|
|
|
{
|
|
|
F32 val;
|
|
|
ANKI_CHECK(it->toNumber(val));
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("comp:setHeightOfMaxFogDensity(\"%f\")\n", val));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("comp:setHeightOfMaxFogDensity(\"%f\")\n", val));
|
|
|
}
|
|
|
|
|
|
Transform localTrf;
|
|
|
@@ -545,11 +545,11 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
|
|
|
else if((it = extras.find("collision")) != extras.getEnd() && (*it == "true" || *it == "1"))
|
|
|
{
|
|
|
ANKI_CHECK(
|
|
|
- m_sceneFile.writeText("\nnode = scene:newStaticCollisionNode(\"%s\")\n", getNodeName(node).cstr()));
|
|
|
+ m_sceneFile.writeTextf("\nnode = scene:newStaticCollisionNode(\"%s\")\n", getNodeName(node).cstr()));
|
|
|
|
|
|
ANKI_CHECK(m_sceneFile.writeText("comp = scene:getSceneNodeBase():getBodyComponent()\n"));
|
|
|
const StringAuto meshFname = computeMeshResourceFilename(*node.mesh);
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("comp:loadMeshResource(\"%s%s\")\n", m_rpath.cstr(), meshFname.cstr()));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("comp:loadMeshResource(\"%s%s\")\n", m_rpath.cstr(), meshFname.cstr()));
|
|
|
|
|
|
Transform localTrf;
|
|
|
ANKI_CHECK(getNodeTransform(node, localTrf));
|
|
|
@@ -565,11 +565,11 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
|
|
|
const Vec3 boxSize = scale * 2.0f;
|
|
|
|
|
|
ANKI_CHECK(
|
|
|
- m_sceneFile.writeText("\nnode = scene:newReflectionProbeNode(\"%s\")\n", getNodeName(node).cstr()));
|
|
|
+ m_sceneFile.writeTextf("\nnode = scene:newReflectionProbeNode(\"%s\")\n", getNodeName(node).cstr()));
|
|
|
|
|
|
ANKI_CHECK(m_sceneFile.writeText("comp = node:getSceneNodeBase():getReflectionProbeComponent()\n"));
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("comp:setBoxVolumeSize(Vec3.new(%f, %f, %f))\n", boxSize.x(), boxSize.y(),
|
|
|
- boxSize.z()));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("comp:setBoxVolumeSize(Vec3.new(%f, %f, %f))\n", boxSize.x(), boxSize.y(),
|
|
|
+ boxSize.z()));
|
|
|
|
|
|
const Transform localTrf = Transform(tsl.xyz0(), Mat3x4(Vec3(0.0f), rot), 1.0f);
|
|
|
ANKI_CHECK(writeTransform(parentTrf.combineTransformations(localTrf)));
|
|
|
@@ -595,20 +595,20 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
|
|
|
ANKI_CHECK(it->toNumber(cellSize));
|
|
|
}
|
|
|
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("\nnode = scene:newGlobalIlluminationProbeNode(\"%s\")\n",
|
|
|
- getNodeName(node).cstr()));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newGlobalIlluminationProbeNode(\"%s\")\n",
|
|
|
+ getNodeName(node).cstr()));
|
|
|
ANKI_CHECK(m_sceneFile.writeText("comp = node:getSceneNodeBase():getGlobalIlluminationProbeComponent()\n"));
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("comp:setBoxVolumeSize(Vec3.new(%f, %f, %f))\n", boxSize.x(), boxSize.y(),
|
|
|
- boxSize.z()));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("comp:setBoxVolumeSize(Vec3.new(%f, %f, %f))\n", boxSize.x(), boxSize.y(),
|
|
|
+ boxSize.z()));
|
|
|
|
|
|
if(fadeDistance > 0.0f)
|
|
|
{
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("comp:setFadeDistance(%f)\n", fadeDistance));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("comp:setFadeDistance(%f)\n", fadeDistance));
|
|
|
}
|
|
|
|
|
|
if(cellSize > 0.0f)
|
|
|
{
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("comp:setCellSize(%f)\n", cellSize));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("comp:setCellSize(%f)\n", cellSize));
|
|
|
}
|
|
|
|
|
|
const Transform localTrf = Transform(tsl.xyz0(), Mat3x4(Vec3(0.0f), rot), 1.0f);
|
|
|
@@ -652,17 +652,17 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
|
|
|
ANKI_CHECK(it->toNumber(specularRougnessMetallicFactor));
|
|
|
}
|
|
|
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("\nnode = scene:newDecalNode(\"%s\")\n", getNodeName(node).cstr()));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newDecalNode(\"%s\")\n", getNodeName(node).cstr()));
|
|
|
ANKI_CHECK(m_sceneFile.writeText("comp = node:getSceneNodeBase():getDecalComponent()\n"));
|
|
|
if(diffuseAtlas)
|
|
|
{
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("comp:setDiffuseDecal(\"%s\", \"%s\", %f)\n", diffuseAtlas.cstr(),
|
|
|
- diffuseSubtexture.cstr(), diffuseFactor));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("comp:setDiffuseDecal(\"%s\", \"%s\", %f)\n", diffuseAtlas.cstr(),
|
|
|
+ diffuseSubtexture.cstr(), diffuseFactor));
|
|
|
}
|
|
|
|
|
|
if(specularRougnessMetallicAtlas)
|
|
|
{
|
|
|
- ANKI_CHECK(m_sceneFile.writeText(
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf(
|
|
|
"comp:setSpecularRoughnessDecal(\"%s\", \"%s\", %f)\n", specularRougnessMetallicAtlas.cstr(),
|
|
|
specularRougnessMetallicSubtexture.cstr(), specularRougnessMetallicFactor));
|
|
|
}
|
|
|
@@ -771,15 +771,15 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
|
|
|
|
|
|
if(selfCollision)
|
|
|
{
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("node2 = scene:newStaticCollisionNode(\"%s_cl\")\n",
|
|
|
- getNodeName(node).cstr()));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("node2 = scene:newStaticCollisionNode(\"%s_cl\")\n",
|
|
|
+ getNodeName(node).cstr()));
|
|
|
|
|
|
ANKI_CHECK(m_sceneFile.writeText("comp = node2:getSceneNodeBase():getBodyComponent()\n"));
|
|
|
|
|
|
const StringAuto meshFname = computeMeshResourceFilename(*node.mesh, maxLod);
|
|
|
|
|
|
ANKI_CHECK(
|
|
|
- m_sceneFile.writeText("comp:loadMeshResource(\"%s%s\")\n", m_rpath.cstr(), meshFname.cstr()));
|
|
|
+ m_sceneFile.writeTextf("comp:loadMeshResource(\"%s%s\")\n", m_rpath.cstr(), meshFname.cstr()));
|
|
|
ANKI_CHECK(m_sceneFile.writeText("comp:setWorldTransform(trf)\n"));
|
|
|
}
|
|
|
}
|
|
|
@@ -810,18 +810,18 @@ Error GltfImporter::visitNode(const cgltf_node& node, const Transform& parentTrf
|
|
|
Error GltfImporter::writeTransform(const Transform& trf)
|
|
|
{
|
|
|
ANKI_CHECK(m_sceneFile.writeText("trf = Transform.new()\n"));
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("trf:setOrigin(Vec4.new(%f, %f, %f, 0))\n", trf.getOrigin().x(),
|
|
|
- trf.getOrigin().y(), trf.getOrigin().z()));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("trf:setOrigin(Vec4.new(%f, %f, %f, 0))\n", trf.getOrigin().x(),
|
|
|
+ trf.getOrigin().y(), trf.getOrigin().z()));
|
|
|
|
|
|
ANKI_CHECK(m_sceneFile.writeText("rot = Mat3x4.new()\n"));
|
|
|
ANKI_CHECK(m_sceneFile.writeText("rot:setAll("));
|
|
|
for(U i = 0; i < 12; i++)
|
|
|
{
|
|
|
- ANKI_CHECK(m_sceneFile.writeText((i != 11) ? "%f, " : "%f)\n", trf.getRotation()[i]));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf((i != 11) ? "%f, " : "%f)\n", trf.getRotation()[i]));
|
|
|
}
|
|
|
ANKI_CHECK(m_sceneFile.writeText("trf:setRotation(rot)\n"));
|
|
|
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("trf:setScale(%f)\n", trf.getScale()));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("trf:setScale(%f)\n", trf.getScale()));
|
|
|
|
|
|
ANKI_CHECK(m_sceneFile.writeText("node:getSceneNodeBase():getMoveComponent():setLocalTransform(trf)\n"));
|
|
|
|
|
|
@@ -852,24 +852,24 @@ Error GltfImporter::writeModel(const cgltf_mesh& mesh)
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- ANKI_CHECK(file.writeText("\t\t<modelPatch subMeshIndex=\"%u\">\n", primIdx));
|
|
|
+ ANKI_CHECK(file.writeTextf("\t\t<modelPatch subMeshIndex=\"%u\">\n", primIdx));
|
|
|
}
|
|
|
|
|
|
{
|
|
|
const StringAuto meshFname = computeMeshResourceFilename(mesh);
|
|
|
- ANKI_CHECK(file.writeText("\t\t\t<mesh>%s%s</mesh>\n", m_rpath.cstr(), meshFname.cstr()));
|
|
|
+ ANKI_CHECK(file.writeTextf("\t\t\t<mesh>%s%s</mesh>\n", m_rpath.cstr(), meshFname.cstr()));
|
|
|
}
|
|
|
|
|
|
if(m_lodCount > 1 && !skipMeshLod(mesh, 1))
|
|
|
{
|
|
|
const StringAuto meshFname = computeMeshResourceFilename(mesh, 1);
|
|
|
- ANKI_CHECK(file.writeText("\t\t\t<mesh1>%s%s</mesh1>\n", m_rpath.cstr(), meshFname.cstr()));
|
|
|
+ ANKI_CHECK(file.writeTextf("\t\t\t<mesh1>%s%s</mesh1>\n", m_rpath.cstr(), meshFname.cstr()));
|
|
|
}
|
|
|
|
|
|
if(m_lodCount > 2 && !skipMeshLod(mesh, 2))
|
|
|
{
|
|
|
const StringAuto meshFname = computeMeshResourceFilename(mesh, 2);
|
|
|
- ANKI_CHECK(file.writeText("\t\t\t<mesh2>%s%s</mesh2>\n", m_rpath.cstr(), meshFname.cstr()));
|
|
|
+ ANKI_CHECK(file.writeTextf("\t\t\t<mesh2>%s%s</mesh2>\n", m_rpath.cstr(), meshFname.cstr()));
|
|
|
}
|
|
|
|
|
|
HashMapAuto<CString, StringAuto> materialExtras(m_alloc);
|
|
|
@@ -877,12 +877,12 @@ Error GltfImporter::writeModel(const cgltf_mesh& mesh)
|
|
|
auto mtlOverride = materialExtras.find("material_override");
|
|
|
if(mtlOverride != materialExtras.getEnd())
|
|
|
{
|
|
|
- ANKI_CHECK(file.writeText("\t\t\t<material>%s</material>\n", mtlOverride->cstr()));
|
|
|
+ ANKI_CHECK(file.writeTextf("\t\t\t<material>%s</material>\n", mtlOverride->cstr()));
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
const StringAuto mtlFname = computeMaterialResourceFilename(*mesh.primitives[primIdx].material);
|
|
|
- ANKI_CHECK(file.writeText("\t\t\t<material>%s%s</material>\n", m_rpath.cstr(), mtlFname.cstr()));
|
|
|
+ ANKI_CHECK(file.writeTextf("\t\t\t<material>%s%s</material>\n", m_rpath.cstr(), mtlFname.cstr()));
|
|
|
}
|
|
|
|
|
|
ANKI_CHECK(file.writeText("\t\t</modelPatch>\n"));
|
|
|
@@ -1150,12 +1150,12 @@ Error GltfImporter::writeAnimation(const cgltf_animation& anim)
|
|
|
File file;
|
|
|
ANKI_CHECK(file.open(fname.toCString(), FileOpenFlag::WRITE));
|
|
|
|
|
|
- ANKI_CHECK(file.writeText("%s\n<animation>\n", XML_HEADER));
|
|
|
+ ANKI_CHECK(file.writeTextf("%s\n<animation>\n", XML_HEADER));
|
|
|
ANKI_CHECK(file.writeText("\t<channels>\n"));
|
|
|
|
|
|
for(const GltfAnimChannel& channel : tempChannels)
|
|
|
{
|
|
|
- ANKI_CHECK(file.writeText("\t\t<channel name=\"%s\">\n", channel.m_name.cstr()));
|
|
|
+ ANKI_CHECK(file.writeTextf("\t\t<channel name=\"%s\">\n", channel.m_name.cstr()));
|
|
|
|
|
|
// Positions
|
|
|
if(channel.m_positions.getSize())
|
|
|
@@ -1163,8 +1163,8 @@ Error GltfImporter::writeAnimation(const cgltf_animation& anim)
|
|
|
ANKI_CHECK(file.writeText("\t\t\t<positionKeys>\n"));
|
|
|
for(const GltfAnimKey<Vec3>& key : channel.m_positions)
|
|
|
{
|
|
|
- ANKI_CHECK(file.writeText("\t\t\t\t<key time=\"%f\">%f %f %f</key>\n", key.m_time, key.m_value.x(),
|
|
|
- key.m_value.y(), key.m_value.z()));
|
|
|
+ ANKI_CHECK(file.writeTextf("\t\t\t\t<key time=\"%f\">%f %f %f</key>\n", key.m_time, key.m_value.x(),
|
|
|
+ key.m_value.y(), key.m_value.z()));
|
|
|
}
|
|
|
ANKI_CHECK(file.writeText("\t\t\t</positionKeys>\n"));
|
|
|
}
|
|
|
@@ -1175,8 +1175,8 @@ Error GltfImporter::writeAnimation(const cgltf_animation& anim)
|
|
|
ANKI_CHECK(file.writeText("\t\t\t<rotationKeys>\n"));
|
|
|
for(const GltfAnimKey<Quat>& key : channel.m_rotations)
|
|
|
{
|
|
|
- ANKI_CHECK(file.writeText("\t\t\t\t<key time=\"%f\">%f %f %f %f</key>\n", key.m_time, key.m_value.x(),
|
|
|
- key.m_value.y(), key.m_value.z(), key.m_value.w()));
|
|
|
+ ANKI_CHECK(file.writeTextf("\t\t\t\t<key time=\"%f\">%f %f %f %f</key>\n", key.m_time, key.m_value.x(),
|
|
|
+ key.m_value.y(), key.m_value.z(), key.m_value.w()));
|
|
|
}
|
|
|
ANKI_CHECK(file.writeText("\t\t\t</rotationKeys>\n"));
|
|
|
}
|
|
|
@@ -1187,7 +1187,7 @@ Error GltfImporter::writeAnimation(const cgltf_animation& anim)
|
|
|
ANKI_CHECK(file.writeText("\t\t\t<scaleKeys>\n"));
|
|
|
for(const GltfAnimKey<F32>& key : channel.m_scales)
|
|
|
{
|
|
|
- ANKI_CHECK(file.writeText("\t\t\t\t<key time=\"%f\">%f</key>\n", key.m_time, key.m_value));
|
|
|
+ ANKI_CHECK(file.writeTextf("\t\t\t\t<key time=\"%f\">%f</key>\n", key.m_time, key.m_value));
|
|
|
}
|
|
|
ANKI_CHECK(file.writeText("\t\t\t</scaleKeys>\n"));
|
|
|
}
|
|
|
@@ -1220,8 +1220,8 @@ Error GltfImporter::writeSkeleton(const cgltf_skin& skin)
|
|
|
File file;
|
|
|
ANKI_CHECK(file.open(fname.toCString(), FileOpenFlag::WRITE));
|
|
|
|
|
|
- ANKI_CHECK(file.writeText("%s\n<skeleton>\n", XML_HEADER));
|
|
|
- ANKI_CHECK(file.writeText("\t<bones>\n", XML_HEADER));
|
|
|
+ ANKI_CHECK(file.writeTextf("%s\n<skeleton>\n", XML_HEADER));
|
|
|
+ ANKI_CHECK(file.writeTextf("\t<bones>\n"));
|
|
|
|
|
|
for(U32 i = 0; i < skin.joints_count; ++i)
|
|
|
{
|
|
|
@@ -1230,10 +1230,10 @@ Error GltfImporter::writeSkeleton(const cgltf_skin& skin)
|
|
|
StringAuto parent(m_alloc);
|
|
|
|
|
|
// Name & parent
|
|
|
- ANKI_CHECK(file.writeText("\t\t<bone name=\"%s\" ", getNodeName(boneNode).cstr()));
|
|
|
+ ANKI_CHECK(file.writeTextf("\t\t<bone name=\"%s\" ", getNodeName(boneNode).cstr()));
|
|
|
if(boneNode.parent && getNodeName(*boneNode.parent) != skin.name)
|
|
|
{
|
|
|
- ANKI_CHECK(file.writeText("parent=\"%s\" ", getNodeName(*boneNode.parent).cstr()));
|
|
|
+ ANKI_CHECK(file.writeTextf("parent=\"%s\" ", getNodeName(*boneNode.parent).cstr()));
|
|
|
}
|
|
|
|
|
|
// Bone transform
|
|
|
@@ -1242,7 +1242,7 @@ Error GltfImporter::writeSkeleton(const cgltf_skin& skin)
|
|
|
btrf.transpose();
|
|
|
for(U32 j = 0; j < 16; j++)
|
|
|
{
|
|
|
- ANKI_CHECK(file.writeText("%f ", btrf[j]));
|
|
|
+ ANKI_CHECK(file.writeTextf("%f ", btrf[j]));
|
|
|
}
|
|
|
ANKI_CHECK(file.writeText("\" "));
|
|
|
|
|
|
@@ -1253,7 +1253,7 @@ Error GltfImporter::writeSkeleton(const cgltf_skin& skin)
|
|
|
ANKI_CHECK(file.writeText("transform=\""));
|
|
|
for(U j = 0; j < 16; j++)
|
|
|
{
|
|
|
- ANKI_CHECK(file.writeText("%f ", mat[j]));
|
|
|
+ ANKI_CHECK(file.writeTextf("%f ", mat[j]));
|
|
|
}
|
|
|
ANKI_CHECK(file.writeText("\" "));
|
|
|
|
|
|
@@ -1292,14 +1292,14 @@ Error GltfImporter::writeLight(const cgltf_node& node, const HashMapAuto<CString
|
|
|
return Error::USER_DATA;
|
|
|
}
|
|
|
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("\nnode = scene:new%sLightNode(\"%s\")\n", lightTypeStr.cstr(), nodeName.cstr()));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:new%sLightNode(\"%s\")\n", lightTypeStr.cstr(), nodeName.cstr()));
|
|
|
ANKI_CHECK(m_sceneFile.writeText("lcomp = node:getSceneNodeBase():getLightComponent()\n"));
|
|
|
|
|
|
Vec3 color(light.color[0], light.color[1], light.color[2]);
|
|
|
color *= light.intensity;
|
|
|
color *= m_lightIntensityScale;
|
|
|
ANKI_CHECK(
|
|
|
- m_sceneFile.writeText("lcomp:setDiffuseColor(Vec4.new(%f, %f, %f, 1))\n", color.x(), color.y(), color.z()));
|
|
|
+ m_sceneFile.writeTextf("lcomp:setDiffuseColor(Vec4.new(%f, %f, %f, 1))\n", color.x(), color.y(), color.z()));
|
|
|
|
|
|
auto shadow = extras.find("shadow");
|
|
|
if(shadow != extras.getEnd())
|
|
|
@@ -1316,16 +1316,16 @@ Error GltfImporter::writeLight(const cgltf_node& node, const HashMapAuto<CString
|
|
|
|
|
|
if(light.type == cgltf_light_type_point)
|
|
|
{
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("lcomp:setRadius(%f)\n",
|
|
|
- (light.range > 0.0f) ? light.range : computeLightRadius(color)));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("lcomp:setRadius(%f)\n",
|
|
|
+ (light.range > 0.0f) ? light.range : computeLightRadius(color)));
|
|
|
}
|
|
|
else if(light.type == cgltf_light_type_spot)
|
|
|
{
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("lcomp:setDistance(%f)\n",
|
|
|
- (light.range > 0.0f) ? light.range : computeLightRadius(color)));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("lcomp:setDistance(%f)\n",
|
|
|
+ (light.range > 0.0f) ? light.range : computeLightRadius(color)));
|
|
|
|
|
|
const F32 outer = light.spot_outer_cone_angle * 2.0f;
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("lcomp:setOuterAngle(%f)\n", outer));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("lcomp:setOuterAngle(%f)\n", outer));
|
|
|
|
|
|
auto angStr = extras.find("inner_cone_angle_factor");
|
|
|
F32 inner;
|
|
|
@@ -1345,14 +1345,14 @@ Error GltfImporter::writeLight(const cgltf_node& node, const HashMapAuto<CString
|
|
|
inner = 0.75f * outer;
|
|
|
}
|
|
|
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("lcomp:setInnerAngle(%f)\n", inner));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("lcomp:setInnerAngle(%f)\n", inner));
|
|
|
}
|
|
|
|
|
|
auto lensFlaresFname = extras.find("lens_flare");
|
|
|
if(lensFlaresFname != extras.getEnd())
|
|
|
{
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("lfcomp = node:getSceneNodeBase():getLensFlareComponent()\n"));
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("lfcomp:loadImageResource(\"%s\")\n", lensFlaresFname->cstr()));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("lfcomp = node:getSceneNodeBase():getLensFlareComponent()\n"));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("lfcomp:loadImageResource(\"%s\")\n", lensFlaresFname->cstr()));
|
|
|
|
|
|
auto lsSpriteSize = extras.find("lens_flare_first_sprite_size");
|
|
|
auto lsColor = extras.find("lens_flare_color");
|
|
|
@@ -1363,7 +1363,7 @@ Error GltfImporter::writeLight(const cgltf_node& node, const HashMapAuto<CString
|
|
|
const U32 count = 2;
|
|
|
ANKI_CHECK(parseArrayOfNumbers(lsSpriteSize->toCString(), numbers, &count));
|
|
|
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("lfcomp:setFirstFlareSize(Vec2.new(%f, %f))\n", numbers[0], numbers[1]));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("lfcomp:setFirstFlareSize(Vec2.new(%f, %f))\n", numbers[0], numbers[1]));
|
|
|
}
|
|
|
|
|
|
if(lsColor != extras.getEnd())
|
|
|
@@ -1372,8 +1372,8 @@ Error GltfImporter::writeLight(const cgltf_node& node, const HashMapAuto<CString
|
|
|
const U32 count = 4;
|
|
|
ANKI_CHECK(parseArrayOfNumbers(lsColor->toCString(), numbers, &count));
|
|
|
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("lfcomp:setColorMultiplier(Vec4.new(%f, %f, %f, %f))\n", numbers[0],
|
|
|
- numbers[1], numbers[2], numbers[3]));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("lfcomp:setColorMultiplier(Vec4.new(%f, %f, %f, %f))\n", numbers[0],
|
|
|
+ numbers[1], numbers[2], numbers[3]));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -1388,8 +1388,8 @@ Error GltfImporter::writeLight(const cgltf_node& node, const HashMapAuto<CString
|
|
|
DynamicArrayAuto<F64> numbers(m_alloc);
|
|
|
const U32 count = 4;
|
|
|
ANKI_CHECK(parseArrayOfNumbers(lightEventIntensity->toCString(), numbers, &count));
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("event:setIntensityMultiplier(Vec4.new(%f, %f, %f, %f))\n", numbers[0],
|
|
|
- numbers[1], numbers[2], numbers[3]));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("event:setIntensityMultiplier(Vec4.new(%f, %f, %f, %f))\n", numbers[0],
|
|
|
+ numbers[1], numbers[2], numbers[3]));
|
|
|
}
|
|
|
|
|
|
if(lightEventFrequency != extras.getEnd())
|
|
|
@@ -1397,7 +1397,7 @@ Error GltfImporter::writeLight(const cgltf_node& node, const HashMapAuto<CString
|
|
|
DynamicArrayAuto<F64> numbers(m_alloc);
|
|
|
const U32 count = 2;
|
|
|
ANKI_CHECK(parseArrayOfNumbers(lightEventFrequency->toCString(), numbers, &count));
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("event:setFrequency(%f, %f)\n", numbers[0], numbers[1]));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("event:setFrequency(%f, %f)\n", numbers[0], numbers[1]));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -1416,14 +1416,14 @@ Error GltfImporter::writeCamera(const cgltf_node& node,
|
|
|
const cgltf_camera_perspective& cam = node.camera->data.perspective;
|
|
|
ANKI_IMPORTER_LOGV("Importing camera %s", getNodeName(node).cstr());
|
|
|
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("\nnode = scene:newPerspectiveCameraNode(\"%s\")\n", getNodeName(node).cstr()));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newPerspectiveCameraNode(\"%s\")\n", getNodeName(node).cstr()));
|
|
|
ANKI_CHECK(m_sceneFile.writeText("scene:setActiveCameraNode(node:getSceneNodeBase())\n"));
|
|
|
ANKI_CHECK(m_sceneFile.writeText("frustumc = node:getSceneNodeBase():getFrustumComponent()\n"));
|
|
|
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("frustumc:setPerspective(%f, %f, getMainRenderer():getAspectRatio() * %f, %f)\n",
|
|
|
- cam.znear, cam.zfar, cam.yfov, cam.yfov));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("frustumc:setPerspective(%f, %f, getMainRenderer():getAspectRatio() * %f, %f)\n",
|
|
|
+ cam.znear, cam.zfar, cam.yfov, cam.yfov));
|
|
|
ANKI_CHECK(m_sceneFile.writeText("frustumc:setShadowCascadesDistancePower(1.5)\n"));
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("frustumc:setEffectiveShadowDistance(%f)\n", min(cam.zfar, 100.0f)));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("frustumc:setEffectiveShadowDistance(%f)\n", min(cam.zfar, 100.0f)));
|
|
|
|
|
|
return Error::NONE;
|
|
|
}
|
|
|
@@ -1437,14 +1437,14 @@ Error GltfImporter::writeModelNode(const cgltf_node& node, const HashMapAuto<CSt
|
|
|
|
|
|
const StringAuto modelFname = computeModelResourceFilename(*node.mesh);
|
|
|
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("\nnode = scene:newModelNode(\"%s\")\n", getNodeName(node).cstr()));
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("node:getSceneNodeBase():getModelComponent():loadModelResource(\"%s%s\")\n",
|
|
|
- m_rpath.cstr(), modelFname.cstr()));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("\nnode = scene:newModelNode(\"%s\")\n", getNodeName(node).cstr()));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("node:getSceneNodeBase():getModelComponent():loadModelResource(\"%s%s\")\n",
|
|
|
+ m_rpath.cstr(), modelFname.cstr()));
|
|
|
|
|
|
if(node.skin)
|
|
|
{
|
|
|
- ANKI_CHECK(m_sceneFile.writeText("node:getSceneNodeBase():getSkinComponent():loadSkeletonResource(\"%s%s\")\n",
|
|
|
- m_rpath.cstr(), computeSkeletonResourceFilename(*node.skin).cstr()));
|
|
|
+ ANKI_CHECK(m_sceneFile.writeTextf("node:getSceneNodeBase():getSkinComponent():loadSkeletonResource(\"%s%s\")\n",
|
|
|
+ m_rpath.cstr(), computeSkeletonResourceFilename(*node.skin).cstr()));
|
|
|
}
|
|
|
|
|
|
return Error::NONE;
|