Fix HOB deallocation
All checks were successful
JCS-Prod/RSE-Model/pipeline/head This commit looks good
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:
parent
7ba1037230
commit
c0b26e7b42
@ -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;
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -71,8 +71,6 @@ void RSPModel_freeHOB( T_RSPMODEL_HOB* hobStruct ) {
|
||||
}
|
||||
free(hobStruct->objects);
|
||||
}
|
||||
|
||||
free(hobStruct);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user