@ -688,10 +688,10 @@ Model LoadModel(const char *fileName)
model . meshCount = 1 ;
model . meshes = ( Mesh * ) RL_CALLOC ( model . meshCount , sizeof ( Mesh ) ) ;
# if defined(SUPPORT_MESH_GENERATION)
TRACELOG ( LOG_WARNING , " [%s] No meshes can be loaded , default to cube mesh" , fileName ) ;
TRACELOG ( LOG_WARNING , " MESH: [%s] Failed to load mesh data , default to cube mesh" , fileName ) ;
model . meshes [ 0 ] = GenMeshCube ( 1.0f , 1.0f , 1.0f ) ;
# else
TRACELOG ( LOG_WARNING , " [%s] No meshes can be loaded, and can't create a default mesh. The raylib mesh generation is not supported (SUPPORT_MESH_GENERATION). " , fileName ) ;
TRACELOG ( LOG_WARNING , " MESH: [%s] Failed to load mesh data " , fileName ) ;
# endif
}
else
@ -702,7 +702,7 @@ Model LoadModel(const char *fileName)
if ( model . materialCount = = 0 )
{
TRACELOG ( LOG_WARNING , " [%s] No materials can be loaded , default to white material" , fileName ) ;
TRACELOG ( LOG_WARNING , " MATERIAL: [%s] Failed to load material data , default to white material" , fileName ) ;
model . materialCount = 1 ;
model . materials = ( Material * ) RL_CALLOC ( model . materialCount , sizeof ( Material ) ) ;
@ -756,7 +756,7 @@ void UnloadModel(Model model)
RL_FREE ( model . bones ) ;
RL_FREE ( model . bindPose ) ;
TRACELOG ( LOG_INFO , " Unloaded model data from RAM and VRAM " ) ;
TRACELOG ( LOG_INFO , " MODEL: Unloaded model from RAM and VRAM" ) ;
}
/ / Load meshes from model file
@ -830,8 +830,8 @@ void ExportMesh(Mesh mesh, const char *fileName)
}
else if ( IsFileExtension ( fileName , " .raw " ) ) { } / / TODO : Support additional file formats to export mesh vertex data
if ( success ) TRACELOG ( LOG_INFO , " Mesh exported successfully: %s " , fileName ) ;
else TRACELOG ( LOG_WARNING , " Mesh could not be exported. " ) ;
if ( success ) TRACELOG ( LOG_INFO , " FILEIO: [%s] Mesh exported successfully" , fileName ) ;
else TRACELOG ( LOG_WARNING , " FILEIO: [%s] Failed to export mesh data " , fileName ) ;
}
/ / Load materials from model file
@ -849,7 +849,7 @@ Material *LoadMaterials(const char *fileName, int *materialCount)
int result = tinyobj_parse_mtl_file ( & mats , & count , fileName ) ;
if ( result ! = TINYOBJ_SUCCESS ) {
TRACELOG ( LOG_WARNING , " [%s] Could not parse M aterials file" , fileName ) ;
TRACELOG ( LOG_WARNING , " MATERIAL: [%s] Failed to parse m aterials file" , fileName ) ;
}
/ / TODO : Process materials to return
@ -857,7 +857,7 @@ Material *LoadMaterials(const char *fileName, int *materialCount)
tinyobj_materials_free ( mats , count ) ;
}
# else
TRACELOG ( LOG_WARNING , " [%s] Materials file not supported " , fileName ) ;
TRACELOG ( LOG_WARNING , " FILEIO: [%s] Failed to load material file " , fileName ) ;
# endif
/ / Set materials shader to default ( DIFFUSE , SPECULAR , NORMAL )
@ -909,8 +909,8 @@ void SetMaterialTexture(Material *material, int mapType, Texture2D texture)
/ / Set the material for a mesh
void SetModelMeshMaterial ( Model * model , int meshId , int materialId )
{
if ( meshId > = model - > meshCount ) TRACELOG ( LOG_WARNING , " Mesh i d greater than mesh count " ) ;
else if ( materialId > = model - > materialCount ) TRACELOG ( LOG_WARNING , " Material i d greater than material count " ) ;
if ( meshId > = model - > meshCount ) TRACELOG ( LOG_WARNING , " MESH: I d greater than mesh count " ) ;
else if ( materialId > = model - > materialCount ) TRACELOG ( LOG_WARNING , " MATERIAL: I d greater than material count " ) ;
else model - > meshMaterial [ meshId ] = materialId ;
}
@ -958,7 +958,8 @@ ModelAnimation *LoadModelAnimations(const char *filename, int *animCount)
if ( ! iqmFile )
{
TRACELOG ( LOG_ERROR , " [%s] Unable to open file " , filename ) ;
TRACELOG ( LOG_WARNING , " FILEIO: [%s] Failed to open file " , filename ) ;
return NULL ;
}
/ / Read IQM header
@ -966,17 +967,15 @@ ModelAnimation *LoadModelAnimations(const char *filename, int *animCount)
if ( strncmp ( iqm . magic , IQM_MAGIC , sizeof ( IQM_MAGIC ) ) )
{
TRACELOG ( LOG_ERROR , " Magic Number \" %s \" does not match. " , iqm . magic ) ;
TRACELOG ( LOG_WARNING , " MODEL: [%s] IQM file is not a valid model " , filename ) ;
fclose ( iqmFile ) ;
return NULL ;
}
if ( iqm . version ! = IQM_VERSION )
{
TRACELOG ( LOG_ERROR , " IQM version %i is incorrect. " , iqm . version ) ;
TRACELOG ( LOG_WARNING , " MODEL: [%s] IQM file version incorrect" , filename ) ;
fclose ( iqmFile ) ;
return NULL ;
}
@ -2339,7 +2338,7 @@ BoundingBox MeshBoundingBox(Mesh mesh)
void MeshTangents ( Mesh * mesh )
{
if ( mesh - > tangents = = NULL ) mesh - > tangents = ( float * ) RL_MALLOC ( mesh - > vertexCount * 4 * sizeof ( float ) ) ;
else TRACELOG ( LOG_WARNING , " Mesh tangents already exist " ) ;
else TRACELOG ( LOG_WARNING , " MESH: Tangents data already available, re-writting " ) ;
Vector3 * tan1 = ( Vector3 * ) RL_MALLOC ( mesh - > vertexCount * sizeof ( Vector3 ) ) ;
Vector3 * tan2 = ( Vector3 * ) RL_MALLOC ( mesh - > vertexCount * sizeof ( Vector3 ) ) ;
@ -2412,7 +2411,7 @@ void MeshTangents(Mesh *mesh)
/ / Load a new tangent attributes buffer
mesh - > vboId [ LOC_VERTEX_TANGENT ] = rlLoadAttribBuffer ( mesh - > vaoId , LOC_VERTEX_TANGENT , mesh - > tangents , mesh - > vertexCount * 4 * sizeof ( float ) , false ) ;
TRACELOG ( LOG_INFO , " Tangents computed for mesh " ) ;
TRACELOG ( LOG_INFO , " MESH: Tangents data computed for provided mesh" ) ;
}
/ / Compute mesh binormals ( aka bitangent )
@ -2852,8 +2851,8 @@ static Model LoadOBJ(const char *fileName)
unsigned int flags = TINYOBJ_FLAG_TRIANGULATE ;
int ret = tinyobj_parse_obj ( & attrib , & meshes , & meshCount , & materials , & materialCount , fileData , dataSize , flags ) ;
if ( ret ! = TINYOBJ_SUCCESS ) TRACELOG ( LOG_WARNING , " [%s] Model data could not be loaded " , fileName ) ;
else TRACELOG ( LOG_INFO , " [%s] Model data loaded successfully: %i meshes / %i materials" , fileName , meshCount , materialCount ) ;
if ( ret ! = TINYOBJ_SUCCESS ) TRACELOG ( LOG_WARNING , " MODEL: [%s] Failed to load OBJ data " , fileName ) ;
else TRACELOG ( LOG_INFO , " MODEL: [%s] OBJ data loaded successfully: %i meshes / %i materials" , fileName , meshCount , materialCount ) ;
/ / Init model meshes array
/ / TODO : Support multiple meshes . . . in the meantime , only one mesh is returned
@ -2903,8 +2902,6 @@ static Model LoadOBJ(const char *fileName)
tinyobj_vertex_index_t idx1 = attrib . faces [ 3 * f + 1 ] ;
tinyobj_vertex_index_t idx2 = attrib . faces [ 3 * f + 2 ] ;
/ / TRACELOGD ( " Face %i index: v %i/%i/%i . vt %i/%i/%i . vn %i/%i/%i \n " , f , idx0 . v_idx , idx1 . v_idx , idx2 . v_idx , idx0 . vt_idx , idx1 . vt_idx , idx2 . vt_idx , idx0 . vn_idx , idx1 . vn_idx , idx2 . vn_idx ) ;
/ / Fill vertices buffer ( float ) using vertex index of the face
for ( int v = 0 ; v < 3 ; v + + ) { mesh . vertices [ vCount + v ] = attrib . vertices [ idx0 . v_idx * 3 + v ] ; } vCount + = 3 ;
for ( int v = 0 ; v < 3 ; v + + ) { mesh . vertices [ vCount + v ] = attrib . vertices [ idx1 . v_idx * 3 + v ] ; } vCount + = 3 ;
@ -2990,15 +2987,12 @@ static Model LoadOBJ(const char *fileName)
tinyobj_attrib_free ( & attrib ) ;
tinyobj_shapes_free ( meshes , meshCount ) ;
tinyobj_materials_free ( materials , materialCount ) ;
RL_FREE ( fileData ) ;
chdir ( currentDir ) ;
}
/ / NOTE : At this point we have all model data loaded
TRACELOG ( LOG_INFO , " [%s] Model loaded successfully in RAM (CPU) " , fileName ) ;
return model ;
}
# endif
@ -3116,7 +3110,7 @@ static Model LoadIQM(const char *fileName)
if ( iqmFile = = NULL )
{
TRACELOG ( LOG_WARNING , " [%s] IQM file could not be opened " , fileName ) ;
TRACELOG ( LOG_WARNING , " FILEIO: [%s] Failed to open IQM file " , fileName ) ;
return model ;
}
@ -3124,14 +3118,14 @@ static Model LoadIQM(const char *fileName)
if ( strncmp ( iqm . magic , IQM_MAGIC , sizeof ( IQM_MAGIC ) ) )
{
TRACELOG ( LOG_WARNING , " [%s] IQM file does not seem to be valid " , fileName ) ;
TRACELOG ( LOG_WARNING , " MODEL: [%s] IQM file is not a valid model " , fileName ) ;
fclose ( iqmFile ) ;
return model ;
}
if ( iqm . version ! = IQM_VERSION )
{
TRACELOG ( LOG_WARNING , " [%s] IQM file version is not supported (%i). " , fileName , iqm . version ) ;
TRACELOG ( LOG_WARNING , " MODEL: [%s] IQM file version not supported (%i)" , fileName , iqm . version ) ;
fclose ( iqmFile ) ;
return model ;
}
@ -3433,7 +3427,7 @@ static Image LoadImageFromCgltfImage(cgltf_image *image, const char *texPath, Co
int i = 0 ;
while ( ( image - > uri [ i ] ! = ' , ' ) & & ( image - > uri [ i ] ! = 0 ) ) i + + ;
if ( image - > uri [ i ] = = 0 ) TRACELOG ( LOG_WARNING , " CGLTF Image: Invalid data URI " ) ;
if ( image - > uri [ i ] = = 0 ) TRACELOG ( LOG_WARNING , " IMAGE: glTF data URI is not a valid image " ) ;
else
{
int size ;
@ -3526,7 +3520,7 @@ static Model LoadGLTF(const char *fileName)
if ( gltfFile = = NULL )
{
TRACELOG ( LOG_WARNING , " [%s] glTF file could not be opened " , fileName ) ;
TRACELOG ( LOG_WARNING , " FILEIO: [%s] Failed to open glTF file " , fileName ) ;
return model ;
}
@ -3546,11 +3540,12 @@ static Model LoadGLTF(const char *fileName)
if ( result = = cgltf_result_success )
{
TRACELOG ( LOG_INFO , " [%s][%s] Model meshes/materials: %i/%i " , fileName , ( data - > file_type = = 2 ) ? " glb " : " gltf " , data - > meshes_count , data - > materials_count ) ;
TRACELOG ( LOG_INFO , " MODEL: [%s] glTF meshes (%s) count: %i " , fileName , ( data - > file_type = = 2 ) ? " glb " : " gltf " , data - > meshes_count , data - > materials_count ) ;
TRACELOG ( LOG_INFO , " MODEL: [%s] glTF materials (%s) count: %i " , fileName , ( data - > file_type = = 2 ) ? " glb " : " gltf " , data - > meshes_count , data - > materials_count ) ;
/ / Read data buffers
result = cgltf_load_buffers ( & options , data , fileName ) ;
if ( result ! = cgltf_result_success ) TRACELOG ( LOG_INFO , " [%s][%s] Error loading mesh/material buffers" , fileName, ( data - > file_type = = 2 ) ? " glb " : " gltf " ) ;
if ( result ! = cgltf_result_success ) TRACELOG ( LOG_INFO , " MODEL: [%s] Failed to load mesh/material buffers" , fileName ) ;
int primitivesCount = 0 ;
@ -3588,8 +3583,7 @@ static Model LoadGLTF(const char *fileName)
UnloadImage ( albedo ) ;
}
/ / Set tint to white after it ' s been used by Albedo
tint = WHITE ;
tint = WHITE ; / / Set tint to white after it ' s been used by Albedo
if ( data - > materials [ i ] . pbr_metallic_roughness . metallic_roughness_texture . texture )
{
@ -3605,8 +3599,6 @@ static Model LoadGLTF(const char *fileName)
UnloadImage ( metallicRoughness ) ;
}
if ( data - > materials [ i ] . normal_texture . texture )
{
Image normalImage = LoadImageFromCgltfImage ( data - > materials [ i ] . normal_texture . texture - > image , texPath , tint ) ;
@ -3625,9 +3617,9 @@ static Model LoadGLTF(const char *fileName)
{
Image emissiveImage = LoadImageFromCgltfImage ( data - > materials [ i ] . emissive_texture . texture - > image , texPath , tint ) ;
model . materials [ i ] . maps [ MAP_EMISSION ] . texture = LoadTextureFromImage ( emissiveImage ) ;
tint . r = ( unsigned char ) ( data - > materials [ i ] . emissive_factor [ 0 ] * 255 ) ;
tint . g = ( unsigned char ) ( data - > materials [ i ] . emissive_factor [ 1 ] * 255 ) ;
tint . b = ( unsigned char ) ( data - > materials [ i ] . emissive_factor [ 2 ] * 255 ) ;
tint . r = ( unsigned char ) ( data - > materials [ i ] . emissive_factor [ 0 ] * 255 ) ;
tint . g = ( unsigned char ) ( data - > materials [ i ] . emissive_factor [ 1 ] * 255 ) ;
tint . b = ( unsigned char ) ( data - > materials [ i ] . emissive_factor [ 2 ] * 255 ) ;
model . materials [ i ] . maps [ MAP_EMISSION ] . color = tint ;
UnloadImage ( emissiveImage ) ;
}
@ -3671,7 +3663,7 @@ static Model LoadGLTF(const char *fileName)
else
{
/ / TODO : Support normalized unsigned byte / unsigned short texture coordinates
TRACELOG ( LOG_WARNING , " [%s] Texture coordinates must be float " , fileName ) ;
TRACELOG ( LOG_WARNING , " MODEL: [%s] gl TF t exture coordinates must be float" , fileName ) ;
}
}
}
@ -3689,7 +3681,7 @@ static Model LoadGLTF(const char *fileName)
else
{
/ / TODO : Support unsigned byte / unsigned int
TRACELOG ( LOG_WARNING , " [%s] Indices must be unsigned short" , fileName ) ;
TRACELOG ( LOG_WARNING , " MODEL: [%s] glTF index data must be unsigned short" , fileName ) ;
}
}
else
@ -3714,7 +3706,7 @@ static Model LoadGLTF(const char *fileName)
cgltf_free ( data ) ;
}
else TRACELOG ( LOG_WARNING , " [%s] glTF data could not be loaded " , fileName ) ;
else TRACELOG ( LOG_WARNING , " MODEL: [%s] Failed to load glTF data " , fileName ) ;
RL_FREE ( buffer ) ;