SpiecsEngine
 
Loading...
Searching...
No Matches

◆ WriteSASSET()

bool Spices::MeshLoader::WriteSASSET ( int folderIndex,
const std::string & fileName,
const MeshPack * outMeshPack )
staticprivate

Write the read data to the sasset file.

Parameters
[in]fileNameMesh file path in disk.
[in]folderIndexIndex of Resource Folder.
[in,out]outMeshPackmesh pack pointer, only pass this to it.
Returns
Returns true if write data successfully.

Definition at line 309 of file MeshLoader.cpp.

310 {
312
313 std::string filePath = ResourceSystem::GetSearchFolder()[folderIndex] + defaultBinMeshPath + fileName + ".sasset";
314
315 if (FileLibrary::FileLibrary_Exists(filePath.c_str())) {
316 return false;
317 }
318
319 FileHandle f;
320 FileLibrary::FileLibrary_Open(filePath.c_str(), FILE_MODE_WRITE, true, &f);
321
322 uint64_t written = 0;
323
324 FileLibrary::FileLibrary_Write(&f, sizeof(char) * 100, &MeshLoaderSignStart, &written);
325
326 const uint32_t positionsCount = (uint32_t)outMeshPack->m_MeshResource.positions.attributes->size();
327 FileLibrary::FileLibrary_Write(&f, sizeof(uint32_t), &positionsCount, &written);
328
329 const uint32_t normalsCount = (uint32_t)outMeshPack->m_MeshResource.normals.attributes->size();
330 FileLibrary::FileLibrary_Write(&f, sizeof(uint32_t), &normalsCount, &written);
331
332 const uint32_t colorsCount = (uint32_t)outMeshPack->m_MeshResource.colors.attributes->size();
333 FileLibrary::FileLibrary_Write(&f, sizeof(uint32_t), &colorsCount, &written);
334
335 const uint32_t texCoordsCount = (uint32_t)outMeshPack->m_MeshResource.texCoords.attributes->size();
336 FileLibrary::FileLibrary_Write(&f, sizeof(uint32_t), &texCoordsCount, &written);
337
338 const uint32_t verticesCount = (uint32_t)outMeshPack->m_MeshResource.vertices.attributes->size();
339 FileLibrary::FileLibrary_Write(&f, sizeof(uint32_t), &verticesCount, &written);
340
341 const uint32_t primitivePointsCount = (uint32_t)outMeshPack->m_MeshResource.primitivePoints.attributes->size();
342 FileLibrary::FileLibrary_Write(&f, sizeof(uint32_t), &primitivePointsCount, &written);
343
344 const uint32_t primitiveVerticesCount = (uint32_t)outMeshPack->m_MeshResource.primitiveVertices.attributes->size();
345 FileLibrary::FileLibrary_Write(&f, sizeof(uint32_t), &primitiveVerticesCount, &written);
346
347 const uint32_t primitiveLocationsCount = (uint32_t)outMeshPack->m_MeshResource.primitiveLocations.attributes->size();
348 FileLibrary::FileLibrary_Write(&f, sizeof(uint32_t), &primitiveLocationsCount, &written);
349
350 const uint32_t meshletsCount = (uint32_t)outMeshPack->m_MeshResource.meshlets.attributes->size();
351 FileLibrary::FileLibrary_Write(&f, sizeof(uint32_t), &meshletsCount, &written);
352
353 const uint32_t lodsCount = (uint32_t)outMeshPack->m_MeshResource.lods.attributes->size();
354 FileLibrary::FileLibrary_Write(&f, sizeof(uint32_t), &lodsCount, &written);
355
356 FileLibrary::FileLibrary_Write(&f, sizeof(glm::vec3) * positionsCount , outMeshPack->m_MeshResource.positions.attributes ->data(), &written);
357 FileLibrary::FileLibrary_Write(&f, sizeof(glm::vec3) * normalsCount , outMeshPack->m_MeshResource.normals.attributes ->data(), &written);
358 FileLibrary::FileLibrary_Write(&f, sizeof(glm::vec3) * colorsCount , outMeshPack->m_MeshResource.colors.attributes ->data(), &written);
359 FileLibrary::FileLibrary_Write(&f, sizeof(glm::vec2) * texCoordsCount , outMeshPack->m_MeshResource.texCoords.attributes ->data(), &written);
360 FileLibrary::FileLibrary_Write(&f, sizeof(glm::uvec4) * verticesCount , outMeshPack->m_MeshResource.vertices.attributes ->data(), &written);
361 FileLibrary::FileLibrary_Write(&f, sizeof(glm::uvec3) * primitivePointsCount , outMeshPack->m_MeshResource.primitivePoints.attributes ->data(), &written);
362 FileLibrary::FileLibrary_Write(&f, sizeof(glm::uvec3) * primitiveVerticesCount , outMeshPack->m_MeshResource.primitiveVertices.attributes ->data(), &written);
363 FileLibrary::FileLibrary_Write(&f, sizeof(glm::uvec3) * primitiveLocationsCount , outMeshPack->m_MeshResource.primitiveLocations.attributes ->data(), &written);
364 FileLibrary::FileLibrary_Write(&f, sizeof(Meshlet) * meshletsCount , outMeshPack->m_MeshResource.meshlets.attributes ->data(), &written);
365 FileLibrary::FileLibrary_Write(&f, sizeof(Lod) * lodsCount , outMeshPack->m_MeshResource.lods.attributes ->data(), &written);
366
367 FileLibrary::FileLibrary_Write(&f, sizeof(char) * 100, &MeshLoaderSignOver, &written);
368
370
371 return true;
372 }
#define SPICES_PROFILE_ZONE
static bool FileLibrary_Write(const FileHandle *handle, uint64_t data_size, const void *data, uint64_t *out_bytes_written)
Write given data to the file handle pointer.
static bool FileLibrary_Open(const char *path, FileModes mode, bool binary, FileHandle *out_handle)
Open the file using given string.
static void FileLibrary_Close(FileHandle *handle)
Close the file by the file handle.
static bool FileLibrary_Exists(const char *path)
Determine whether the given string is existing a file.
static const std::vector< std::string > & GetSearchFolder()
Get Resource Search Folder.
constexpr char MeshLoaderSignOver[100]
Const variable: Mesh File Confirm header over.
constexpr char MeshLoaderSignStart[100]
Const variable: Mesh File Confirm header staer.
const std::string defaultBinMeshPath
Const variable: Bin Mesh File Path.
@ FILE_MODE_WRITE
model : write
Definition FileLibrary.h:42

References Spices::FILE_MODE_WRITE, Spices::FileLibrary::FileLibrary_Close(), Spices::FileLibrary::FileLibrary_Exists(), Spices::FileLibrary::FileLibrary_Open(), Spices::FileLibrary::FileLibrary_Write(), Spices::MeshLoaderSignOver, and Spices::MeshLoaderSignStart.

Referenced by LoadFromOBJ().