Fix HOB deallocation
All checks were successful
JCS-Prod/RSE-Model/pipeline/head This commit looks good

Removed logging in library by default
This commit is contained in:
JackCarterSmith 2023-01-22 01:00:44 +01:00
parent 7ba1037230
commit c0b26e7b42
Signed by: JackCarterSmith
GPG Key ID: 832E52F4E23F8F24
6 changed files with 40 additions and 54 deletions

View File

@ -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;
}

View File

@ -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 {

View File

@ -71,8 +71,6 @@ void RSPModel_freeHOB( T_RSPMODEL_HOB* hobStruct ) {
}
free(hobStruct->objects);
}
free(hobStruct);
}

View File

@ -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;

View File

@ -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 {

View File

@ -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 {