SpiecsEngine
 
Loading...
Searching...
No Matches

◆ LoadFromSASSET()

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

Load data from a .sasset file.

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

Definition at line 209 of file MeshLoader.cpp.

210 {
212
213 bool isFind = false;
214 std::string filePath;
215 for (auto& it : ResourceSystem::GetSearchFolder())
216 {
217 filePath = it + defaultBinMeshPath + fileName + ".sasset";
218 if (FileLibrary::FileLibrary_Exists(filePath.c_str()))
219 {
220 isFind = true;
221 break;
222 }
223 }
224 if (!isFind) return false;
225
226 if (!FileLibrary::FileLibrary_Exists(filePath.c_str())) {
227 return false;
228 }
229
230 FileHandle f;
231 FileLibrary::FileLibrary_Open(filePath.c_str(), FILE_MODE_READ, true, &f);
232
233 uint64_t readed = 0;
234
235 char startSign[100];
236 FileLibrary::FileLibrary_Read(&f, sizeof(char) * 100, &startSign, &readed);
237
239 {
241 return false;
242 }
243
244 uint32_t positionsCount = 0;
245 FileLibrary::FileLibrary_Read(&f, sizeof(uint32_t), &positionsCount, &readed);
246 outMeshPack->m_MeshResource.positions.attributes->resize(positionsCount);
247
248 uint32_t normalsCount = 0;
249 FileLibrary::FileLibrary_Read(&f, sizeof(uint32_t), &normalsCount, &readed);
250 outMeshPack->m_MeshResource.normals.attributes->resize(normalsCount);
251
252 uint32_t colorsCount = 0;
253 FileLibrary::FileLibrary_Read(&f, sizeof(uint32_t), &colorsCount, &readed);
254 outMeshPack->m_MeshResource.colors.attributes->resize(colorsCount);
255
256 uint32_t texCoordsCount = 0;
257 FileLibrary::FileLibrary_Read(&f, sizeof(uint32_t), &texCoordsCount, &readed);
258 outMeshPack->m_MeshResource.texCoords.attributes->resize(texCoordsCount);
259
260 uint32_t verticesCount = 0;
261 FileLibrary::FileLibrary_Read(&f, sizeof(uint32_t), &verticesCount, &readed);
262 outMeshPack->m_MeshResource.vertices.attributes->resize(verticesCount);
263
264 uint32_t primitivePointsCount = 0;
265 FileLibrary::FileLibrary_Read(&f, sizeof(uint32_t), &primitivePointsCount, &readed);
266 outMeshPack->m_MeshResource.primitivePoints.attributes->resize(primitivePointsCount);
267
268 uint32_t primitiveVerticesCount = 0;
269 FileLibrary::FileLibrary_Read(&f, sizeof(uint32_t), &primitiveVerticesCount, &readed);
270 outMeshPack->m_MeshResource.primitiveVertices.attributes->resize(primitiveVerticesCount);
271
272 uint32_t primitiveLocationsCount = 0;
273 FileLibrary::FileLibrary_Read(&f, sizeof(uint32_t), &primitiveLocationsCount, &readed);
274 outMeshPack->m_MeshResource.primitiveLocations.attributes->resize(primitiveLocationsCount);
275
276 uint32_t meshletsCount = 0;
277 FileLibrary::FileLibrary_Read(&f, sizeof(uint32_t), &meshletsCount, &readed);
278 outMeshPack->m_MeshResource.meshlets.attributes->resize(meshletsCount);
279
280 uint32_t lodsCount = 0;
281 FileLibrary::FileLibrary_Read(&f, sizeof(uint32_t), &lodsCount, &readed);
282 outMeshPack->m_MeshResource.lods.attributes->resize(lodsCount);
283
284 FileLibrary::FileLibrary_Read(&f, sizeof(glm::vec3) * positionsCount , outMeshPack->m_MeshResource.positions.attributes ->data(), &readed);
285 FileLibrary::FileLibrary_Read(&f, sizeof(glm::vec3) * normalsCount , outMeshPack->m_MeshResource.normals.attributes ->data(), &readed);
286 FileLibrary::FileLibrary_Read(&f, sizeof(glm::vec3) * colorsCount , outMeshPack->m_MeshResource.colors.attributes ->data(), &readed);
287 FileLibrary::FileLibrary_Read(&f, sizeof(glm::vec2) * texCoordsCount , outMeshPack->m_MeshResource.texCoords.attributes ->data(), &readed);
288 FileLibrary::FileLibrary_Read(&f, sizeof(glm::uvec4) * verticesCount , outMeshPack->m_MeshResource.vertices.attributes ->data(), &readed);
289 FileLibrary::FileLibrary_Read(&f, sizeof(glm::uvec3) * primitivePointsCount , outMeshPack->m_MeshResource.primitivePoints.attributes ->data(), &readed);
290 FileLibrary::FileLibrary_Read(&f, sizeof(glm::uvec3) * primitiveVerticesCount , outMeshPack->m_MeshResource.primitiveVertices.attributes ->data(), &readed);
291 FileLibrary::FileLibrary_Read(&f, sizeof(glm::uvec3) * primitiveLocationsCount , outMeshPack->m_MeshResource.primitiveLocations.attributes ->data(), &readed);
292 FileLibrary::FileLibrary_Read(&f, sizeof(Meshlet) * meshletsCount , outMeshPack->m_MeshResource.meshlets.attributes ->data(), &readed);
293 FileLibrary::FileLibrary_Read(&f, sizeof(Lod) * lodsCount , outMeshPack->m_MeshResource.lods.attributes ->data(), &readed);
294
295 char overSign[100];
296 FileLibrary::FileLibrary_Read(&f, sizeof(char) * 100, &overSign, &readed);
297
299 {
301 return false;
302 }
303
305
306 return true;
307 }
#define SPICES_PROFILE_ZONE
static bool FileLibrary_Read(const FileHandle *handle, uint64_t data_size, void *out_data, uint64_t *out_bytes_read)
Read Specific size of data form the current file handle pointer, and move pointer the same size.
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 bool StringsEqual(const char *str0, const char *str1)
Determine if the strings given are equal. Platform Specific.
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_READ
model : read
Definition FileLibrary.h:37

References Spices::FILE_MODE_READ, Spices::FileLibrary::FileLibrary_Close(), Spices::FileLibrary::FileLibrary_Exists(), Spices::FileLibrary::FileLibrary_Open(), Spices::FileLibrary::FileLibrary_Read(), Spices::MeshLoaderSignOver, Spices::MeshLoaderSignStart, and Spices::StringLibrary::StringsEqual().

Referenced by Load().