diff --git a/src/Magnum/Trade/MeshObjectData2D.cpp b/src/Magnum/Trade/MeshObjectData2D.cpp index a61abd62e..e9bc27f8c 100644 --- a/src/Magnum/Trade/MeshObjectData2D.cpp +++ b/src/Magnum/Trade/MeshObjectData2D.cpp @@ -27,8 +27,8 @@ namespace Magnum { namespace Trade { -MeshObjectData2D::MeshObjectData2D(std::vector 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 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 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 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} {} }} diff --git a/src/Magnum/Trade/MeshObjectData2D.h b/src/Magnum/Trade/MeshObjectData2D.h index e8582fff5..5c2625365 100644 --- a/src/Magnum/Trade/MeshObjectData2D.h +++ b/src/Magnum/Trade/MeshObjectData2D.h @@ -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 children, const Matrix3& transformation, UnsignedInt instance, Int material, const void* importerState = nullptr); + explicit MeshObjectData2D(std::vector children, const Matrix3& transformation, UnsignedInt instance, Int material, Int skin, const void* importerState = nullptr); + + #ifdef MAGNUM_BUILD_DEPRECATED + /** @brief @copybrief MeshObjectData2D(std::vector, const Matrix3&, UnsignedInt, Int, Int, const void*) + * @m_deprecated_since_latest Use @ref MeshObjectData2D(std::vector, const Matrix3&, UnsignedInt, Int, Int, const void*) + * instead. + */ + explicit CORRADE_DEPRECATED("use MeshObjectData2D(std::vector, const Matrix4&, UnsignedInt, Int, Int, const void*) instead") MeshObjectData2D(std::vector 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 @@ -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 children, const Vector2& translation, const Complex& rotation, const Vector2& scaling, UnsignedInt instance, Int material, const void* importerState = nullptr); + explicit MeshObjectData2D(std::vector 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, const Vector2&, const Complex&, const Vector2&, UnsignedInt, Int, Int, const void*) + * @m_deprecated_since_latest Use @ref MeshObjectData2D(std::vector, const Vector2&, const Complex&, const Vector2&, UnsignedInt, Int, Int, const void*) + * instead. + */ + explicit CORRADE_DEPRECATED("use MeshObjectData2D(std::vector, const Vector2&, const Complex&, const Vector2&, UnsignedInt, Int, Int, const void*) instead") MeshObjectData2D(std::vector 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; @@ -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; }; }} diff --git a/src/Magnum/Trade/MeshObjectData3D.cpp b/src/Magnum/Trade/MeshObjectData3D.cpp index acccc0f5f..f4cd35da1 100644 --- a/src/Magnum/Trade/MeshObjectData3D.cpp +++ b/src/Magnum/Trade/MeshObjectData3D.cpp @@ -27,8 +27,8 @@ namespace Magnum { namespace Trade { -MeshObjectData3D::MeshObjectData3D(std::vector 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 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 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 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} {} }} diff --git a/src/Magnum/Trade/MeshObjectData3D.h b/src/Magnum/Trade/MeshObjectData3D.h index 0671ee733..1324120af 100644 --- a/src/Magnum/Trade/MeshObjectData3D.h +++ b/src/Magnum/Trade/MeshObjectData3D.h @@ -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 children, const Matrix4& transformation, UnsignedInt instance, Int material, const void* importerState = nullptr); + explicit MeshObjectData3D(std::vector children, const Matrix4& transformation, UnsignedInt instance, Int material, Int skin, const void* importerState = nullptr); + + #ifdef MAGNUM_BUILD_DEPRECATED + /** @brief @copybrief MeshObjectData3D(std::vector, const Matrix4&, UnsignedInt, Int, Int, const void*) + * @m_deprecated_since_latest Use @ref MeshObjectData3D(std::vector, const Matrix4&, UnsignedInt, Int, Int, const void*) + * instead. + */ + explicit CORRADE_DEPRECATED("use MeshObjectData3D(std::vector, const Matrix4&, UnsignedInt, Int, Int, const void*) instead") MeshObjectData3D(std::vector 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 @@ -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 children, const Vector3& translation, const Quaternion& rotation, const Vector3& scaling, UnsignedInt instance, Int material, const void* importerState = nullptr); + explicit MeshObjectData3D(std::vector 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, const Vector3&, const Quaternion&, const Vector3&, UnsignedInt, Int, Int, const void*) + * @m_deprecated_since_latest Use @ref MeshObjectData3D(std::vector, const Vector3&, const Quaternion&, const Vector3&, UnsignedInt, Int, Int, const void*) + * instead. + */ + explicit CORRADE_DEPRECATED("use MeshObjectData3D(std::vector, const Vector3&, const Quaternion&, const Vector3&, UnsignedInt, Int, Int, const void*) instead") MeshObjectData3D(std::vector 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; @@ -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; }; }} diff --git a/src/Magnum/Trade/Test/ObjectData2DTest.cpp b/src/Magnum/Trade/Test/ObjectData2DTest.cpp index 8f7135d47..db446cf68 100644 --- a/src/Magnum/Trade/Test/ObjectData2DTest.cpp +++ b/src/Magnum/Trade/Test/ObjectData2DTest.cpp @@ -102,7 +102,7 @@ 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{1, 3})); CORRADE_COMPARE(data.flags(), ObjectFlags2D{}); @@ -110,12 +110,13 @@ void ObjectData2DTest::constructMesh() { 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{0, 2, 3})); CORRADE_COMPARE(data.flags(), ObjectFlag2D::HasTranslationRotationScaling); @@ -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); } @@ -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)}; @@ -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); @@ -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::value); diff --git a/src/Magnum/Trade/Test/ObjectData3DTest.cpp b/src/Magnum/Trade/Test/ObjectData3DTest.cpp index 214a278bd..4a7ba4866 100644 --- a/src/Magnum/Trade/Test/ObjectData3DTest.cpp +++ b/src/Magnum/Trade/Test/ObjectData3DTest.cpp @@ -104,7 +104,7 @@ 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{1, 3})); CORRADE_COMPARE(data.flags(), ObjectFlags3D{}); @@ -112,12 +112,13 @@ void ObjectData3DTest::constructMesh() { 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{1, 3})); CORRADE_COMPARE(data.flags(), ObjectFlag3D::HasTranslationRotationScaling); @@ -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); } @@ -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)}; @@ -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); @@ -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::value);