Browse Source

MaterialTools: fix filterAttributes() asserting with empty input.

The internal assert was too restrictive, remove.
pull/601/head
Vladimír Vondruš 3 years ago
parent
commit
0980b3b78c
  1. 2
      src/Magnum/MaterialTools/Filter.cpp
  2. 25
      src/Magnum/MaterialTools/Test/FilterTest.cpp

2
src/Magnum/MaterialTools/Filter.cpp

@ -42,8 +42,6 @@ namespace {
bits for all attributes in filtered-out layers,
- both can't be nullptr */
Trade::MaterialData filterAttributesLayersImplementation(const Trade::MaterialData& material, const Containers::BitArrayView inputAttributesToKeep, const Containers::BitArrayView inputLayersToKeep) {
CORRADE_INTERNAL_ASSERT(inputAttributesToKeep.data() || inputLayersToKeep.data());
const std::size_t totalAttributeCount = material.attributeDataOffset(material.layerCount());
/* Generate the input attribute bit array or make a mutable copy. Using an

25
src/Magnum/MaterialTools/Test/FilterTest.cpp

@ -50,6 +50,8 @@ struct FilterTest: TestSuite::Tester {
void attributesLayers();
void attributesLayersRemoveBaseLayer();
void attributesLayersWrongBitCount();
void emptyInput();
};
FilterTest::FilterTest() {
@ -63,7 +65,9 @@ FilterTest::FilterTest() {
&FilterTest::attributesLayers,
&FilterTest::attributesLayersRemoveBaseLayer,
&FilterTest::attributesLayersWrongBitCount});
&FilterTest::attributesLayersWrongBitCount,
&FilterTest::emptyInput});
}
using namespace Math::Literals;
@ -318,6 +322,25 @@ void FilterTest::attributesLayersWrongBitCount() {
"MaterialTools::filterAttributesLayers(): expected 2 layer bits but got 3\n");
}
void FilterTest::emptyInput() {
Trade::MaterialData empty{Trade::MaterialType::PbrClearCoat, {}};
/* We have no attributes but we always have one implicit layer */
const bool yes[1]{};
Containers::BitArrayView layersToKeep{yes, 0, 1};
/* It shouldn't assert or do any other crazy thing */
CORRADE_COMPARE_AS(filterAttributes(empty, nullptr),
empty,
DebugTools::CompareMaterial);
CORRADE_COMPARE_AS(filterLayers(empty, layersToKeep),
empty,
DebugTools::CompareMaterial);
CORRADE_COMPARE_AS(filterAttributesLayers(empty, nullptr, layersToKeep),
empty,
DebugTools::CompareMaterial);
}
}}}}
CORRADE_TEST_MAIN(Magnum::MaterialTools::Test::FilterTest)

Loading…
Cancel
Save