in GLTFSDK.Samples/Deserialize/Source/main.cpp [128:186]
void PrintResourceInfo(const Document& document, const GLTFResourceReader& resourceReader)
{
// Use the resource reader to get each mesh primitive's position data
for (const auto& mesh : document.meshes.Elements())
{
std::cout << "Mesh: " << mesh.id << "\n";
for (const auto& meshPrimitive : mesh.primitives)
{
std::string accessorId;
if (meshPrimitive.TryGetAttributeAccessorId(ACCESSOR_POSITION, accessorId))
{
const Accessor& accessor = document.accessors.Get(accessorId);
const auto data = resourceReader.ReadBinaryData<float>(document, accessor);
const auto dataByteLength = data.size() * sizeof(float);
std::cout << "MeshPrimitive: " << dataByteLength << " bytes of position data\n";
}
}
std::cout << "\n";
}
// Use the resource reader to get each image's data
for (const auto& image : document.images.Elements())
{
std::string filename;
if (image.uri.empty())
{
assert(!image.bufferViewId.empty());
auto& bufferView = document.bufferViews.Get(image.bufferViewId);
auto& buffer = document.buffers.Get(bufferView.bufferId);
filename += buffer.uri; //NOTE: buffer uri is empty if image is stored in GLB binary chunk
}
else if (IsUriBase64(image.uri))
{
filename = "Data URI";
}
else
{
filename = image.uri;
}
auto data = resourceReader.ReadBinaryData(document, image);
std::cout << "Image: " << image.id << "\n";
std::cout << "Image: " << data.size() << " bytes of image data\n";
if (!filename.empty())
{
std::cout << "Image filename: " << filename << "\n\n";
}
}
}