diff --git a/src/Magnum/MaterialTools/Filter.cpp b/src/Magnum/MaterialTools/Filter.cpp index 7803df824..2ff9faaeb 100644 --- a/src/Magnum/MaterialTools/Filter.cpp +++ b/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 diff --git a/src/Magnum/MaterialTools/Test/FilterTest.cpp b/src/Magnum/MaterialTools/Test/FilterTest.cpp index d4e712ccf..89d98330a 100644 --- a/src/Magnum/MaterialTools/Test/FilterTest.cpp +++ b/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)