Browse Source

MeshTools: port tests and benchmarks away from MeshData3D.

pull/371/head
Vladimír Vondruš 6 years ago
parent
commit
c07af0340f
  1. 11
      src/Magnum/MeshTools/Test/GenerateNormalsTest.cpp
  2. 48
      src/Magnum/MeshTools/Test/SubdivideRemoveDuplicatesBenchmark.cpp

11
src/Magnum/MeshTools/Test/GenerateNormalsTest.cpp

@ -37,7 +37,7 @@
#include "Magnum/MeshTools/Duplicate.h"
#include "Magnum/MeshTools/GenerateNormals.h"
#include "Magnum/Primitives/Cylinder.h"
#include "Magnum/Trade/MeshData3D.h"
#include "Magnum/Trade/MeshData.h"
namespace Magnum { namespace MeshTools { namespace Test { namespace {
@ -331,13 +331,14 @@ void GenerateNormalsTest::smoothBeveledCube() {
}
void GenerateNormalsTest::smoothCylinder() {
const Trade::MeshData3D data = Primitives::cylinderSolid(1, 5, 1.0f);
const Trade::MeshData data = Primitives::cylinderSolid(1, 5, 1.0f);
/* Output should be exactly the same as the cylinder normals */
CORRADE_COMPARE_AS(Containers::arrayView(generateSmoothNormals(
Containers::stridedArrayView(data.indices()),
Containers::stridedArrayView(data.positions(0)))),
Containers::arrayView(data.normals(0)), TestSuite::Compare::Container);
data.indices(),
data.attribute<Vector3>(Trade::MeshAttribute::Position))),
data.attribute<Vector3>(Trade::MeshAttribute::Normal),
TestSuite::Compare::Container);
}
void GenerateNormalsTest::smoothZeroAreaTriangle() {

48
src/Magnum/MeshTools/Test/SubdivideRemoveDuplicatesBenchmark.cpp

@ -23,14 +23,16 @@
DEALINGS IN THE SOFTWARE.
*/
#include <Corrade/Containers/GrowableArray.h>
#include <Corrade/TestSuite/Tester.h>
#include <Corrade/Utility/Algorithms.h>
#include "Magnum/Math/Vector4.h"
#include "Magnum/MeshTools/Duplicate.h"
#include "Magnum/MeshTools/RemoveDuplicates.h"
#include "Magnum/MeshTools/Subdivide.h"
#include "Magnum/Primitives/Icosphere.h"
#include "Magnum/Trade/MeshData3D.h"
#include "Magnum/Trade/MeshData.h"
namespace Magnum { namespace MeshTools { namespace Test { namespace {
@ -57,43 +59,69 @@ namespace {
}
void SubdivideRemoveDuplicatesBenchmark::subdivide() {
Trade::MeshData icosphere = Primitives::icosphereSolid(0);
CORRADE_BENCHMARK(3) {
Trade::MeshData3D icosphere = Primitives::icosphereSolid(0);
Containers::Array<UnsignedInt> indices;
arrayResize(indices, Containers::NoInit, icosphere.indexCount());
Utility::copy(icosphere.indices<UnsignedInt>(), indices);
Containers::Array<Vector3> positions;
arrayResize(positions, Containers::NoInit, icosphere.vertexCount());
Utility::copy(icosphere.attribute<Vector3>(Trade::MeshAttribute::Position), positions);
/* Subdivide 5 times */
for(std::size_t i = 0; i != 5; ++i)
MeshTools::subdivide(icosphere.indices(), icosphere.positions(0), interpolator);
MeshTools::subdivide(indices, positions, interpolator);
}
}
void SubdivideRemoveDuplicatesBenchmark::subdivideAndRemoveDuplicatesAfter() {
Trade::MeshData icosphere = Primitives::icosphereSolid(0);
CORRADE_BENCHMARK(3) {
Trade::MeshData3D icosphere = Primitives::icosphereSolid(0);
Containers::Array<UnsignedInt> indices;
arrayResize(indices, Containers::NoInit, icosphere.indexCount());
Utility::copy(icosphere.indices<UnsignedInt>(), indices);
Containers::Array<Vector3> positions;
arrayResize(positions, Containers::NoInit, icosphere.vertexCount());
Utility::copy(icosphere.attribute<Vector3>(Trade::MeshAttribute::Position), positions);
/* Subdivide 5 times */
for(std::size_t i = 0; i != 5; ++i)
MeshTools::subdivide(icosphere.indices(), icosphere.positions(0), interpolator);
MeshTools::subdivide(indices, positions, interpolator);
/* Remove duplicates after */
icosphere.indices() = MeshTools::duplicate(icosphere.indices(), MeshTools::removeDuplicates(icosphere.positions(0)));
arrayResize(positions, MeshTools::removeDuplicatesIndexedInPlace(
stridedArrayView(indices), stridedArrayView(positions)));
}
}
void SubdivideRemoveDuplicatesBenchmark::subdivideAndRemoveDuplicatesAfterInPlace() {
CORRADE_BENCHMARK(3) {
/* Because that's what this thing does */
Trade::MeshData3D icosphere = Primitives::icosphereSolid(5);
Trade::MeshData icosphere = Primitives::icosphereSolid(5);
}
}
void SubdivideRemoveDuplicatesBenchmark::subdivideAndRemoveDuplicatesInBetween() {
Trade::MeshData icosphere = Primitives::icosphereSolid(0);
CORRADE_BENCHMARK(3) {
Trade::MeshData3D icosphere = Primitives::icosphereSolid(0);
Containers::Array<UnsignedInt> indices;
arrayResize(indices, Containers::NoInit, icosphere.indexCount());
Utility::copy(icosphere.indices<UnsignedInt>(), indices);
Containers::Array<Vector3> positions;
arrayResize(positions, Containers::NoInit, icosphere.vertexCount());
Utility::copy(icosphere.attribute<Vector3>(Trade::MeshAttribute::Position), positions);
/* Subdivide 5 times and remove duplicates during the operation */
for(std::size_t i = 0; i != 5; ++i) {
MeshTools::subdivide(icosphere.indices(), icosphere.positions(0), interpolator);
icosphere.indices() = MeshTools::duplicate(icosphere.indices(), MeshTools::removeDuplicates(icosphere.positions(0)));
MeshTools::subdivide(indices, positions, interpolator);
arrayResize(positions, MeshTools::removeDuplicatesIndexedInPlace(
stridedArrayView(indices), stridedArrayView(positions)));
}
}
}

Loading…
Cancel
Save