diff --git a/src/external/vox_loader.h b/src/external/vox_loader.h index 70d62720f..f199a333c 100644 --- a/src/external/vox_loader.h +++ b/src/external/vox_loader.h @@ -42,6 +42,7 @@ revision history: Removed Raylib dependencies Changed Vox_LoadFileName to Vox_LoadFromMemory 1.02 (2021-09-10) @raysan5: Reviewed some formating + 1.03 (2021-10-02) @catmanl: Reduce warnings on gcc */ @@ -80,11 +81,6 @@ typedef struct { float x, y, z; } VoxVector3; -typedef struct { - int* array; - int used, size; -} ArrayInt; - typedef struct { VoxVector3* array; int used, size; @@ -142,7 +138,7 @@ extern "C" { // Prevents name mangling of functions #endif // Functions -int Vox_LoadFromMemory(const unsigned char* pvoxData, unsigned int voxDataSize, VoxArray3D* pvoxarray); +int Vox_LoadFromMemory(unsigned char* pvoxData, unsigned int voxDataSize, VoxArray3D* pvoxarray); void Vox_FreeArrays(VoxArray3D* voxarray); #ifdef __cplusplus @@ -161,35 +157,6 @@ void Vox_FreeArrays(VoxArray3D* voxarray); #ifdef VOX_LOADER_IMPLEMENTATION -///////////////////////////////////////////////////////////////////////////////////////////// -// ArrayInt helper -///////////////////////////////////////////////////////////////////////////////////////////// - -static void initArrayInt(ArrayInt* a, int initialSize) -{ - a->array = VOX_MALLOC(initialSize * sizeof(int)); - a->used = 0; - a->size = initialSize; -} - -static void insertArrayInt(ArrayInt* a, int element) -{ - if (a->used == a->size) - { - a->size *= 2; - a->array = VOX_REALLOC(a->array, a->size * sizeof(int)); - } - - a->array[a->used++] = element; -} - -static void freeArrayInt(ArrayInt* a) -{ - VOX_FREE(a->array); - a->array = NULL; - a->used = a->size = 0; -} - ///////////////////////////////////////////////////////////////////////////////////////////// // ArrayUShort helper ///////////////////////////////////////////////////////////////////////////////////////////// @@ -560,7 +527,7 @@ static void Vox_Build_Voxel(VoxArray3D* pvoxArray, int x, int y, int z, int matI } // MagicaVoxel *.vox file format Loader -int Vox_LoadFromMemory(const unsigned char* pvoxData, unsigned int voxDataSize, VoxArray3D* pvoxarray) +int Vox_LoadFromMemory(unsigned char* pvoxData, unsigned int voxDataSize, VoxArray3D* pvoxarray) { ////////////////////////////////////////////////// //Read VOX file @@ -607,8 +574,6 @@ int Vox_LoadFromMemory(const unsigned char* pvoxData, unsigned int voxDataSize, unsigned long sizeX, sizeY, sizeZ; sizeX = sizeY = sizeZ = 0; unsigned long numVoxels = 0; - int offsetX, offsetY, offsetZ; - offsetX = offsetY = offsetZ = 0; while (fileDataPtr < endfileDataPtr) { @@ -620,9 +585,6 @@ int Vox_LoadFromMemory(const unsigned char* pvoxData, unsigned int voxDataSize, unsigned long chunkSize = *((unsigned long*)fileDataPtr); fileDataPtr += sizeof(unsigned long); - unsigned long chunkTotalChildSize = *((unsigned long*)fileDataPtr); - fileDataPtr += sizeof(unsigned long); - if (strcmp(szChunkName, "SIZE") == 0) { //(4 bytes x 3 : x, y, z ) diff --git a/src/rmodels.c b/src/rmodels.c index 8ccd26b5a..cea22b91f 100644 --- a/src/rmodels.c +++ b/src/rmodels.c @@ -123,6 +123,8 @@ //---------------------------------------------------------------------------------- // Module specific Functions Declaration //---------------------------------------------------------------------------------- +static Vector3 *ToVector3(VoxVector3 *array); +static Color *ToColor(VoxColor *array); #if defined(SUPPORT_FILEFORMAT_OBJ) static Model LoadOBJ(const char *fileName); // Load OBJ mesh data #endif @@ -3679,6 +3681,25 @@ RayCollision GetRayCollisionQuad(Ray ray, Vector3 p1, Vector3 p2, Vector3 p3, Ve //---------------------------------------------------------------------------------- // Module specific Functions Definition //---------------------------------------------------------------------------------- +static Vector3 *ToVector3(VoxVector3 *array) +{ + Vector3 *vec = { 0 }; + vec->x = array->x; + vec->y = array->y; + vec->z = array->z; + return vec; +} + +static Color *ToColor(VoxColor *array) +{ + Color *color = { 0 }; + color->r = array->r; + color->g = array->g; + color->b = array->b; + color->a = array->a; + return color; +} + #if defined(SUPPORT_FILEFORMAT_OBJ) // Load OBJ mesh data // @@ -5745,8 +5766,8 @@ static Model LoadVOX(const char *fileName) int verticesRemain = voxarray.vertices.used; int verticesMax = 65532; // 5461 voxels x 12 vertices per voxel -> 65532 (must be inf 65536) - Vector3 *pvertices = voxarray.vertices.array; // 6*4 = 12 vertices per voxel - Color *pcolors = voxarray.colors.array; + Vector3 *pvertices = ToVector3(voxarray.vertices.array); // 6*4 = 12 vertices per voxel + Color *pcolors = ToColor(voxarray.colors.array); unsigned short *pindices = voxarray.indices.array; // 5461*6*6 = 196596 indices max per mesh int size = 0;