* Changed Vox_LoadFileName to Vox_LoadFromMemory

This commit is contained in:
fxgen 2021-09-10 13:38:32 +02:00
parent 25984caa18
commit c719eba3a0
2 changed files with 39 additions and 27 deletions

View File

@ -40,6 +40,7 @@ revision history:
1.00 (2021-09-03) first released version 1.00 (2021-09-03) first released version
1.01 (2021-09-07) Support custom memory allocators 1.01 (2021-09-07) Support custom memory allocators
Removed Raylib dependencies Removed Raylib dependencies
Changed Vox_LoadFileName to Vox_LoadFromMemory
*/ */
@ -137,7 +138,7 @@ extern "C" {
// Functions // Functions
extern int Vox_LoadFileName(const char* pszfileName, VoxArray3D* voxarray); extern int Vox_LoadFromMemory(const unsigned char* pvoxData, unsigned int voxDataSize, VoxArray3D* pvoxarray);
extern void Vox_FreeArrays(VoxArray3D* voxarray); extern void Vox_FreeArrays(VoxArray3D* voxarray);
@ -579,7 +580,7 @@ void Vox_Build_Voxel(VoxArray3D* pvoxArray, int x, int y, int z, int matID)
} }
// MagicaVoxel *.vox file format Loader // MagicaVoxel *.vox file format Loader
int Vox_LoadFileName(const char* pszfileName, VoxArray3D* pvoxarray) int Vox_LoadFromMemory(const unsigned char* pvoxData, unsigned int voxDataSize, VoxArray3D* pvoxarray)
{ {
////////////////////////////////////////////////// //////////////////////////////////////////////////
@ -589,25 +590,17 @@ int Vox_LoadFileName(const char* pszfileName, VoxArray3D* pvoxarray)
unsigned long signature; unsigned long signature;
unsigned int readed = 0; unsigned char* fileData = pvoxData;
unsigned char* fileData;
fileData = LoadFileData(pszfileName, &readed);
if (fileData == 0)
{
return VOX_ERROR_FILE_NOT_FOUND;
}
unsigned char* fileDataPtr = fileData; unsigned char* fileDataPtr = fileData;
unsigned char* endfileDataPtr = fileData + readed; unsigned char* endfileDataPtr = fileData + voxDataSize;
signature = *((unsigned long *)fileDataPtr); signature = *((unsigned long *)fileDataPtr);
fileDataPtr += sizeof(unsigned long); fileDataPtr += sizeof(unsigned long);
if (signature != 0x20584F56) //56 4F 58 20 if (signature != 0x20584F56) //56 4F 58 20
{ {
UnloadFileData(fileData); return VOX_ERROR_INVALID_FORMAT; //"Not an MagicaVoxel File format"
//TraceLog(LOG_ERROR, "Not an MagicaVoxel File format");
return VOX_ERROR_INVALID_FORMAT;
} }
unsigned long version; unsigned long version;
@ -617,9 +610,7 @@ int Vox_LoadFileName(const char* pszfileName, VoxArray3D* pvoxarray)
if (version < 150) if (version < 150)
{ {
UnloadFileData(fileData); return VOX_ERROR_FILE_VERSION_TOO_OLD; //"MagicaVoxel version too old"
//TraceLog(LOG_ERROR, "MagicaVoxel version too old");
return VOX_ERROR_FILE_VERSION_TOO_OLD;
} }
@ -744,8 +735,6 @@ int Vox_LoadFileName(const char* pszfileName, VoxArray3D* pvoxarray)
} }
} }
//Free file data
UnloadFileData(fileData);
return VOX_SUCCESS; return VOX_SUCCESS;

View File

@ -74,9 +74,19 @@
#endif #endif
#if defined(SUPPORT_FILEFORMAT_VOX) #if defined(SUPPORT_FILEFORMAT_VOX)
#define VOX_MALLOC RL_MALLOC // Allow custom memory allocators
#define VOX_REALLOC RL_REALLOC #ifndef VOX_MALLOC
#define VOX_FREE RL_FREE #define VOX_MALLOC RL_MALLOC
#endif
#ifndef VOX_CALLOC
#define VOX_CALLOC RL_CALLOC
#endif
#ifndef VOX_REALLOC
#define VOX_REALLOC RL_REALLOC
#endif
#ifndef VOX_FREE
#define VOX_FREE RL_FREE
#endif
#define VOX_LOADER_IMPLEMENTATION #define VOX_LOADER_IMPLEMENTATION
#include "external/vox_loader.h" // vox file format loading (MagikaVoxel) #include "external/vox_loader.h" // vox file format loading (MagikaVoxel)
@ -145,9 +155,6 @@ static void *ReadGLTFValuesAs(cgltf_accessor *acc, cgltf_component_type type, bo
#if defined(SUPPORT_FILEFORMAT_VOX) #if defined(SUPPORT_FILEFORMAT_VOX)
static Model LoadVOX(const char *filename); // Load VOX mesh data static Model LoadVOX(const char *filename); // Load VOX mesh data
#endif #endif
#if defined(SUPPORT_FILEFORMAT_VOX)
static Model LoadVOX(const char* filename); //Load VOX mesh data
#endif
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
// Module Functions Definition // Module Functions Definition
@ -5525,24 +5532,38 @@ static void GetGLTFPrimitiveCount(cgltf_node *node, int *outCount)
#endif #endif
#if defined(SUPPORT_FILEFORMAT_VOX) #if defined(SUPPORT_FILEFORMAT_VOX)
// Load VOX (MagikaVoxel) mesh data // Load VOX (MagicaVoxel) mesh data
static Model LoadVOX(const char *fileName) static Model LoadVOX(const char *fileName)
{ {
Model model = { 0 }; Model model = { 0 };
int nbvertices = 0; int nbvertices = 0;
int meshescount = 0; int meshescount = 0;
unsigned int readed = 0;
unsigned char* fileData;
//Read vox file into buffer
fileData = LoadFileData(fileName, &readed);
if (fileData == 0)
{
TRACELOG(LOG_WARNING, "MODEL: [%s] Failed to load VOX file", fileName);
return model;
}
//Read and build voxarray description
VoxArray3D voxarray = { 0 }; VoxArray3D voxarray = { 0 };
int ret = Vox_LoadFileName(fileName, &voxarray); int ret = Vox_LoadFromMemory(fileData, readed, &voxarray);
if (ret != VOX_SUCCESS) if (ret != VOX_SUCCESS)
{ {
// Error
UnloadFileData(fileData);
TRACELOG(LOG_WARNING, "MODEL: [%s] Failed to load VOX data", fileName); TRACELOG(LOG_WARNING, "MODEL: [%s] Failed to load VOX data", fileName);
return model; return model;
} }
else else
{ {
// Compute meshes count // Success: Compute meshes count
nbvertices = voxarray.vertices.used; nbvertices = voxarray.vertices.used;
meshescount = 1 + (nbvertices/65536); meshescount = 1 + (nbvertices/65536);
@ -5607,7 +5628,9 @@ static Model LoadVOX(const char *fileName)
pcolors += verticesMax; pcolors += verticesMax;
} }
//Free buffers
Vox_FreeArrays(&voxarray); Vox_FreeArrays(&voxarray);
UnloadFileData(fileData);
return model; return model;
} }