Skip to content

Commit

Permalink
Trade: ability to reference a skin from MeshObjectData.
Browse files Browse the repository at this point in the history
  • Loading branch information
mosra committed Aug 31, 2020
1 parent e8b6454 commit d7a4f3b
Show file tree
Hide file tree
Showing 6 changed files with 82 additions and 18 deletions.
4 changes: 2 additions & 2 deletions src/Magnum/Trade/MeshObjectData2D.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@

namespace Magnum { namespace Trade {

MeshObjectData2D::MeshObjectData2D(std::vector<UnsignedInt> children, const Matrix3& transformation, const UnsignedInt instance, const Int material, const void* const importerState): ObjectData2D{std::move(children), transformation, ObjectInstanceType2D::Mesh, instance, importerState}, _material{material} {}
MeshObjectData2D::MeshObjectData2D(std::vector<UnsignedInt> children, const Matrix3& transformation, const UnsignedInt instance, const Int material, const Int skin, const void* const importerState): ObjectData2D{std::move(children), transformation, ObjectInstanceType2D::Mesh, instance, importerState}, _material{material}, _skin{skin} {}

MeshObjectData2D::MeshObjectData2D(std::vector<UnsignedInt> children, const Vector2& translation, const Complex& rotation, const Vector2& scaling, const UnsignedInt instance, const Int material, const void* const importerState): ObjectData2D{std::move(children), translation, rotation, scaling, ObjectInstanceType2D::Mesh, instance, importerState}, _material{material} {}
MeshObjectData2D::MeshObjectData2D(std::vector<UnsignedInt> children, const Vector2& translation, const Complex& rotation, const Vector2& scaling, const UnsignedInt instance, const Int material, const Int skin, const void* const importerState): ObjectData2D{std::move(children), translation, rotation, scaling, ObjectInstanceType2D::Mesh, instance, importerState}, _material{material}, _skin{skin} {}

}}
34 changes: 31 additions & 3 deletions src/Magnum/Trade/MeshObjectData2D.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,20 @@ class MAGNUM_TRADE_EXPORT MeshObjectData2D: public ObjectData2D {
* @param transformation Transformation (relative to parent)
* @param instance Instance ID
* @param material Material ID or `-1`
* @param skin Skin ID or `-1`
* @param importerState Importer-specific state
*
* Creates object with mesh instance type.
*/
explicit MeshObjectData2D(std::vector<UnsignedInt> children, const Matrix3& transformation, UnsignedInt instance, Int material, const void* importerState = nullptr);
explicit MeshObjectData2D(std::vector<UnsignedInt> children, const Matrix3& transformation, UnsignedInt instance, Int material, Int skin, const void* importerState = nullptr);

#ifdef MAGNUM_BUILD_DEPRECATED
/** @brief @copybrief MeshObjectData2D(std::vector<UnsignedInt>, const Matrix3&, UnsignedInt, Int, Int, const void*)
* @m_deprecated_since_latest Use @ref MeshObjectData2D(std::vector<UnsignedInt>, const Matrix3&, UnsignedInt, Int, Int, const void*)
* instead.
*/
explicit CORRADE_DEPRECATED("use MeshObjectData2D(std::vector<UnsignedInt>, const Matrix4&, UnsignedInt, Int, Int, const void*) instead") MeshObjectData2D(std::vector<UnsignedInt> children, const Matrix3& transformation, UnsignedInt instance, Int material, const void* importerState = nullptr): MeshObjectData2D{std::move(children), transformation, instance, material, -1, importerState} {}
#endif

/**
* @brief Construct with separate transformations
Expand All @@ -61,11 +70,20 @@ class MAGNUM_TRADE_EXPORT MeshObjectData2D: public ObjectData2D {
* @param scaling Scaling (relative to parent)
* @param instance Instance ID
* @param material Material ID or `-1`
* @param skin Skin ID or `-1`
* @param importerState Importer-specific state
*
* Creates object with mesh instance type.
*/
explicit MeshObjectData2D(std::vector<UnsignedInt> children, const Vector2& translation, const Complex& rotation, const Vector2& scaling, UnsignedInt instance, Int material, const void* importerState = nullptr);
explicit MeshObjectData2D(std::vector<UnsignedInt> children, const Vector2& translation, const Complex& rotation, const Vector2& scaling, UnsignedInt instance, Int material, Int skin, const void* importerState = nullptr);

#ifdef MAGNUM_BUILD_DEPRECATED
/** @brief @copybrief MeshObjectData2D(std::vector<UnsignedInt>, const Vector2&, const Complex&, const Vector2&, UnsignedInt, Int, Int, const void*)
* @m_deprecated_since_latest Use @ref MeshObjectData2D(std::vector<UnsignedInt>, const Vector2&, const Complex&, const Vector2&, UnsignedInt, Int, Int, const void*)
* instead.
*/
explicit CORRADE_DEPRECATED("use MeshObjectData2D(std::vector<UnsignedInt>, const Vector2&, const Complex&, const Vector2&, UnsignedInt, Int, Int, const void*) instead") MeshObjectData2D(std::vector<UnsignedInt> children, const Vector2& translation, const Complex& rotation, const Vector2& scaling, UnsignedInt instance, Int material, const void* importerState = nullptr): MeshObjectData2D{std::move(children), translation, rotation, scaling, instance, material, -1, importerState} {}
#endif

/** @brief Copying is not allowed */
MeshObjectData2D(const MeshObjectData2D&) = delete;
Expand Down Expand Up @@ -97,11 +115,21 @@ class MAGNUM_TRADE_EXPORT MeshObjectData2D: public ObjectData2D {
* @brief Material ID
*
* Returns `-1` if the object has no material assigned.
* @see @ref AbstractImporter::material()
*/
Int material() const { return _material; }

/**
* @brief Skin ID
* @m_since_latest
*
* Returns `-1` if the object has no skin assigned.
* @see @ref AbstractImporter::skin2D()
*/
Int skin() const { return _skin; }

private:
Int _material;
Int _material, _skin;
};

}}
Expand Down
4 changes: 2 additions & 2 deletions src/Magnum/Trade/MeshObjectData3D.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@

namespace Magnum { namespace Trade {

MeshObjectData3D::MeshObjectData3D(std::vector<UnsignedInt> children, const Matrix4& transformation, const UnsignedInt instance, const Int material, const void* const importerState): ObjectData3D{std::move(children), transformation, ObjectInstanceType3D::Mesh, instance, importerState}, _material{material} {}
MeshObjectData3D::MeshObjectData3D(std::vector<UnsignedInt> children, const Matrix4& transformation, const UnsignedInt instance, const Int material, const Int skin, const void* const importerState): ObjectData3D{std::move(children), transformation, ObjectInstanceType3D::Mesh, instance, importerState}, _material{material}, _skin{skin} {}

MeshObjectData3D::MeshObjectData3D(std::vector<UnsignedInt> children, const Vector3& translation, const Quaternion& rotation, const Vector3& scaling, const UnsignedInt instance, const Int material, const void* const importerState): ObjectData3D{std::move(children), translation, rotation, scaling, ObjectInstanceType3D::Mesh, instance, importerState}, _material{material} {}
MeshObjectData3D::MeshObjectData3D(std::vector<UnsignedInt> children, const Vector3& translation, const Quaternion& rotation, const Vector3& scaling, const UnsignedInt instance, const Int material, const Int skin, const void* const importerState): ObjectData3D{std::move(children), translation, rotation, scaling, ObjectInstanceType3D::Mesh, instance, importerState}, _material{material}, _skin{skin} {}

}}
34 changes: 31 additions & 3 deletions src/Magnum/Trade/MeshObjectData3D.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,20 @@ class MAGNUM_TRADE_EXPORT MeshObjectData3D: public ObjectData3D {
* @param transformation Transformation (relative to parent)
* @param instance Instance ID
* @param material Material ID or `-1`
* @param skin Skin ID or `-1`
* @param importerState Importer-specific state
*
* Creates object with mesh instance type.
*/
explicit MeshObjectData3D(std::vector<UnsignedInt> children, const Matrix4& transformation, UnsignedInt instance, Int material, const void* importerState = nullptr);
explicit MeshObjectData3D(std::vector<UnsignedInt> children, const Matrix4& transformation, UnsignedInt instance, Int material, Int skin, const void* importerState = nullptr);

#ifdef MAGNUM_BUILD_DEPRECATED
/** @brief @copybrief MeshObjectData3D(std::vector<UnsignedInt>, const Matrix4&, UnsignedInt, Int, Int, const void*)
* @m_deprecated_since_latest Use @ref MeshObjectData3D(std::vector<UnsignedInt>, const Matrix4&, UnsignedInt, Int, Int, const void*)
* instead.
*/
explicit CORRADE_DEPRECATED("use MeshObjectData3D(std::vector<UnsignedInt>, const Matrix4&, UnsignedInt, Int, Int, const void*) instead") MeshObjectData3D(std::vector<UnsignedInt> children, const Matrix4& transformation, UnsignedInt instance, Int material, const void* importerState = nullptr): MeshObjectData3D{std::move(children), transformation, instance, material, -1, importerState} {}
#endif

/**
* @brief Construct with separate transformations
Expand All @@ -61,11 +70,20 @@ class MAGNUM_TRADE_EXPORT MeshObjectData3D: public ObjectData3D {
* @param scaling Scaling (relative to parent)
* @param instance Instance ID
* @param material Material ID or `-1`
* @param skin Skin ID or `-1`
* @param importerState Importer-specific state
*
* Creates object with mesh instance type.
*/
explicit MeshObjectData3D(std::vector<UnsignedInt> children, const Vector3& translation, const Quaternion& rotation, const Vector3& scaling, UnsignedInt instance, Int material, const void* importerState = nullptr);
explicit MeshObjectData3D(std::vector<UnsignedInt> children, const Vector3& translation, const Quaternion& rotation, const Vector3& scaling, UnsignedInt instance, Int material, Int skin, const void* importerState = nullptr);

#ifdef MAGNUM_BUILD_DEPRECATED
/** @brief @copybrief MeshObjectData3D(std::vector<UnsignedInt>, const Vector3&, const Quaternion&, const Vector3&, UnsignedInt, Int, Int, const void*)
* @m_deprecated_since_latest Use @ref MeshObjectData3D(std::vector<UnsignedInt>, const Vector3&, const Quaternion&, const Vector3&, UnsignedInt, Int, Int, const void*)
* instead.
*/
explicit CORRADE_DEPRECATED("use MeshObjectData3D(std::vector<UnsignedInt>, const Vector3&, const Quaternion&, const Vector3&, UnsignedInt, Int, Int, const void*) instead") MeshObjectData3D(std::vector<UnsignedInt> children, const Vector3& translation, const Quaternion& rotation, const Vector3& scaling, UnsignedInt instance, Int material, const void* importerState = nullptr): MeshObjectData3D{std::move(children), translation, rotation, scaling, instance, material, -1, importerState} {}
#endif

/** @brief Copying is not allowed */
MeshObjectData3D(const MeshObjectData3D&) = delete;
Expand Down Expand Up @@ -97,11 +115,21 @@ class MAGNUM_TRADE_EXPORT MeshObjectData3D: public ObjectData3D {
* @brief Material ID
*
* Returns `-1` if the object has no material assigned.
* @see @ref AbstractImporter::material()
*/
Int material() const { return _material; }

/**
* @brief Skin ID
* @m_since_latest
*
* Returns `-1` if the object has no skin assigned.
* @see @ref AbstractImporter::skin3D()
*/
Int skin() const { return _skin; }

private:
Int _material;
Int _material, _skin;
};

}}
Expand Down
12 changes: 8 additions & 4 deletions src/Magnum/Trade/Test/ObjectData2DTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -102,20 +102,21 @@ void ObjectData2DTest::constructEmptyTransformations() {

void ObjectData2DTest::constructMesh() {
const int a{};
const MeshObjectData2D data{{1, 3}, Matrix3::translation(Vector2::yAxis(5.0f)), 13, 42, &a};
const MeshObjectData2D data{{1, 3}, Matrix3::translation(Vector2::yAxis(5.0f)), 13, 42, 5, &a};

CORRADE_COMPARE(data.children(), (std::vector<UnsignedInt>{1, 3}));
CORRADE_COMPARE(data.flags(), ObjectFlags2D{});
CORRADE_COMPARE(data.transformation(), Matrix3::translation(Vector2::yAxis(5.0f)));
CORRADE_COMPARE(data.instanceType(), ObjectInstanceType2D::Mesh);
CORRADE_COMPARE(data.instance(), 13);
CORRADE_COMPARE(data.material(), 42);
CORRADE_COMPARE(data.skin(), 5);
CORRADE_COMPARE(data.importerState(), &a);
}

void ObjectData2DTest::constructMeshTransformations() {
const int a{};
const MeshObjectData2D data{{0, 2, 3}, Vector2::xAxis(-4.0f), Complex::rotation(32.5_degf), Vector2::yScale(1.5f), 13, 42, &a};
const MeshObjectData2D data{{0, 2, 3}, Vector2::xAxis(-4.0f), Complex::rotation(32.5_degf), Vector2::yScale(1.5f), 13, 42, 5, &a};

CORRADE_COMPARE(data.children(), (std::vector<UnsignedInt>{0, 2, 3}));
CORRADE_COMPARE(data.flags(), ObjectFlag2D::HasTranslationRotationScaling);
Expand All @@ -129,6 +130,7 @@ void ObjectData2DTest::constructMeshTransformations() {
CORRADE_COMPARE(data.instanceType(), ObjectInstanceType2D::Mesh);
CORRADE_COMPARE(data.instance(), 13);
CORRADE_COMPARE(data.material(), 42);
CORRADE_COMPARE(data.skin(), 5);
CORRADE_COMPARE(data.importerState(), &a);
}

Expand Down Expand Up @@ -194,7 +196,7 @@ void ObjectData2DTest::constructMoveTransformations() {

void ObjectData2DTest::constructMoveMesh() {
const int a{};
MeshObjectData2D data{{1, 3}, Matrix3::translation(Vector2::yAxis(5.0f)), 13, 42, &a};
MeshObjectData2D data{{1, 3}, Matrix3::translation(Vector2::yAxis(5.0f)), 13, 42, 5, &a};

MeshObjectData2D b{std::move(data)};

Expand All @@ -204,10 +206,11 @@ void ObjectData2DTest::constructMoveMesh() {
CORRADE_COMPARE(b.instanceType(), ObjectInstanceType2D::Mesh);
CORRADE_COMPARE(b.instance(), 13);
CORRADE_COMPARE(b.material(), 42);
CORRADE_COMPARE(b.skin(), 5);
CORRADE_COMPARE(b.importerState(), &a);

const int c{};
MeshObjectData2D d{{0, 1}, {}, 27, -1, &c};
MeshObjectData2D d{{0, 1}, {}, 27, -1, -1, &c};

d = std::move(b);

Expand All @@ -217,6 +220,7 @@ void ObjectData2DTest::constructMoveMesh() {
CORRADE_COMPARE(d.instanceType(), ObjectInstanceType2D::Mesh);
CORRADE_COMPARE(d.instance(), 13);
CORRADE_COMPARE(d.material(), 42);
CORRADE_COMPARE(d.skin(), 5);
CORRADE_COMPARE(d.importerState(), &a);

CORRADE_VERIFY(std::is_nothrow_move_constructible<MeshObjectData2D>::value);
Expand Down
12 changes: 8 additions & 4 deletions src/Magnum/Trade/Test/ObjectData3DTest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -104,20 +104,21 @@ void ObjectData3DTest::constructEmptyTransformations() {

void ObjectData3DTest::constructMesh() {
const int a{};
const MeshObjectData3D data{{1, 3}, Matrix4::translation(Vector3::yAxis(5.0f)), 13, 42, &a};
const MeshObjectData3D data{{1, 3}, Matrix4::translation(Vector3::yAxis(5.0f)), 13, 42, 5, &a};

CORRADE_COMPARE(data.children(), (std::vector<UnsignedInt>{1, 3}));
CORRADE_COMPARE(data.flags(), ObjectFlags3D{});
CORRADE_COMPARE(data.transformation(), Matrix4::translation(Vector3::yAxis(5.0f)));
CORRADE_COMPARE(data.instanceType(), ObjectInstanceType3D::Mesh);
CORRADE_COMPARE(data.instance(), 13);
CORRADE_COMPARE(data.material(), 42);
CORRADE_COMPARE(data.skin(), 5);
CORRADE_COMPARE(data.importerState(), &a);
}

void ObjectData3DTest::constructMeshTransformations() {
const int a{};
const MeshObjectData3D data{{1, 3}, Vector3::xAxis(-4.0f), Quaternion::rotation(32.5_degf, Vector3::zAxis()), Vector3::yScale(1.5f), 13, 42, &a};
const MeshObjectData3D data{{1, 3}, Vector3::xAxis(-4.0f), Quaternion::rotation(32.5_degf, Vector3::zAxis()), Vector3::yScale(1.5f), 13, 42, 5, &a};

CORRADE_COMPARE(data.children(), (std::vector<UnsignedInt>{1, 3}));
CORRADE_COMPARE(data.flags(), ObjectFlag3D::HasTranslationRotationScaling);
Expand All @@ -131,6 +132,7 @@ void ObjectData3DTest::constructMeshTransformations() {
CORRADE_COMPARE(data.instanceType(), ObjectInstanceType3D::Mesh);
CORRADE_COMPARE(data.instance(), 13);
CORRADE_COMPARE(data.material(), 42);
CORRADE_COMPARE(data.skin(), 5);
CORRADE_COMPARE(data.importerState(), &a);
}

Expand Down Expand Up @@ -208,7 +210,7 @@ void ObjectData3DTest::constructMoveTransformations() {

void ObjectData3DTest::constructMoveMesh() {
const int a{};
MeshObjectData3D data{{1, 3}, Matrix4::translation(Vector3::yAxis(5.0f)), 13, 42, &a};
MeshObjectData3D data{{1, 3}, Matrix4::translation(Vector3::yAxis(5.0f)), 13, 42, 5, &a};

MeshObjectData3D b{std::move(data)};

Expand All @@ -218,10 +220,11 @@ void ObjectData3DTest::constructMoveMesh() {
CORRADE_COMPARE(b.instanceType(), ObjectInstanceType3D::Mesh);
CORRADE_COMPARE(b.instance(), 13);
CORRADE_COMPARE(b.material(), 42);
CORRADE_COMPARE(b.skin(), 5);
CORRADE_COMPARE(b.importerState(), &a);

const int c{};
MeshObjectData3D d{{0, 1}, {}, 27, -1, &c};
MeshObjectData3D d{{0, 1}, {}, 27, -1, -1, &c};

d = std::move(b);

Expand All @@ -231,6 +234,7 @@ void ObjectData3DTest::constructMoveMesh() {
CORRADE_COMPARE(d.instanceType(), ObjectInstanceType3D::Mesh);
CORRADE_COMPARE(d.instance(), 13);
CORRADE_COMPARE(d.material(), 42);
CORRADE_COMPARE(d.skin(), 5);
CORRADE_COMPARE(d.importerState(), &a);

CORRADE_VERIFY(std::is_nothrow_move_constructible<MeshObjectData3D>::value);
Expand Down

0 comments on commit d7a4f3b

Please sign in to comment.