Browse Source

[wip] the null fields/mappings are a PAIN

scenedata-optimizations
Vladimír Vondruš 4 years ago
parent
commit
da27aaca3b
  1. 2
      src/Magnum/SceneTools/Implementation/convertToSingleFunctionObjects.h
  2. 49
      src/Magnum/SceneTools/Test/CombineTest.cpp

2
src/Magnum/SceneTools/Implementation/convertToSingleFunctionObjects.h

@ -154,6 +154,8 @@ inline Trade::SceneData convertToSingleFunctionObjects(const Trade::SceneData& s
- fields that don't actually get their object mapping touched - fields that don't actually get their object mapping touched
during the process (and then all fields that share object during the process (and then all fields that share object
mapping with them) */ mapping with them) */
#warning removing implicit mapping from here will mean the null will get treated as a placeholder by copy(), not wanted
#warning it needs to restore the field instead
} else fields[i] = Trade::SceneFieldData{field.name(), field.mappingType(), field.mappingData(), field.fieldType(), field.fieldData(), field.fieldArraySize(), field.flags() & ~Trade::SceneFieldFlag::ImplicitMapping}; } else fields[i] = Trade::SceneFieldData{field.name(), field.mappingType(), field.mappingData(), field.fieldType(), field.fieldData(), field.fieldArraySize(), field.flags() & ~Trade::SceneFieldFlag::ImplicitMapping};
} }

49
src/Magnum/SceneTools/Test/CombineTest.cpp

@ -41,6 +41,9 @@ struct CombineTest: TestSuite::Tester {
void objectsShared(); void objectsShared();
void objectsPlaceholderFieldPlaceholder(); void objectsPlaceholderFieldPlaceholder();
void objectSharedFieldPlaceholder(); void objectSharedFieldPlaceholder();
void implicitNullMapping();
void trivialNullParent();
}; };
struct { struct {
@ -60,7 +63,10 @@ CombineTest::CombineTest() {
addTests({&CombineTest::alignment, addTests({&CombineTest::alignment,
&CombineTest::objectsShared, &CombineTest::objectsShared,
&CombineTest::objectsPlaceholderFieldPlaceholder, &CombineTest::objectsPlaceholderFieldPlaceholder,
&CombineTest::objectSharedFieldPlaceholder}); &CombineTest::objectSharedFieldPlaceholder,
&CombineTest::implicitNullMapping,
&CombineTest::trivialNullParent});
} }
using namespace Math::Literals; using namespace Math::Literals;
@ -324,6 +330,47 @@ void CombineTest::objectSharedFieldPlaceholder() {
CORRADE_COMPARE(scene.field(Trade::SceneField::MeshMaterial).stride()[0], 4); CORRADE_COMPARE(scene.field(Trade::SceneField::MeshMaterial).stride()[0], 4);
} }
void CombineTest::implicitNullMapping() {
const Short parentFieldData[]{-1, 0, 0};
const UnsignedByte meshFieldData[]{3, 5};
Trade::SceneData scene = Implementation::combine(Trade::SceneMappingType::UnsignedShort, 167, Containers::arrayView({
/* If the field has any flags, it shouldn't be treated as a
placeholder */
#warning or maybe it should be preserved? yeah
Trade::SceneFieldData{Trade::SceneField::Mesh, Containers::ArrayView<UnsignedByte>{nullptr, Containers::arraySize(meshFieldData)}, Containers::arrayView(meshFieldData), Trade::SceneFieldFlag::ImplicitMapping},
Trade::SceneFieldData{Trade::SceneField::Parent, Containers::ArrayView<UnsignedShort>{nullptr, Containers::arraySize(parentFieldData)}, Containers::arrayView(parentFieldData), Trade::SceneFieldFlag::ImplicitMapping}
}));
CORRADE_COMPARE(scene.mappingBound(), 167);
CORRADE_COMPARE(scene.fieldCount(), 2);
CORRADE_COMPARE(scene.fieldName(0), Trade::SceneField::Mesh);
CORRADE_COMPARE(scene.fieldFlags(0), Trade::SceneFieldFlag::ImplicitMapping);
CORRADE_COMPARE(scene.fieldType(0), Trade::SceneFieldType::UnsignedByte);
CORRADE_COMPARE(scene.fieldArraySize(0), 0);
CORRADE_COMPARE_AS(scene.mapping<UnsignedShort>(0), Containers::arrayView<UnsignedShort>({
0, 1, 2
}), TestSuite::Compare::Container);
CORRADE_COMPARE_AS(scene.field<UnsignedByte>(0),
Containers::arrayView(meshFieldData),
TestSuite::Compare::Container);
CORRADE_COMPARE(scene.fieldName(1), Trade::SceneField::Parent);
CORRADE_COMPARE(scene.fieldFlags(1), Trade::SceneFieldFlag::ImplicitMapping);
CORRADE_COMPARE(scene.fieldType(1), Trade::SceneFieldType::Short);
CORRADE_COMPARE(scene.fieldArraySize(1), 0);
CORRADE_COMPARE_AS(scene.mapping<UnsignedShort>(1), Containers::arrayView<UnsignedShort>({
0, 1
}), TestSuite::Compare::Container);
CORRADE_COMPARE_AS(scene.field<UnsignedByte>(1),
Containers::arrayView(meshFieldData),
TestSuite::Compare::Container);
}
void CombineTest::trivialNullParent() {
}
}}}} }}}}
CORRADE_TEST_MAIN(Magnum::SceneTools::Test::CombineTest) CORRADE_TEST_MAIN(Magnum::SceneTools::Test::CombineTest)

Loading…
Cancel
Save