Skip to content

Commit

Permalink
Fix determineGltfFileType
Browse files Browse the repository at this point in the history
  • Loading branch information
spnda committed Mar 3, 2024
1 parent 50711c6 commit 5161dc0
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 17 deletions.
27 changes: 15 additions & 12 deletions examples/gl_viewer/gl_viewer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -333,28 +333,31 @@ bool loadGltf(Viewer* viewer, std::string_view cPath) {
std::cout << "Loading " << cPath << '\n';

// Parse the glTF file and get the constructed asset
{
{
static constexpr auto supportedExtensions =
fastgltf::Extensions::KHR_mesh_quantization |
fastgltf::Extensions::KHR_texture_transform |
fastgltf::Extensions::KHR_materials_variants;

fastgltf::Parser parser(supportedExtensions);
fastgltf::Parser parser(supportedExtensions);

auto path = std::filesystem::path{cPath};
auto path = std::filesystem::path{cPath};

constexpr auto gltfOptions =
fastgltf::Options::DontRequireValidAssetMember |
fastgltf::Options::AllowDouble |
fastgltf::Options::LoadGLBBuffers |
fastgltf::Options::LoadExternalBuffers |
fastgltf::Options::LoadExternalImages |
constexpr auto gltfOptions =
fastgltf::Options::DontRequireValidAssetMember |
fastgltf::Options::AllowDouble |
fastgltf::Options::LoadGLBBuffers |
fastgltf::Options::LoadExternalBuffers |
fastgltf::Options::LoadExternalImages |
fastgltf::Options::GenerateMeshIndices;

fastgltf::GltfDataBuffer data;
data.loadFromFile(path);
fastgltf::GltfFileStream data(path);
if (!data.isOpen()) {
std::cerr << "Failed to open glTF file: " << path << '\n';
return false;
}

auto asset = parser.loadGltf(&data, path.parent_path(), gltfOptions);
auto asset = parser.loadGltf(data, path.parent_path(), gltfOptions);
if (asset.error() != fastgltf::Error::None) {
std::cerr << "Failed to load glTF: " << fastgltf::getErrorMessage(asset.error()) << '\n';
return false;
Expand Down
17 changes: 12 additions & 5 deletions src/fastgltf.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3754,6 +3754,7 @@ std::size_t fg::GltfDataBuffer::totalSize() {

fg::GltfFileStream::GltfFileStream(const std::filesystem::path &path) : fileStream(path, std::ios::binary) {
fileSize = std::filesystem::file_size(path);
reset();
}

bool fg::GltfFileStream::isOpen() const {
Expand Down Expand Up @@ -3840,24 +3841,30 @@ bool fg::AndroidGltfDataBuffer::loadFromAndroidAsset(const fs::path& path, std::

#pragma region Parser
fastgltf::GltfType fg::determineGltfFileType(GltfDataGetter& data) {
GltfType ret = GltfType::Invalid;

// We'll try and read a BinaryGltfHeader from the buffer to see if the magic is correct.
BinaryGltfHeader header = {};
data.read(&header, sizeof header);
if (header.magic == binaryGltfHeaderMagic) {
return GltfType::GLB;
ret = GltfType::GLB;
}
data.reset();

// First, check if any of the first four characters is a '{'.
// Check if any of the first four characters is a '{'.
std::array<std::uint8_t, 4> begin = {};
data.read(begin.data(), begin.size());
for (const auto& i : begin) {
if ((char)i == ' ')
continue;
if ((char)i == '{')
return GltfType::glTF;
if ((char)i == '{') {
ret = GltfType::glTF;
break;
}
}

return GltfType::Invalid;
data.reset();
return ret;
}

fg::Parser::Parser(Extensions extensionsToLoad) noexcept {
Expand Down

0 comments on commit 5161dc0

Please sign in to comment.