Browse Source

Trade: ability to reference a skin from MeshObjectData.

pull/470/head
Vladimír Vondruš 6 years ago
parent
commit
d7a4f3bacd
  1. 4
      src/Magnum/Trade/MeshObjectData2D.cpp
  2. 34
      src/Magnum/Trade/MeshObjectData2D.h
  3. 4
      src/Magnum/Trade/MeshObjectData3D.cpp
  4. 34
      src/Magnum/Trade/MeshObjectData3D.h
  5. 12
      src/Magnum/Trade/Test/ObjectData2DTest.cpp
  6. 12
      src/Magnum/Trade/Test/ObjectData3DTest.cpp

4
src/Magnum/Trade/MeshObjectData2D.cpp

@ -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
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<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
@ -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;
@ -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;
};
}}

4
src/Magnum/Trade/MeshObjectData3D.cpp

@ -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
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<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
@ -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;
@ -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;
};
}}

12
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<UnsignedInt>{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<UnsignedInt>{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<MeshObjectData2D>::value);

12
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<UnsignedInt>{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<UnsignedInt>{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<MeshObjectData3D>::value);

Loading…
Cancel
Save