diff --git a/openVulkanoCpp/Scene/MeshWriter.cpp b/openVulkanoCpp/Scene/MeshWriter.cpp index 03329aa..7ee4ab5 100644 --- a/openVulkanoCpp/Scene/MeshWriter.cpp +++ b/openVulkanoCpp/Scene/MeshWriter.cpp @@ -22,7 +22,7 @@ namespace OpenVulkano::Scene { std::ofstream file(filePath); - if (!file.is_open()) + if (!file.is_open()) [[unlikely]] throw std::runtime_error("Failed to open file '" + filePath + "' for writing!"); WriteObjContents(geometry, "", file); @@ -32,7 +32,7 @@ namespace OpenVulkano::Scene void MeshWriter::WriteAsUSD(Geometry* geometry, const std::string& filePath) { std::ofstream file(filePath); - if (!file.is_open()) + if (!file.is_open()) [[unlikely]] throw std::runtime_error("Failed to open file '" + filePath + "' for writing!"); WriteUsdContents(file, geometry); file.close(); @@ -45,20 +45,19 @@ namespace OpenVulkano::Scene { std::stringstream objContents; WriteObjContents(geometry, DEFAULT_OBJ_MATERIAL_NAME, objContents); - auto objContentsStr = objContents.str(); - auto objDesc = OpenVulkano::FileDescription::MakeDescriptionForFile("model.obj", objContentsStr.size()); + std::string objContentsStr = objContents.str(); + FileDescription objDesc = FileDescription::MakeDescriptionForFile("model.obj", objContentsStr.size()); zipWriter.AddFile(objDesc, objContentsStr.data()); } { - auto mtlContentsStr = DEFAULT_OBJ_MATERIAL_CONTENTS; - auto mtlDesc = OpenVulkano::FileDescription::MakeDescriptionForFile("material.mtl", mtlContentsStr.size()); - zipWriter.AddFile(mtlDesc, mtlContentsStr.data()); + FileDescription mtlDesc = FileDescription::MakeDescriptionForFile("material.mtl", DEFAULT_OBJ_MATERIAL_CONTENTS.size()); + zipWriter.AddFile(mtlDesc, DEFAULT_OBJ_MATERIAL_CONTENTS.data()); } if (!texturePath.empty() && std::filesystem::exists(texturePath)) { - auto textureFile = MemMappedFile(texturePath); - auto texDesc = OpenVulkano::FileDescription::MakeDescriptionForFile("texture.png", textureFile.Size()); + MemMappedFile textureFile(texturePath); + FileDescription texDesc = FileDescription::MakeDescriptionForFile("texture.png", textureFile.Size()); zipWriter.AddFile(texDesc, textureFile.Data()); } } @@ -70,15 +69,15 @@ namespace OpenVulkano::Scene { std::stringstream usdFile; WriteUsdContents(usdFile, geometry); - auto usdFileStr = usdFile.str(); - auto usdDesc = OpenVulkano::FileDescription::MakeDescriptionForFile("geometry.usda", usdFileStr.size()); + std::string usdFileStr = usdFile.str(); + FileDescription usdDesc = FileDescription::MakeDescriptionForFile("geometry.usda", usdFileStr.size()); zipWriter.AddFile(usdDesc, usdFileStr.data()); } if (!texturePath.empty() && std::filesystem::exists(texturePath)) { - auto textureFile = MemMappedFile(texturePath); - auto texDesc = OpenVulkano::FileDescription::MakeDescriptionForFile("texture.png", textureFile.Size()); + MemMappedFile textureFile(texturePath); + FileDescription texDesc = FileDescription::MakeDescriptionForFile("texture.png", textureFile.Size()); zipWriter.AddFile(texDesc, textureFile.Data()); } } diff --git a/openVulkanoCpp/Scene/ObjEncoder.hpp b/openVulkanoCpp/Scene/ObjEncoder.hpp index 68fc959..f69eced 100644 --- a/openVulkanoCpp/Scene/ObjEncoder.hpp +++ b/openVulkanoCpp/Scene/ObjEncoder.hpp @@ -29,31 +29,41 @@ map_Kd texture.png if (materialName.size() != 0) { - objContent << "mtllib material.mtl\n"; - objContent << "usemtl " << materialName << "\n"; + std::string_view content = "mtllib material.mtl\n"; + objContent.write(content.data(), content.size()); + + content = "usemtl "; + objContent.write(content.data(), content.size()); + + objContent.write(materialName.data(), materialName.size()); + objContent.write("\n", 1); } for (int i = 0; i < geometry->vertexCount; ++i) { const auto& v = geometry->vertices[i]; - objContent << fmt::format("v {} {} {}\n", v.position.x, v.position.y, v.position.z); + const std::string content = fmt::format("v {} {} {}\n", v.position.x, v.position.y, v.position.z); + objContent.write(content.data(), content.size()); } for (int i = 0; i < geometry->vertexCount; ++i) { const auto& v = geometry->vertices[i]; - objContent << fmt::format("vn {} {} {}\n", v.normal.x, v.normal.y, v.normal.z); + const std::string content = fmt::format("vn {} {} {}\n", v.normal.x, v.normal.y, v.normal.z); + objContent.write(content.data(), content.size()); } for (int i = 0; i < geometry->vertexCount; ++i) { const auto& v = geometry->vertices[i]; - objContent << fmt::format("vt {} {}\n", v.textureCoordinates.x, v.textureCoordinates.y); + const std::string content = fmt::format("vt {} {}\n", v.textureCoordinates.x, v.textureCoordinates.y); + objContent.write(content.data(), content.size()); } for (int i = 0; i < geometry->indexCount; i += 3) { uint32_t i0 = geometry->GetIndex(i + 0) + 1; uint32_t i1 = geometry->GetIndex(i + 1) + 1; uint32_t i2 = geometry->GetIndex(i + 2) + 1; - objContent << fmt::format("f {0}/{0}/{0} {1}/{1}/{1} {2}/{2}/{2}\n", i0, i1, i2); + const std::string content = fmt::format("f {0}/{0}/{0} {1}/{1}/{1} {2}/{2}/{2}\n", i0, i1, i2); + objContent.write(content.data(), content.size()); } } } \ No newline at end of file diff --git a/openVulkanoCpp/Scene/UsdEncoder.hpp b/openVulkanoCpp/Scene/UsdEncoder.hpp index bd795af..40d4632 100644 --- a/openVulkanoCpp/Scene/UsdEncoder.hpp +++ b/openVulkanoCpp/Scene/UsdEncoder.hpp @@ -32,7 +32,7 @@ def Xform "root" ( def Xform "model" { custom string userProperties:blender:object_name = "model" - float3 xformOp:rotateXYZ = (90, -0, 0) + float3 xformOp:rotateXYZ = (0, -0, 0) float3 xformOp:scale = (1, 1, 1) double3 xformOp:translate = (0, 0, 0) uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ", "xformOp:scale"]