@@ -828,26 +828,40 @@ static std::shared_ptr<ms::Material> loadMaterial(
828828 flags.wrapping = *wrap_t_mode;
829829 }
830830
831- if (strncmp (img.uri , " data:" , 5 ) == 0 ) {
832- const char * comma = strchr (img.uri , ' ,' );
833-
834- if (comma && comma - img.uri >= 7 && strncmp (comma - 7 , " ;base64" , 7 ) == 0 ) {
835- auto buffer = bytesFromBase64 (comma + 1 );
836-
837- return TextureLoader::load (
838- assets,
839- name,
840- buffer.data (),
841- buffer.size (),
842- flags
843- );
844- } else {
845- throw ModelLoadError {" unknown data uri" };
831+ if (img.uri == nullptr ) {
832+ if (!img.buffer_view ) {
833+ throw ModelLoadError {" texture has no uri and no buffer view" };
846834 }
847835
836+ return TextureLoader::load (
837+ assets,
838+ name,
839+ cgltf_buffer_view_data (img.buffer_view ),
840+ img.buffer_view ->size
841+ );
842+
848843 } else {
849- const auto path = base_path / fs::path (img.uri );
850- return TextureLoader::load (assets, path, flags);
844+ if (strncmp (img.uri , " data:" , 5 ) == 0 ) {
845+ const char * comma = strchr (img.uri , ' ,' );
846+
847+ if (comma && comma - img.uri >= 7 && strncmp (comma - 7 , " ;base64" , 7 ) == 0 ) {
848+ auto buffer = bytesFromBase64 (comma + 1 );
849+
850+ return TextureLoader::load (
851+ assets,
852+ name,
853+ buffer.data (),
854+ buffer.size (),
855+ flags
856+ );
857+ } else {
858+ throw ModelLoadError {" unknown data uri" };
859+ }
860+
861+ } else {
862+ const auto path = base_path / fs::path (img.uri );
863+ return TextureLoader::load (assets, path, flags);
864+ }
851865 }
852866 };
853867
0 commit comments