Skip to content

Commit da27aac

Browse files
committed
[wip] the null fields/mappings are a PAIN
1 parent 3e28d8f commit da27aac

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

src/Magnum/SceneTools/Implementation/convertToSingleFunctionObjects.h

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

src/Magnum/SceneTools/Test/CombineTest.cpp

+48-1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ struct CombineTest: TestSuite::Tester {
4141
void objectsShared();
4242
void objectsPlaceholderFieldPlaceholder();
4343
void objectSharedFieldPlaceholder();
44+
45+
void implicitNullMapping();
46+
void trivialNullParent();
4447
};
4548

4649
struct {
@@ -60,7 +63,10 @@ CombineTest::CombineTest() {
6063
addTests({&CombineTest::alignment,
6164
&CombineTest::objectsShared,
6265
&CombineTest::objectsPlaceholderFieldPlaceholder,
63-
&CombineTest::objectSharedFieldPlaceholder});
66+
&CombineTest::objectSharedFieldPlaceholder,
67+
68+
&CombineTest::implicitNullMapping,
69+
&CombineTest::trivialNullParent});
6470
}
6571

6672
using namespace Math::Literals;
@@ -324,6 +330,47 @@ void CombineTest::objectSharedFieldPlaceholder() {
324330
CORRADE_COMPARE(scene.field(Trade::SceneField::MeshMaterial).stride()[0], 4);
325331
}
326332

333+
void CombineTest::implicitNullMapping() {
334+
const Short parentFieldData[]{-1, 0, 0};
335+
const UnsignedByte meshFieldData[]{3, 5};
336+
337+
Trade::SceneData scene = Implementation::combine(Trade::SceneMappingType::UnsignedShort, 167, Containers::arrayView({
338+
/* If the field has any flags, it shouldn't be treated as a
339+
placeholder */
340+
#warning or maybe it should be preserved? yeah
341+
Trade::SceneFieldData{Trade::SceneField::Mesh, Containers::ArrayView<UnsignedByte>{nullptr, Containers::arraySize(meshFieldData)}, Containers::arrayView(meshFieldData), Trade::SceneFieldFlag::ImplicitMapping},
342+
Trade::SceneFieldData{Trade::SceneField::Parent, Containers::ArrayView<UnsignedShort>{nullptr, Containers::arraySize(parentFieldData)}, Containers::arrayView(parentFieldData), Trade::SceneFieldFlag::ImplicitMapping}
343+
}));
344+
345+
CORRADE_COMPARE(scene.mappingBound(), 167);
346+
CORRADE_COMPARE(scene.fieldCount(), 2);
347+
348+
CORRADE_COMPARE(scene.fieldName(0), Trade::SceneField::Mesh);
349+
CORRADE_COMPARE(scene.fieldFlags(0), Trade::SceneFieldFlag::ImplicitMapping);
350+
CORRADE_COMPARE(scene.fieldType(0), Trade::SceneFieldType::UnsignedByte);
351+
CORRADE_COMPARE(scene.fieldArraySize(0), 0);
352+
CORRADE_COMPARE_AS(scene.mapping<UnsignedShort>(0), Containers::arrayView<UnsignedShort>({
353+
0, 1, 2
354+
}), TestSuite::Compare::Container);
355+
CORRADE_COMPARE_AS(scene.field<UnsignedByte>(0),
356+
Containers::arrayView(meshFieldData),
357+
TestSuite::Compare::Container);
358+
359+
CORRADE_COMPARE(scene.fieldName(1), Trade::SceneField::Parent);
360+
CORRADE_COMPARE(scene.fieldFlags(1), Trade::SceneFieldFlag::ImplicitMapping);
361+
CORRADE_COMPARE(scene.fieldType(1), Trade::SceneFieldType::Short);
362+
CORRADE_COMPARE(scene.fieldArraySize(1), 0);
363+
CORRADE_COMPARE_AS(scene.mapping<UnsignedShort>(1), Containers::arrayView<UnsignedShort>({
364+
0, 1
365+
}), TestSuite::Compare::Container);
366+
CORRADE_COMPARE_AS(scene.field<UnsignedByte>(1),
367+
Containers::arrayView(meshFieldData),
368+
TestSuite::Compare::Container);
369+
}
370+
371+
void CombineTest::trivialNullParent() {
372+
}
373+
327374
}}}}
328375

329376
CORRADE_TEST_MAIN(Magnum::SceneTools::Test::CombineTest)

0 commit comments

Comments
 (0)