Summary:
- Changes in Cat functions - Using gmtime_s and gmtime_r as a thread-safe functions - ZFill() that is used for padding - Option for ZipWriter to pad LocalFileHeaders(it is used to properly run tests) - ZipWriter::IsOpen() - Moved material creation away from WriteObjContents - Using MemMappedFile instead of ReadFile - Scoping files and adding them to archive - UsdEncoder refactoring
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
*/
|
||||
|
||||
#include "MeshWriter.hpp"
|
||||
#include "IO/MemMappedFile.hpp"
|
||||
#include "Scene/Geometry.hpp"
|
||||
#include "Scene/Vertex.hpp"
|
||||
#include "Scene/UsdEncoder.hpp"
|
||||
@@ -24,8 +25,7 @@ namespace OpenVulkano::Scene
|
||||
if (!file.is_open())
|
||||
throw std::runtime_error("Failed to open file '" + filePath + "' for writing!");
|
||||
|
||||
std::stringstream dummy;
|
||||
WriteObjContents(geometry, "", file, dummy);
|
||||
WriteObjContents(geometry, "", file);
|
||||
file.close();
|
||||
}
|
||||
|
||||
@@ -42,18 +42,25 @@ namespace OpenVulkano::Scene
|
||||
{
|
||||
OpenVulkano::ArchiveWriter zipWriter(zipPath.c_str());
|
||||
|
||||
std::stringstream objContents, mtlContents;
|
||||
WriteObjContents(geometry, texturePath, objContents, mtlContents);
|
||||
|
||||
auto objDesc = OpenVulkano::FileDescription::MakeDescriptionForFile("model.obj", objContents.str().size());
|
||||
zipWriter.AddFile(objDesc, objContents.str().data());
|
||||
|
||||
auto mtlDesc = OpenVulkano::FileDescription::MakeDescriptionForFile("material.mtl", mtlContents.str().size());
|
||||
zipWriter.AddFile(mtlDesc, mtlContents.str().data());
|
||||
const char* materialName = "Material0";
|
||||
{
|
||||
std::stringstream objContents;
|
||||
WriteObjContents(geometry, materialName, objContents);
|
||||
auto objContentsStr = objContents.str();
|
||||
auto objDesc = OpenVulkano::FileDescription::MakeDescriptionForFile("model.obj", objContentsStr.size());
|
||||
zipWriter.AddFile(objDesc, objContentsStr.data());
|
||||
}
|
||||
{
|
||||
std::stringstream mtlContents;
|
||||
mtlContents << "newmtl " << materialName << "\n" << ObjMaterialContents;
|
||||
auto mtlContentsStr = mtlContents.str();
|
||||
auto mtlDesc = OpenVulkano::FileDescription::MakeDescriptionForFile("material.mtl", mtlContentsStr.size());
|
||||
zipWriter.AddFile(mtlDesc, mtlContentsStr.data());
|
||||
}
|
||||
|
||||
if (!texturePath.empty() && std::filesystem::exists(texturePath))
|
||||
{
|
||||
auto textureFile = Utils::ReadFile(texturePath);
|
||||
auto textureFile = MemMappedFile(texturePath);
|
||||
auto texDesc = OpenVulkano::FileDescription::MakeDescriptionForFile("texture.png", textureFile.Size());
|
||||
zipWriter.AddFile(texDesc, textureFile.Data());
|
||||
}
|
||||
@@ -61,16 +68,19 @@ namespace OpenVulkano::Scene
|
||||
|
||||
void MeshWriter::WriteAsUSDZ(Geometry* geometry, const std::string& texturePath, const std::string& usdzPath)
|
||||
{
|
||||
OpenVulkano::ZipWriter zipWriter(usdzPath);
|
||||
OpenVulkano::ZipWriter zipWriter(usdzPath);// NOCHECKIN, true);
|
||||
|
||||
std::stringstream usdFile;
|
||||
WriteUsdContents(usdFile, geometry);
|
||||
auto usdDesc = OpenVulkano::FileDescription::MakeDescriptionForFile("geometry.usda", usdFile.str().size());
|
||||
zipWriter.AddFile(usdDesc, usdFile.str().data());
|
||||
{
|
||||
std::stringstream usdFile;
|
||||
WriteUsdContents(usdFile, geometry);
|
||||
auto usdFileStr = usdFile.str();
|
||||
auto usdDesc = OpenVulkano::FileDescription::MakeDescriptionForFile("geometry.usda", usdFileStr.size());
|
||||
zipWriter.AddFile(usdDesc, usdFileStr.data());
|
||||
}
|
||||
|
||||
if (!texturePath.empty() && std::filesystem::exists(texturePath))
|
||||
{
|
||||
auto textureFile = Utils::ReadFile(texturePath);
|
||||
auto textureFile = MemMappedFile(texturePath);
|
||||
auto texDesc = OpenVulkano::FileDescription::MakeDescriptionForFile("texture.png", textureFile.Size());
|
||||
zipWriter.AddFile(texDesc, textureFile.Data());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user