|
|
@ -1,7 +1,7 @@ |
|
|
|
/** |
|
|
|
* cgltf - a single-file glTF 2.0 parser written in C99. |
|
|
|
* |
|
|
|
* Version: 1.13 |
|
|
|
* Version: 1.14 |
|
|
|
* |
|
|
|
* Website: https://github.com/jkuhlmann/cgltf |
|
|
|
* |
|
|
@ -395,6 +395,8 @@ typedef struct cgltf_texture |
|
|
|
cgltf_sampler* sampler; |
|
|
|
cgltf_bool has_basisu; |
|
|
|
cgltf_image* basisu_image; |
|
|
|
cgltf_bool has_webp; |
|
|
|
cgltf_image* webp_image; |
|
|
|
cgltf_extras extras; |
|
|
|
cgltf_size extensions_count; |
|
|
|
cgltf_extension* extensions; |
|
|
@ -1697,7 +1699,20 @@ cgltf_result cgltf_validate(cgltf_data* data) |
|
|
|
{ |
|
|
|
if (data->nodes[i].weights && data->nodes[i].mesh) |
|
|
|
{ |
|
|
|
CGLTF_ASSERT_IF (data->nodes[i].mesh->primitives_count && data->nodes[i].mesh->primitives[0].targets_count != data->nodes[i].weights_count, cgltf_result_invalid_gltf); |
|
|
|
CGLTF_ASSERT_IF(data->nodes[i].mesh->primitives_count && data->nodes[i].mesh->primitives[0].targets_count != data->nodes[i].weights_count, cgltf_result_invalid_gltf); |
|
|
|
} |
|
|
|
|
|
|
|
if (data->nodes[i].has_mesh_gpu_instancing) |
|
|
|
{ |
|
|
|
CGLTF_ASSERT_IF(data->nodes[i].mesh == NULL, cgltf_result_invalid_gltf); |
|
|
|
CGLTF_ASSERT_IF(data->nodes[i].mesh_gpu_instancing.attributes_count == 0, cgltf_result_invalid_gltf); |
|
|
|
|
|
|
|
cgltf_accessor* first = data->nodes[i].mesh_gpu_instancing.attributes[0].data; |
|
|
|
|
|
|
|
for (cgltf_size k = 0; k < data->nodes[i].mesh_gpu_instancing.attributes_count; ++k) |
|
|
|
{ |
|
|
|
CGLTF_ASSERT_IF(data->nodes[i].mesh_gpu_instancing.attributes[k].data->count != first->count, cgltf_result_invalid_gltf); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -4538,6 +4553,34 @@ static int cgltf_parse_json_texture(cgltf_options* options, jsmntok_t const* tok |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else if (cgltf_json_strcmp(tokens + i, json_chunk, "EXT_texture_webp") == 0) |
|
|
|
{ |
|
|
|
out_texture->has_webp = 1; |
|
|
|
++i; |
|
|
|
CGLTF_CHECK_TOKTYPE(tokens[i], JSMN_OBJECT); |
|
|
|
int num_properties = tokens[i].size; |
|
|
|
++i; |
|
|
|
|
|
|
|
for (int t = 0; t < num_properties; ++t) |
|
|
|
{ |
|
|
|
CGLTF_CHECK_KEY(tokens[i]); |
|
|
|
|
|
|
|
if (cgltf_json_strcmp(tokens + i, json_chunk, "source") == 0) |
|
|
|
{ |
|
|
|
++i; |
|
|
|
out_texture->webp_image = CGLTF_PTRINDEX(cgltf_image, cgltf_json_to_int(tokens + i, json_chunk)); |
|
|
|
++i; |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
i = cgltf_skip_json(tokens, i + 1); |
|
|
|
} |
|
|
|
if (i < 0) |
|
|
|
{ |
|
|
|
return i; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
i = cgltf_parse_json_unprocessed_extension(options, tokens, i, json_chunk, &(out_texture->extensions[out_texture->extensions_count++])); |
|
|
@ -6548,6 +6591,7 @@ static int cgltf_fixup_pointers(cgltf_data* data) |
|
|
|
{ |
|
|
|
CGLTF_PTRFIXUP(data->textures[i].image, data->images, data->images_count); |
|
|
|
CGLTF_PTRFIXUP(data->textures[i].basisu_image, data->images, data->images_count); |
|
|
|
CGLTF_PTRFIXUP(data->textures[i].webp_image, data->images, data->images_count); |
|
|
|
CGLTF_PTRFIXUP(data->textures[i].sampler, data->samplers, data->samplers_count); |
|
|
|
} |
|
|
|
|
|
|
|