Browse Source

Trade: fix SceneData object view retrieval & test it more thoroughly.

pull/525/head
Vladimír Vondruš 5 years ago
parent
commit
605d72c86c
  1. 2
      src/Magnum/Trade/SceneData.cpp
  2. 50
      src/Magnum/Trade/Test/SceneDataTest.cpp

2
src/Magnum/Trade/SceneData.cpp

@ -782,7 +782,7 @@ Containers::StridedArrayView1D<const void> SceneData::fieldDataObjectViewInterna
/* We're *sure* the view is correct, so faking the view size */
{static_cast<const char*>(field._isOffsetOnly ?
_data.data() + field._objectData.offset : field._objectData.pointer)
+ field._fieldStride*offset, ~std::size_t{}},
+ field._objectStride*offset, ~std::size_t{}},
size, field._objectStride};
}

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

@ -90,6 +90,7 @@ struct SceneDataTest: TestSuite::Tester {
void construct();
void constructZeroFields();
void constructZeroObjects();
void constructSpecialStrides();
void constructNotOwned();
#ifdef MAGNUM_BUILD_DEPRECATED
void constructDeprecated();
@ -271,7 +272,8 @@ SceneDataTest::SceneDataTest() {
&SceneDataTest::construct,
&SceneDataTest::constructZeroFields,
&SceneDataTest::constructZeroObjects});
&SceneDataTest::constructZeroObjects,
&SceneDataTest::constructSpecialStrides});
addInstancedTests({&SceneDataTest::constructNotOwned},
Containers::arraySize(NotOwnedData));
@ -1446,6 +1448,52 @@ void SceneDataTest::constructZeroObjects() {
CORRADE_COMPARE(scene.objects(SceneField::MeshMaterial).data(), nullptr);
}
void SceneDataTest::constructSpecialStrides() {
Containers::StridedArrayView1D<UnsignedShort> broadcastedData;
Containers::StridedArrayView1D<UnsignedShort> nonBroadcastedData;
Containers::ArrayTuple data{
{NoInit, 1, broadcastedData},
{NoInit, 4, nonBroadcastedData}
};
broadcastedData[0] = 15;
nonBroadcastedData[0] = 1;
nonBroadcastedData[1] = 2;
nonBroadcastedData[2] = 3;
nonBroadcastedData[3] = 4;
SceneFieldData broadcastedObjects{sceneFieldCustom(38),
broadcastedData.broadcasted<0>(4), nonBroadcastedData};
SceneFieldData broadcastedFields{sceneFieldCustom(39),
nonBroadcastedData, broadcastedData.broadcasted<0>(4)};
SceneFieldData flippedFields{sceneFieldCustom(40),
nonBroadcastedData.flipped<0>(), nonBroadcastedData.flipped<0>()};
SceneData scene{SceneObjectType::UnsignedShort, 8, std::move(data), {
broadcastedObjects, broadcastedFields, flippedFields
}};
CORRADE_COMPARE_AS(scene.objects<UnsignedShort>(0),
Containers::arrayView<UnsignedShort>({15, 15, 15, 15}),
TestSuite::Compare::Container);
CORRADE_COMPARE_AS(scene.field<UnsignedShort>(0),
Containers::arrayView<UnsignedShort>({1, 2, 3, 4}),
TestSuite::Compare::Container);
CORRADE_COMPARE_AS(scene.objects<UnsignedShort>(1),
Containers::arrayView<UnsignedShort>({1, 2, 3, 4}),
TestSuite::Compare::Container);
CORRADE_COMPARE_AS(scene.field<UnsignedShort>(1),
Containers::arrayView<UnsignedShort>({15, 15, 15, 15}),
TestSuite::Compare::Container);
CORRADE_COMPARE_AS(scene.objects<UnsignedShort>(2),
Containers::arrayView<UnsignedShort>({4, 3, 2, 1}),
TestSuite::Compare::Container);
CORRADE_COMPARE_AS(scene.field<UnsignedShort>(2),
Containers::arrayView<UnsignedShort>({4, 3, 2, 1}),
TestSuite::Compare::Container);
}
void SceneDataTest::constructNotOwned() {
auto&& instanceData = NotOwnedData[testCaseInstanceId()];
setTestCaseDescription(instanceData.name);

Loading…
Cancel
Save