mirror of
https://github.com/minetest/minetest.git
synced 2024-07-04 15:05:27 +02:00
Fix sparse accessor handling in tiniergltf
This commit is contained in:
parent
35466b227a
commit
3467d91730
@ -109,8 +109,9 @@ struct AccessorSparseIndices {
|
|||||||
UNSIGNED_SHORT,
|
UNSIGNED_SHORT,
|
||||||
UNSIGNED_INT,
|
UNSIGNED_INT,
|
||||||
};
|
};
|
||||||
static std::size_t componentSize(ComponentType type) {
|
ComponentType componentType;
|
||||||
switch (type) {
|
std::size_t componentSize() const {
|
||||||
|
switch (componentType) {
|
||||||
case ComponentType::UNSIGNED_BYTE:
|
case ComponentType::UNSIGNED_BYTE:
|
||||||
return 1;
|
return 1;
|
||||||
case ComponentType::UNSIGNED_SHORT:
|
case ComponentType::UNSIGNED_SHORT:
|
||||||
@ -120,9 +121,8 @@ struct AccessorSparseIndices {
|
|||||||
}
|
}
|
||||||
throw std::logic_error("invalid component type");
|
throw std::logic_error("invalid component type");
|
||||||
}
|
}
|
||||||
ComponentType componentType;
|
|
||||||
std::size_t elementSize() const {
|
std::size_t elementSize() const {
|
||||||
return componentSize(componentType);
|
return componentSize();
|
||||||
}
|
}
|
||||||
AccessorSparseIndices(const Json::Value &o)
|
AccessorSparseIndices(const Json::Value &o)
|
||||||
: bufferView(as<std::size_t>(o["bufferView"]))
|
: bufferView(as<std::size_t>(o["bufferView"]))
|
||||||
@ -1237,7 +1237,7 @@ struct GlTF {
|
|||||||
check(view.byteOffset <= buf.byteLength - view.byteLength);
|
check(view.byteOffset <= buf.byteLength - view.byteLength);
|
||||||
});
|
});
|
||||||
|
|
||||||
const auto checkAccessor = [&](const Accessor &accessor,
|
const auto checkAccessor = [&](const auto &accessor,
|
||||||
std::size_t bufferView, std::size_t byteOffset, std::size_t count) {
|
std::size_t bufferView, std::size_t byteOffset, std::size_t count) {
|
||||||
const BufferView &view = bufferViews->at(bufferView);
|
const BufferView &view = bufferViews->at(bufferView);
|
||||||
if (view.byteStride.has_value())
|
if (view.byteStride.has_value())
|
||||||
@ -1251,9 +1251,9 @@ struct GlTF {
|
|||||||
if (accessor.bufferView.has_value())
|
if (accessor.bufferView.has_value())
|
||||||
checkAccessor(accessor, *accessor.bufferView, accessor.byteOffset, accessor.count);
|
checkAccessor(accessor, *accessor.bufferView, accessor.byteOffset, accessor.count);
|
||||||
if (accessor.sparse.has_value()) {
|
if (accessor.sparse.has_value()) {
|
||||||
const auto indices = accessor.sparse->indices;
|
const auto &indices = accessor.sparse->indices;
|
||||||
checkAccessor(accessor, indices.bufferView, indices.byteOffset, accessor.sparse->count);
|
checkAccessor(indices, indices.bufferView, indices.byteOffset, accessor.sparse->count);
|
||||||
const auto values = accessor.sparse->values;
|
const auto &values = accessor.sparse->values;
|
||||||
checkAccessor(accessor, values.bufferView, values.byteOffset, accessor.sparse->count);
|
checkAccessor(accessor, values.bufferView, values.byteOffset, accessor.sparse->count);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user