Browse Source

Trade: add SceneData::fieldSizeBound().

Like mappingBound(), but instead of giving an upper bound for object
count, gives an upper bound for field size.
pull/589/head
Vladimír Vondruš 4 years ago
parent
commit
66a57088b1
  1. 7
      src/Magnum/Trade/SceneData.cpp
  2. 17
      src/Magnum/Trade/SceneData.h
  3. 3
      src/Magnum/Trade/Test/SceneDataTest.cpp

7
src/Magnum/Trade/SceneData.cpp

@ -851,6 +851,13 @@ Containers::StridedArrayView1D<const void> SceneData::fieldDataFieldViewInternal
return fieldDataFieldViewInternal(field, 0, field._size);
}
std::size_t SceneData::fieldSizeBound() const {
std::size_t out = 0;
for(const SceneFieldData& i: _fields)
out = Math::max(out, std::size_t(i._size));
return out;
}
SceneFieldData SceneData::fieldData(const UnsignedInt id) const {
CORRADE_ASSERT(id < _fields.size(),
"Trade::SceneData::fieldData(): index" << id << "out of range for" << _fields.size() << "fields", SceneFieldData{});

17
src/Magnum/Trade/SceneData.h

@ -1304,6 +1304,11 @@ class MAGNUM_TRADE_EXPORT SceneData {
* @m_since_latest
*
* Upper bound on object mapping indices of all fields in the scene.
* Note that an object can have a certain field associated with
* it multiple times with different values (for example an object
* having multiple meshes), and thus a field size can be larger than
* @ref mappingBound() --- see @ref fieldSizeBound() for an upper
* bound for all field sizes.
* @see @ref fieldCount(), @ref fieldSize()
*/
UnsignedLong mappingBound() const { return _mappingBound; }
@ -1320,6 +1325,18 @@ class MAGNUM_TRADE_EXPORT SceneData {
*/
UnsignedInt fieldCount() const { return _fields.size(); }
/**
* @brief Field size bound
* @m_since_latest
*
* A maximum of all @ref fieldSize() or @cpp 0 @ce for a scene with no
* fields. Note that an object can have a certain field associated with
* it multiple times with different values (for example an object
* having multiple meshes), and thus a field size can be larger than
* @ref mappingBound().
*/
std::size_t fieldSizeBound() const;
/**
* @brief Raw field metadata
* @m_since_latest

3
src/Magnum/Trade/Test/SceneDataTest.cpp

@ -1367,6 +1367,7 @@ void SceneDataTest::construct() {
CORRADE_COMPARE(scene.mappingBound(), 8);
CORRADE_COMPARE(scene.mappingType(), SceneMappingType::UnsignedShort);
CORRADE_COMPARE(scene.fieldCount(), 4);
CORRADE_COMPARE(scene.fieldSizeBound(), 5);
CORRADE_COMPARE(scene.importerState(), &importerState);
/* is2D() / is3D() exhaustively tested in transformations*DAsArray[TRS]()
@ -1608,6 +1609,7 @@ void SceneDataTest::constructZeroFields() {
CORRADE_COMPARE(scene.mappingBound(), 37563);
CORRADE_COMPARE(scene.mappingType(), SceneMappingType::UnsignedShort);
CORRADE_COMPARE(scene.fieldCount(), 0);
CORRADE_COMPARE(scene.fieldSizeBound(), 0);
CORRADE_VERIFY(!scene.is2D());
CORRADE_VERIFY(!scene.is3D());
}
@ -1626,6 +1628,7 @@ void SceneDataTest::constructZeroObjects() {
CORRADE_COMPARE(scene.mappingBound(), 0);
CORRADE_COMPARE(scene.mappingType(), SceneMappingType::UnsignedInt);
CORRADE_COMPARE(scene.fieldCount(), 2);
CORRADE_COMPARE(scene.fieldSizeBound(), 0);
/* Field property access by name */
CORRADE_COMPARE(scene.fieldType(SceneField::Mesh), SceneFieldType::UnsignedShort);

Loading…
Cancel
Save