From c0b26e7b428797fb8c9293285eae5ab73e5f1e1c Mon Sep 17 00:00:00 2001 From: JackCarterSmith Date: Sun, 22 Jan 2023 01:00:44 +0100 Subject: [PATCH] Fix HOB deallocation Removed logging in library by default --- RSEModel/src/RSEModel.c | 2 ++ RSPModelLib/include/RSPModel_datatypes.h | 29 +++++++----------------- RSPModelLib/src/RSPModel.c | 2 -- RSPModelLib/src/hob_parser.c | 25 ++++++++++---------- RSPModelLib/src/hob_struct.h | 18 +++++++-------- RSPModelLib/src/hob_struct2.h | 18 +++++++-------- 6 files changed, 40 insertions(+), 54 deletions(-) diff --git a/RSEModel/src/RSEModel.c b/RSEModel/src/RSEModel.c index 3e2ab0a..5b7d3db 100644 --- a/RSEModel/src/RSEModel.c +++ b/RSEModel/src/RSEModel.c @@ -99,6 +99,7 @@ static unsigned int mainProcess(int args_cnt, char* args_value[], T_PROG_OPTIONS if (RSPModel_processHOBFile(hobStruct, args_value[file_index], libParams) != RSPLIB_SUCCESS) { printf("[ERR] Failed to parse datas from %s\n", args_value[file_index]); RSPModel_freeHOB(hobStruct); + free(hobStruct); return RSPLIB_ERROR_PROCESS; } @@ -136,6 +137,7 @@ static unsigned int mainProcess(int args_cnt, char* args_value[], T_PROG_OPTIONS } RSPModel_freeHOB(hobStruct); + free(hobStruct); return RSPLIB_SUCCESS; } diff --git a/RSPModelLib/include/RSPModel_datatypes.h b/RSPModelLib/include/RSPModel_datatypes.h index 01d7c91..bbdc715 100644 --- a/RSPModelLib/include/RSPModel_datatypes.h +++ b/RSPModelLib/include/RSPModel_datatypes.h @@ -39,25 +39,12 @@ typedef char* MEMFILE; #define MEMFILE_DEF #endif -#ifndef T_RGBA_DEF -typedef unsigned int T_RGBA; -#define T_RGBA_DEF -#endif +typedef unsigned int T_RSPMODEL_RGBA; -#ifndef T_VECTOR3_DEF -typedef struct vector3 { float x,y,z; } T_VECTOR3; -#define T_VECTOR3_DEF -#endif +typedef struct rspmodel_vector3 { float x,y,z; } T_RSPMODEL_VECTOR3; +typedef struct rspmodel_vertex { short x,y,z,w; } T_RSPMODEL_VERTEX; -#ifndef T_VERTEX_DEF -typedef struct vertex { short x,y,z,w; } T_VERTEX; -#define T_VERTEX_DEF -#endif - -#ifndef T_TEXCOORD_DEF -typedef struct tex_coord { short u,v; } T_TEXCOORD; -#define T_TEXCOORD_DEF -#endif +typedef struct rspmodel_texcoord { short u,v; } T_RSPMODEL_TEXCOORD; typedef struct face_flags { unsigned int fUnknown0:1; @@ -86,8 +73,8 @@ typedef struct hob_face { unsigned char bsize; unsigned short mt_index; // Material/texture index, if texture it's correspond to texture_index, otherwise it's mat_'X' unsigned short indices[4]; - T_RGBA vertex_colors[4]; //TODO: convert in R:8_G:8_B:8_A:8 format? Caution with BE/LE conversion - T_TEXCOORD tex_coords[4]; + T_RSPMODEL_RGBA vertex_colors[4]; //TODO: convert in R:8_G:8_B:8_A:8 format? Caution with BE/LE conversion + T_RSPMODEL_TEXCOORD tex_coords[4]; } T_RSPMODEL_FACE; typedef struct rspmodel_obj_parts { @@ -98,13 +85,13 @@ typedef struct rspmodel_obj_parts { unsigned int vertex_block_offset; unsigned int id; - T_VECTOR3 transform; + T_RSPMODEL_VECTOR3 transform; unsigned int face_count; T_RSPMODEL_FACE* faces; unsigned int vertex_count; - T_VERTEX* vertices; + T_RSPMODEL_VERTEX* vertices; } T_RSPMODEL_OBJ_PARTS; typedef struct rspmodel_object { diff --git a/RSPModelLib/src/RSPModel.c b/RSPModelLib/src/RSPModel.c index 38d7295..f3098e2 100644 --- a/RSPModelLib/src/RSPModel.c +++ b/RSPModelLib/src/RSPModel.c @@ -71,8 +71,6 @@ void RSPModel_freeHOB( T_RSPMODEL_HOB* hobStruct ) { } free(hobStruct->objects); } - - free(hobStruct); } diff --git a/RSPModelLib/src/hob_parser.c b/RSPModelLib/src/hob_parser.c index e050cc1..c9d2319 100644 --- a/RSPModelLib/src/hob_parser.c +++ b/RSPModelLib/src/hob_parser.c @@ -108,9 +108,9 @@ static unsigned short ExtractObjects(T_RSPMODEL_HOB* pHobStruct, const MEMFILE p // Retrieve object count from the header pHobStruct->obj_count = RSP_ModelLib_getObjectsCount(pMemfile); - printf("[INFO] - Object(s) quantity: %d\n", pHobStruct->obj_count); + if (pParams->verbose_mode) printf("[INFO] - Object(s) quantity: %d\n", pHobStruct->obj_count); if (pHobStruct->obj_count <= 0) { - printf("[INFO] Can't process empty file!\n"); + if (pParams->verbose_mode) printf("[INFO] Can't process empty file!\n"); return RSPLIB_ERROR_GENERIC; } @@ -125,8 +125,7 @@ static unsigned short ExtractObjects(T_RSPMODEL_HOB* pHobStruct, const MEMFILE p memcpy(pHobStruct->objects[i].name, ((T_HOBFILE_OBJ_DESCRIPTOR *)(pMemfile + sizeof(T_HOBFILE_HEADER) + sizeof(T_HOBFILE_OBJ_DESCRIPTOR) * i))->object_name, 16); - if (pParams->verbose_mode) printf("\n"); - printf("[INFO] - Process %s object...\n", pHobStruct->objects[i].name); + if (pParams->verbose_mode) printf("\n[INFO] - Process %s object...\n", pHobStruct->objects[i].name); // Get offsets @@ -159,8 +158,8 @@ static unsigned short ExtractObjects(T_RSPMODEL_HOB* pHobStruct, const MEMFILE p * Seem "object" are independant structure like xwing, turret, etc. * Facegroup is more like part of previous object, like wing-left, turret-barrel, etc. */ - if (pHobStruct->objects[i].object_part_count != pHobStruct->objects[i].face_group_count && (pParams->verbose_mode)) - printf("[DBG] > Object parts / facegroup count are different!\n"); + if (pHobStruct->objects[i].object_part_count != pHobStruct->objects[i].face_group_count) + if (pParams->verbose_mode) printf("[DBG] > Object parts / facegroup count are different!\n"); // Get facegroup datas ExtractObjParts(&pHobStruct->objects[i], pMemfile, pParams); @@ -367,21 +366,21 @@ static unsigned short ExtractObjParts_faces(T_RSPMODEL_OBJ_PARTS* pObjPart, cons } // Get vertex datas - pObjPart->vertices = calloc(pObjPart->vertex_count, sizeof(T_VERTEX)); + pObjPart->vertices = calloc(pObjPart->vertex_count, sizeof(T_RSPMODEL_VERTEX)); if (pObjPart->vertices == NULL) return RSPLIB_ERROR_MEMORY; for ( i = 0; i < pObjPart->vertex_count; i++ ) { pObjPart->vertices[i].x = - ((T_HOBFILE_VERTEX *)(pMemfile + pObjPart->vertex_block_offset + sizeof(T_VERTEX) * i))->x; + ((T_HOBFILE_VERTEX *)(pMemfile + pObjPart->vertex_block_offset + sizeof(T_RSPMODEL_VERTEX) * i))->x; pObjPart->vertices[i].y = - ((T_HOBFILE_VERTEX *)(pMemfile + pObjPart->vertex_block_offset + sizeof(T_VERTEX) * i))->y; + ((T_HOBFILE_VERTEX *)(pMemfile + pObjPart->vertex_block_offset + sizeof(T_RSPMODEL_VERTEX) * i))->y; pObjPart->vertices[i].z = - ((T_HOBFILE_VERTEX *)(pMemfile + pObjPart->vertex_block_offset + sizeof(T_VERTEX) * i))->z; + ((T_HOBFILE_VERTEX *)(pMemfile + pObjPart->vertex_block_offset + sizeof(T_RSPMODEL_VERTEX) * i))->z; pObjPart->vertices[i].w = - ((T_HOBFILE_VERTEX *)(pMemfile + pObjPart->vertex_block_offset + sizeof(T_VERTEX) * i))->w; // Always 0??? + ((T_HOBFILE_VERTEX *)(pMemfile + pObjPart->vertex_block_offset + sizeof(T_RSPMODEL_VERTEX) * i))->w; // Always 0??? if (pParams->debug_mode) printf("[DBG] > Found vertex %d: (%d, %d, %d)\n", i, pObjPart->vertices[i].x, pObjPart->vertices[i].y, pObjPart->vertices[i].z @@ -411,7 +410,7 @@ static unsigned short ExtractObjpart_Face_Colors(T_RSPMODEL_FACE* pFace, const c pFace->vertex_colors[3] = ((T_HOBFILE_FACES_VERTEX_COLOR *)(pFaceMemFileOffset))->v4_rgba; dynOffset += sizeof(T_HOBFILE_FACES_VERTEX_COLOR); } else { - dynOffset += sizeof(T_HOBFILE_FACES_VERTEX_COLOR) - sizeof(T_RGBA); + dynOffset += sizeof(T_HOBFILE_FACES_VERTEX_COLOR) - sizeof(T_RSPMODEL_RGBA); } } else { pFace->vertex_colors[0] = ((T_HOBFILE_FACES_COLOR *)(pFaceMemFileOffset))->rgba; @@ -443,7 +442,7 @@ static unsigned short ExtractObjpart_Face_UVMaps(T_RSPMODEL_FACE* pFace, const c pFace->tex_coords[3] = ((T_HOBFILE_FACES_VERTEX_TEXTURE *)(pFaceMemFileOffset))->v4_texcoord; dynOffset += sizeof(T_HOBFILE_FACES_VERTEX_TEXTURE); } else { - dynOffset += sizeof(T_HOBFILE_FACES_VERTEX_TEXTURE) - sizeof(T_TEXCOORD); + dynOffset += sizeof(T_HOBFILE_FACES_VERTEX_TEXTURE) - sizeof(T_RSPMODEL_TEXCOORD); } return dynOffset; diff --git a/RSPModelLib/src/hob_struct.h b/RSPModelLib/src/hob_struct.h index c477b64..9b9ac3b 100644 --- a/RSPModelLib/src/hob_struct.h +++ b/RSPModelLib/src/hob_struct.h @@ -190,21 +190,21 @@ typedef struct PACK hobfile_faces_header { } T_HOBFILE_FACES_HEADER; typedef struct PACK hobfile_faces_extra_vertex_color { - T_RGBA v1_rgba; - T_RGBA v2_rgba; - T_RGBA v3_rgba; - T_RGBA v4_rgba; // Used with quad type face + T_RSPMODEL_RGBA v1_rgba; + T_RSPMODEL_RGBA v2_rgba; + T_RSPMODEL_RGBA v3_rgba; + T_RSPMODEL_RGBA v4_rgba; // Used with quad type face } T_HOBFILE_FACES_VERTEX_COLOR; typedef struct PACK hobfile_faces_extra_color { - T_RGBA rgba; + T_RSPMODEL_RGBA rgba; } T_HOBFILE_FACES_COLOR; typedef struct PACK hobfile_faces_extra_vertex_texture { - T_TEXCOORD v1_texcoord; // Should be divided (no shifting) by 4096 to get 0...1 range - T_TEXCOORD v2_texcoord; - T_TEXCOORD v3_texcoord; - T_TEXCOORD v4_texcoord; // Used with quad type face + T_RSPMODEL_TEXCOORD v1_texcoord; // Should be divided (no shifting) by 4096 to get 0...1 range + T_RSPMODEL_TEXCOORD v2_texcoord; + T_RSPMODEL_TEXCOORD v3_texcoord; + T_RSPMODEL_TEXCOORD v4_texcoord; // Used with quad type face } T_HOBFILE_FACES_VERTEX_TEXTURE; typedef struct PACK hobfile_vertex { diff --git a/RSPModelLib/src/hob_struct2.h b/RSPModelLib/src/hob_struct2.h index 80e2118..846e05b 100644 --- a/RSPModelLib/src/hob_struct2.h +++ b/RSPModelLib/src/hob_struct2.h @@ -215,21 +215,21 @@ typedef struct PACK hobfile_faces_header { } T_HOBFILE_FACES_HEADER; typedef struct PACK hobfile_faces_extra_vertex_color { - T_RGBA v1_rgba; - T_RGBA v2_rgba; - T_RGBA v3_rgba; - T_RGBA v4_rgba; // Used with quad type face + T_RSPMODEL_RGBA v1_rgba; + T_RSPMODEL_RGBA v2_rgba; + T_RSPMODEL_RGBA v3_rgba; + T_RSPMODEL_RGBA v4_rgba; // Used with quad type face } T_HOBFILE_FACES_VERTEX_COLOR; typedef struct PACK hobfile_faces_extra_color { - T_RGBA rgba; + T_RSPMODEL_RGBA rgba; } T_HOBFILE_FACES_COLOR; typedef struct PACK hobfile_faces_extra_vertex_texture { - T_TEXCOORD v1_texcoord; // Should be divided (no shifting) by 4096 to get 0...1 range - T_TEXCOORD v2_texcoord; - T_TEXCOORD v3_texcoord; - T_TEXCOORD v4_texcoord; // Used with quad type face + T_RSPMODEL_TEXCOORD v1_texcoord; // Should be divided (no shifting) by 4096 to get 0...1 range + T_RSPMODEL_TEXCOORD v2_texcoord; + T_RSPMODEL_TEXCOORD v3_texcoord; + T_RSPMODEL_TEXCOORD v4_texcoord; // Used with quad type face } T_HOBFILE_FACES_VERTEX_TEXTURE; typedef struct PACK hobfile_vertex {