From cfd405c32ca74f7e139078cb0199e76c7b7413ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Wed, 3 Jul 2013 16:54:59 +0200 Subject: [PATCH] Getting rid of <>, part 5: SceneGraph object. --- src/DebugTools/ForceRenderer.cpp | 2 +- src/DebugTools/ForceRenderer.h | 2 +- src/DebugTools/ObjectRenderer.cpp | 2 +- src/DebugTools/ObjectRenderer.h | 2 +- src/SceneGraph/AbstractCamera.h | 2 +- src/SceneGraph/AbstractCamera.hpp | 6 +-- src/SceneGraph/AbstractFeature.h | 22 ++++----- src/SceneGraph/AbstractFeature.hpp | 2 +- src/SceneGraph/AbstractGroupedFeature.h | 2 +- src/SceneGraph/AbstractObject.h | 65 +++++++++---------------- src/SceneGraph/Animable.h | 2 +- src/SceneGraph/Animable.hpp | 2 +- src/SceneGraph/Camera2D.h | 2 +- src/SceneGraph/Camera2D.hpp | 2 +- src/SceneGraph/Camera3D.h | 2 +- src/SceneGraph/Camera3D.hpp | 2 +- src/SceneGraph/Drawable.h | 2 +- src/SceneGraph/Object.h | 6 +-- src/SceneGraph/Object.hpp | 8 +-- src/SceneGraph/SceneGraph.h | 8 ++- src/SceneGraph/Test/AnimableTest.cpp | 8 +-- src/SceneGraph/Test/CameraTest.cpp | 2 +- src/SceneGraph/Test/ObjectTest.cpp | 6 +-- src/SceneGraph/instantiation.cpp | 4 +- src/Shapes/AbstractShape.cpp | 2 +- src/Shapes/AbstractShape.h | 2 +- src/Shapes/Shape.h | 6 +-- src/Shapes/ShapeGroup.cpp | 4 +- 28 files changed, 78 insertions(+), 99 deletions(-) diff --git a/src/DebugTools/ForceRenderer.cpp b/src/DebugTools/ForceRenderer.cpp index 96c441c9b..800b0747b 100644 --- a/src/DebugTools/ForceRenderer.cpp +++ b/src/DebugTools/ForceRenderer.cpp @@ -64,7 +64,7 @@ const std::array indices{{ } -template ForceRenderer::ForceRenderer(SceneGraph::AbstractObject* object, const typename DimensionTraits::VectorType& forcePosition, const typename DimensionTraits::VectorType* force, ResourceKey options, SceneGraph::BasicDrawableGroup* drawables): SceneGraph::BasicDrawable(object, drawables), forcePosition(forcePosition), force(force), options(ResourceManager::instance()->get(options)) { +template ForceRenderer::ForceRenderer(SceneGraph::AbstractBasicObject* object, const typename DimensionTraits::VectorType& forcePosition, const typename DimensionTraits::VectorType* force, ResourceKey options, SceneGraph::BasicDrawableGroup* drawables): SceneGraph::BasicDrawable(object, drawables), forcePosition(forcePosition), force(force), options(ResourceManager::instance()->get(options)) { /* Shader */ shader = ResourceManager::instance()->get>(shaderKey()); if(!shader) ResourceManager::instance()->set(shader.key(), new Shaders::Flat); diff --git a/src/DebugTools/ForceRenderer.h b/src/DebugTools/ForceRenderer.h index b77851cd5..3a40ec092 100644 --- a/src/DebugTools/ForceRenderer.h +++ b/src/DebugTools/ForceRenderer.h @@ -117,7 +117,7 @@ template class MAGNUM_DEBUGTOOLS_EXPORT ForceRenderer: p * saved as reference to original vector and thus it must be available * for the whole lifetime of the renderer. */ - explicit ForceRenderer(SceneGraph::AbstractObject* object, const typename DimensionTraits::VectorType& forcePosition, const typename DimensionTraits::VectorType* force, ResourceKey options = ResourceKey(), SceneGraph::BasicDrawableGroup* drawables = nullptr); + explicit ForceRenderer(SceneGraph::AbstractBasicObject* object, const typename DimensionTraits::VectorType& forcePosition, const typename DimensionTraits::VectorType* force, ResourceKey options = ResourceKey(), SceneGraph::BasicDrawableGroup* drawables = nullptr); protected: void draw(const typename DimensionTraits::MatrixType& transformationMatrix, SceneGraph::AbstractBasicCamera* camera) override; diff --git a/src/DebugTools/ObjectRenderer.cpp b/src/DebugTools/ObjectRenderer.cpp index 62e24612c..96461e6a9 100644 --- a/src/DebugTools/ObjectRenderer.cpp +++ b/src/DebugTools/ObjectRenderer.cpp @@ -142,7 +142,7 @@ const std::array Renderer<3>::indices{{ } -template ObjectRenderer::ObjectRenderer(SceneGraph::AbstractObject* object, ResourceKey options, SceneGraph::BasicDrawableGroup* drawables): SceneGraph::BasicDrawable(object, drawables), options(ResourceManager::instance()->get(options)) { +template ObjectRenderer::ObjectRenderer(SceneGraph::AbstractBasicObject* object, ResourceKey options, SceneGraph::BasicDrawableGroup* drawables): SceneGraph::BasicDrawable(object, drawables), options(ResourceManager::instance()->get(options)) { /* Shader */ shader = ResourceManager::instance()->get>(Renderer::shader()); if(!shader) ResourceManager::instance()->set(shader.key(), new Shaders::VertexColor); diff --git a/src/DebugTools/ObjectRenderer.h b/src/DebugTools/ObjectRenderer.h index cd21ea50b..7f86de227 100644 --- a/src/DebugTools/ObjectRenderer.h +++ b/src/DebugTools/ObjectRenderer.h @@ -96,7 +96,7 @@ template class MAGNUM_DEBUGTOOLS_EXPORT ObjectRenderer: * * The renderer is automatically added to object's features. */ - explicit ObjectRenderer(SceneGraph::AbstractObject* object, ResourceKey options = ResourceKey(), SceneGraph::BasicDrawableGroup* drawables = nullptr); + explicit ObjectRenderer(SceneGraph::AbstractBasicObject* object, ResourceKey options = ResourceKey(), SceneGraph::BasicDrawableGroup* drawables = nullptr); protected: void draw(const typename DimensionTraits::MatrixType& transformationMatrix, SceneGraph::AbstractBasicCamera* camera) override; diff --git a/src/SceneGraph/AbstractCamera.h b/src/SceneGraph/AbstractCamera.h index 52dc8b497..e07f90bb2 100644 --- a/src/SceneGraph/AbstractCamera.h +++ b/src/SceneGraph/AbstractCamera.h @@ -78,7 +78,7 @@ template class MAGNUM_SCENEGRAPH_EXPORT Abstrac * @brief Constructor * @param object Object holding the camera */ - explicit AbstractBasicCamera(AbstractObject* object); + explicit AbstractBasicCamera(AbstractBasicObject* object); virtual ~AbstractBasicCamera() = 0; diff --git a/src/SceneGraph/AbstractCamera.hpp b/src/SceneGraph/AbstractCamera.hpp index 15f7d3fad..dbd368ba9 100644 --- a/src/SceneGraph/AbstractCamera.hpp +++ b/src/SceneGraph/AbstractCamera.hpp @@ -70,7 +70,7 @@ template typename DimensionTraits AbstractBasicCamera::AbstractBasicCamera(AbstractObject* object): AbstractBasicFeature(object), _aspectRatioPolicy(AspectRatioPolicy::NotPreserved) { +template AbstractBasicCamera::AbstractBasicCamera(AbstractBasicObject* object): AbstractBasicFeature(object), _aspectRatioPolicy(AspectRatioPolicy::NotPreserved) { AbstractBasicFeature::setCachedTransformations(CachedTransformation::InvertedAbsolute); } @@ -88,14 +88,14 @@ template void AbstractBasicCamera void AbstractBasicCamera::draw(BasicDrawableGroup& group) { - AbstractObject* scene = AbstractBasicFeature::object()->scene(); + AbstractBasicObject* scene = AbstractBasicFeature::object()->scene(); CORRADE_ASSERT(scene, "Camera::draw(): cannot draw when camera is not part of any scene", ); /* Compute camera matrix */ AbstractBasicFeature::object()->setClean(); /* Compute transformations of all objects in the group relative to the camera */ - std::vector*> objects(group.size()); + std::vector*> objects(group.size()); for(std::size_t i = 0; i != group.size(); ++i) objects[i] = group[i]->object(); std::vector::MatrixType> transformations = diff --git a/src/SceneGraph/AbstractFeature.h b/src/SceneGraph/AbstractFeature.h index 4884f2e64..9deb03bc9 100644 --- a/src/SceneGraph/AbstractFeature.h +++ b/src/SceneGraph/AbstractFeature.h @@ -162,11 +162,11 @@ AbstractFeature.hpp implementation file to avoid linker errors. See also */ template class MAGNUM_SCENEGRAPH_EXPORT AbstractBasicFeature #ifndef DOXYGEN_GENERATING_OUTPUT -: private Containers::LinkedListItem, AbstractObject> +: private Containers::LinkedListItem, AbstractBasicObject> #endif { friend class Containers::LinkedList>; - friend class Containers::LinkedListItem, AbstractObject>; + friend class Containers::LinkedListItem, AbstractBasicObject>; template friend class Object; public: @@ -174,38 +174,38 @@ template class MAGNUM_SCENEGRAPH_EXPORT Abstrac * @brief Constructor * @param object %Object holding this feature */ - explicit AbstractBasicFeature(AbstractObject* object); + explicit AbstractBasicFeature(AbstractBasicObject* object); virtual ~AbstractBasicFeature() = 0; /** @brief %Object holding this feature */ - AbstractObject* object() { - return Containers::LinkedListItem, AbstractObject>::list(); + AbstractBasicObject* object() { + return Containers::LinkedListItem, AbstractBasicObject>::list(); } /** @overload */ - const AbstractObject* object() const { - return Containers::LinkedListItem, AbstractObject>::list(); + const AbstractBasicObject* object() const { + return Containers::LinkedListItem, AbstractBasicObject>::list(); } /** @brief Previous feature or `nullptr`, if this is first feature */ AbstractBasicFeature* previousFeature() { - return Containers::LinkedListItem, AbstractObject>::previous(); + return Containers::LinkedListItem, AbstractBasicObject>::previous(); } /** @overload */ const AbstractBasicFeature* previousFeature() const { - return Containers::LinkedListItem, AbstractObject>::previous(); + return Containers::LinkedListItem, AbstractBasicObject>::previous(); } /** @brief Next feature or `nullptr`, if this is last feature */ AbstractBasicFeature* nextFeature() { - return Containers::LinkedListItem, AbstractObject>::next(); + return Containers::LinkedListItem, AbstractBasicObject>::next(); } /** @overload */ const AbstractBasicFeature* nextFeature() const { - return Containers::LinkedListItem, AbstractObject>::next(); + return Containers::LinkedListItem, AbstractBasicObject>::next(); } /** diff --git a/src/SceneGraph/AbstractFeature.hpp b/src/SceneGraph/AbstractFeature.hpp index 837aee192..27210fa1f 100644 --- a/src/SceneGraph/AbstractFeature.hpp +++ b/src/SceneGraph/AbstractFeature.hpp @@ -32,7 +32,7 @@ namespace Magnum { namespace SceneGraph { -template AbstractBasicFeature::AbstractBasicFeature(AbstractObject* object) { +template AbstractBasicFeature::AbstractBasicFeature(AbstractBasicObject* object) { object->Containers::template LinkedList>::insert(this); } diff --git a/src/SceneGraph/AbstractGroupedFeature.h b/src/SceneGraph/AbstractGroupedFeature.h index 4b45f4ff5..2d5efe8c9 100644 --- a/src/SceneGraph/AbstractGroupedFeature.h +++ b/src/SceneGraph/AbstractGroupedFeature.h @@ -78,7 +78,7 @@ template class AbstractBasicGrou * Adds the feature to the object and to group, if specified. * @see FeatureGroup::add() */ - explicit AbstractBasicGroupedFeature(AbstractObject* object, BasicFeatureGroup* group = nullptr): AbstractBasicFeature(object), _group(nullptr) { + explicit AbstractBasicGroupedFeature(AbstractBasicObject* object, BasicFeatureGroup* group = nullptr): AbstractBasicFeature(object), _group(nullptr) { if(group) group->add(static_cast(this)); } diff --git a/src/SceneGraph/AbstractObject.h b/src/SceneGraph/AbstractObject.h index 142d36f13..ee1c5e9ab 100644 --- a/src/SceneGraph/AbstractObject.h +++ b/src/SceneGraph/AbstractObject.h @@ -25,7 +25,7 @@ */ /** @file - * @brief Class Magnum::SceneGraph::AbstractObject, alias Magnum::SceneGraph::AbstractObject2D, Magnum::SceneGraph::AbstractObject3D + * @brief Class Magnum::SceneGraph::AbstractBasicObject, alias Magnum::SceneGraph::AbstractObject2D, Magnum::SceneGraph::AbstractObject3D */ #include @@ -54,16 +54,15 @@ for(AbstractFeature* feature = o->firstFeature(); feature; feature = feature->ne } @endcode -@see AbstractObject2D, AbstractObject3D +@see @ref AbstractObject2D, @ref AbstractObject3D */ -#ifdef DOXYGEN_GENERATING_OUTPUT -template class AbstractObject -#else -template class MAGNUM_SCENEGRAPH_EXPORT AbstractObject: private Containers::LinkedList> -#endif +template class MAGNUM_SCENEGRAPH_EXPORT AbstractBasicObject + #ifndef DOXYGEN_GENERATING_OUTPUT + : private Containers::LinkedList> + #endif { friend class Containers::LinkedList>; - friend class Containers::LinkedListItem, AbstractObject>; + friend class Containers::LinkedListItem, AbstractBasicObject>; friend class AbstractBasicFeature; public: @@ -73,8 +72,8 @@ template class MAGNUM_SCENEGRAPH_EXPORT Abstrac /** @brief Feature object type */ typedef AbstractBasicFeature FeatureType; - explicit AbstractObject(); - virtual ~AbstractObject(); + explicit AbstractBasicObject(); + virtual ~AbstractBasicObject(); /** @brief Whether this object has features */ bool hasFeatures() const { @@ -105,10 +104,10 @@ template class MAGNUM_SCENEGRAPH_EXPORT Abstrac * @brief %Scene * @return %Scene or `nullptr`, if the object is not part of any scene. */ - AbstractObject* scene() { return doScene(); } + AbstractBasicObject* scene() { return doScene(); } /** @overload */ - const AbstractObject* scene() const { return doScene(); } + const AbstractBasicObject* scene() const { return doScene(); } /** @{ @name Object transformation */ @@ -139,7 +138,7 @@ template class MAGNUM_SCENEGRAPH_EXPORT Abstrac * Object type, use typesafe Object::transformationMatrices() when * possible. */ - std::vector transformationMatrices(const std::vector*>& objects, const MatrixType& initialTransformationMatrix = MatrixType()) const { + std::vector transformationMatrices(const std::vector*>& objects, const MatrixType& initialTransformationMatrix = MatrixType()) const { return doTransformationMatrices(objects, initialTransformationMatrix); } @@ -158,7 +157,7 @@ template class MAGNUM_SCENEGRAPH_EXPORT Abstrac * @warning This function cannot check if all objects are of the same * Object type, use typesafe Object::setClean() when possible. */ - static void setClean(const std::vector*>& objects) { + static void setClean(const std::vector*>& objects) { if(objects.empty()) return; objects.front()->doSetClean(objects); } @@ -204,50 +203,32 @@ template class MAGNUM_SCENEGRAPH_EXPORT Abstrac /*@}*/ private: - virtual AbstractObject* doScene() = 0; - virtual const AbstractObject* doScene() const = 0; + virtual AbstractBasicObject* doScene() = 0; + virtual const AbstractBasicObject* doScene() const = 0; virtual MatrixType doTransformationMatrix() const = 0; virtual MatrixType doAbsoluteTransformationMatrix() const = 0; - virtual std::vector doTransformationMatrices(const std::vector*>& objects, const MatrixType& initialTransformationMatrix) const = 0; + virtual std::vector doTransformationMatrices(const std::vector*>& objects, const MatrixType& initialTransformationMatrix) const = 0; virtual bool doIsDirty() const = 0; virtual void doSetDirty() = 0; virtual void doSetClean() = 0; - virtual void doSetClean(const std::vector*>& objects) = 0; + virtual void doSetClean(const std::vector*>& objects) = 0; }; -#ifndef CORRADE_GCC46_COMPATIBILITY /** -@brief Base for two-dimensional objects +@brief Base object for two-dimensional float scenes -Convenience alternative to %AbstractObject<2, T>. See AbstractObject -for more information. -@note Not available on GCC < 4.7. Use %AbstractObject<2, T> instead. -@see AbstractObject3D +@see @ref AbstractObject3D */ -#ifdef DOXYGEN_GENERATING_OUTPUT -template -#else -template -#endif -using AbstractObject2D = AbstractObject<2, T>; +typedef AbstractBasicObject<2, Float> AbstractObject2D; /** -@brief Base for three-dimensional objects +@brief Base object for three-dimensional float scenes -Convenience alternative to %AbstractObject<3, T>. See AbstractObject -for more information. -@note Not available on GCC < 4.7. Use %AbstractObject<3, T> instead. -@see AbstractObject2D +@see @ref AbstractObject2D */ -#ifdef DOXYGEN_GENERATING_OUTPUT -template -#else -template -#endif -using AbstractObject3D = AbstractObject<3, T>; -#endif +typedef AbstractBasicObject<3, Float> AbstractObject3D; }} diff --git a/src/SceneGraph/Animable.h b/src/SceneGraph/Animable.h index 206b622c9..65f39ad57 100644 --- a/src/SceneGraph/Animable.h +++ b/src/SceneGraph/Animable.h @@ -154,7 +154,7 @@ template class MAGNUM_SCENEGRAPH_EXPORT BasicAn * adds the feature to the object and also to group, if specified. * @see setDuration(), setState(), setRepeated(), BasicAnimableGroup::add() */ - explicit BasicAnimable(AbstractObject* object, BasicAnimableGroup* group = nullptr); + explicit BasicAnimable(AbstractBasicObject* object, BasicAnimableGroup* group = nullptr); ~BasicAnimable(); diff --git a/src/SceneGraph/Animable.hpp b/src/SceneGraph/Animable.hpp index 061e4f836..b34101bea 100644 --- a/src/SceneGraph/Animable.hpp +++ b/src/SceneGraph/Animable.hpp @@ -35,7 +35,7 @@ namespace Magnum { namespace SceneGraph { -template BasicAnimable::BasicAnimable(AbstractObject* object, BasicAnimableGroup* group): AbstractBasicGroupedFeature, T>(object, group), _duration(0.0f), startTime(std::numeric_limits::infinity()), pauseTime(-std::numeric_limits::infinity()), previousState(AnimationState::Stopped), currentState(AnimationState::Stopped), _repeated(false), _repeatCount(0), repeats(0) {} +template BasicAnimable::BasicAnimable(AbstractBasicObject* object, BasicAnimableGroup* group): AbstractBasicGroupedFeature, T>(object, group), _duration(0.0f), startTime(std::numeric_limits::infinity()), pauseTime(-std::numeric_limits::infinity()), previousState(AnimationState::Stopped), currentState(AnimationState::Stopped), _repeated(false), _repeatCount(0), repeats(0) {} template BasicAnimable::~BasicAnimable() {} diff --git a/src/SceneGraph/Camera2D.h b/src/SceneGraph/Camera2D.h index 6e12b1672..ac5e892b0 100644 --- a/src/SceneGraph/Camera2D.h +++ b/src/SceneGraph/Camera2D.h @@ -64,7 +64,7 @@ template class MAGNUM_SCENEGRAPH_EXPORT BasicCamera2D: public AbstractB * Sets orthographic projection to the default OpenGL cube (range @f$ [-1; 1] @f$ in all directions). * @see setProjection() */ - explicit BasicCamera2D(AbstractObject<2, T>* object); + explicit BasicCamera2D(AbstractBasicObject<2, T>* object); /** * @brief Set projection diff --git a/src/SceneGraph/Camera2D.hpp b/src/SceneGraph/Camera2D.hpp index 16926a89d..7de9807fd 100644 --- a/src/SceneGraph/Camera2D.hpp +++ b/src/SceneGraph/Camera2D.hpp @@ -35,7 +35,7 @@ using namespace std; namespace Magnum { namespace SceneGraph { -template BasicCamera2D::BasicCamera2D(AbstractObject<2, T>* object): AbstractBasicCamera<2, T>(object) {} +template BasicCamera2D::BasicCamera2D(AbstractBasicObject<2, T>* object): AbstractBasicCamera<2, T>(object) {} template BasicCamera2D* BasicCamera2D::setProjection(const Math::Vector2& size) { AbstractBasicCamera<2, T>::rawProjectionMatrix = Math::Matrix3::projection(size); diff --git a/src/SceneGraph/Camera3D.h b/src/SceneGraph/Camera3D.h index c2331d38a..74edcddbb 100644 --- a/src/SceneGraph/Camera3D.h +++ b/src/SceneGraph/Camera3D.h @@ -66,7 +66,7 @@ template class MAGNUM_SCENEGRAPH_EXPORT BasicCamera3D: public AbstractB * @brief Constructor * @param object %Object holding this feature */ - explicit BasicCamera3D(AbstractObject<3, T>* object); + explicit BasicCamera3D(AbstractBasicObject<3, T>* object); /** * @brief Set orthographic projection diff --git a/src/SceneGraph/Camera3D.hpp b/src/SceneGraph/Camera3D.hpp index 81f15bfa0..4cee4003b 100644 --- a/src/SceneGraph/Camera3D.hpp +++ b/src/SceneGraph/Camera3D.hpp @@ -33,7 +33,7 @@ namespace Magnum { namespace SceneGraph { -template BasicCamera3D::BasicCamera3D(AbstractObject<3, T>* object): AbstractBasicCamera<3, T>(object), _near(T(0)), _far(T(0)) {} +template BasicCamera3D::BasicCamera3D(AbstractBasicObject<3, T>* object): AbstractBasicCamera<3, T>(object), _near(T(0)), _far(T(0)) {} template BasicCamera3D* BasicCamera3D::setOrthographic(const Math::Vector2& size, T near, T far) { /** @todo Get near/far from the matrix */ diff --git a/src/SceneGraph/Drawable.h b/src/SceneGraph/Drawable.h index f5e81e1a5..14e0398d4 100644 --- a/src/SceneGraph/Drawable.h +++ b/src/SceneGraph/Drawable.h @@ -126,7 +126,7 @@ template class BasicDrawable: public AbstractBa * Adds the feature to the object and also to the group, if specified. * Otherwise you can use BasicDrawableGroup::add(). */ - explicit BasicDrawable(AbstractObject* object, BasicDrawableGroup* drawables = nullptr): AbstractBasicGroupedFeature, T>(object, drawables) {} + explicit BasicDrawable(AbstractBasicObject* object, BasicDrawableGroup* drawables = nullptr): AbstractBasicGroupedFeature, T>(object, drawables) {} /** * @brief Draw the object using given camera diff --git a/src/SceneGraph/Object.h b/src/SceneGraph/Object.h index 845e8a6b6..6f5c55c95 100644 --- a/src/SceneGraph/Object.h +++ b/src/SceneGraph/Object.h @@ -88,7 +88,7 @@ See @ref compilation-speedup-hpp for more information. @see Scene, AbstractFeature, AbstractTransformation, DebugTools::ObjectRenderer */ -template class MAGNUM_SCENEGRAPH_EXPORT Object: public AbstractObject, public Transformation +template class MAGNUM_SCENEGRAPH_EXPORT Object: public AbstractBasicObject, public Transformation #ifndef DOXYGEN_GENERATING_OUTPUT , private Containers::LinkedList>, private Containers::LinkedListItem, Object> #endif @@ -298,14 +298,14 @@ template class MAGNUM_SCENEGRAPH_EXPORT Object: public Abs return absoluteTransformationMatrix(); } - std::vector doTransformationMatrices(const std::vector*>& objects, const MatrixType& initialTransformationMatrix) const override final; + std::vector doTransformationMatrices(const std::vector*>& objects, const MatrixType& initialTransformationMatrix) const override final; typename Transformation::DataType MAGNUM_SCENEGRAPH_LOCAL computeJointTransformation(const std::vector*>& jointObjects, std::vector& jointTransformations, const std::size_t joint, const typename Transformation::DataType& initialTransformation) const; bool MAGNUM_SCENEGRAPH_LOCAL doIsDirty() const override final { return isDirty(); } void MAGNUM_SCENEGRAPH_LOCAL doSetDirty() override final { setDirty(); } void MAGNUM_SCENEGRAPH_LOCAL doSetClean() override final { setClean(); } - void doSetClean(const std::vector*>& objects) override final; + void doSetClean(const std::vector*>& objects) override final; void MAGNUM_SCENEGRAPH_LOCAL setClean(const typename Transformation::DataType& absoluteTransformation); diff --git a/src/SceneGraph/Object.hpp b/src/SceneGraph/Object.hpp index c7e876da9..ce05dedd4 100644 --- a/src/SceneGraph/Object.hpp +++ b/src/SceneGraph/Object.hpp @@ -38,8 +38,8 @@ namespace Magnum { namespace SceneGraph { -template AbstractObject::AbstractObject() {} -template AbstractObject::~AbstractObject() {} +template AbstractBasicObject::AbstractBasicObject() {} +template AbstractBasicObject::~AbstractBasicObject() {} template AbstractTransformation::AbstractTransformation() {} template AbstractTransformation::~AbstractTransformation() {} @@ -161,7 +161,7 @@ template void Object::setClean() { } } -template auto Object::doTransformationMatrices(const std::vector*>& objects, const MatrixType& initialTransformationMatrix) const -> std::vector { +template auto Object::doTransformationMatrices(const std::vector*>& objects, const MatrixType& initialTransformationMatrix) const -> std::vector { std::vector*> castObjects(objects.size()); for(std::size_t i = 0; i != objects.size(); ++i) /** @todo Ensure this doesn't crash, somehow */ @@ -323,7 +323,7 @@ template typename Transformation::DataType Object void Object::doSetClean(const std::vector*>& objects) { +template void Object::doSetClean(const std::vector*>& objects) { std::vector*> castObjects(objects.size()); for(std::size_t i = 0; i != objects.size(); ++i) /** @todo Ensure this doesn't crash, somehow */ diff --git a/src/SceneGraph/SceneGraph.h b/src/SceneGraph/SceneGraph.h index d29010697..26ccb6bd5 100644 --- a/src/SceneGraph/SceneGraph.h +++ b/src/SceneGraph/SceneGraph.h @@ -58,11 +58,9 @@ template using AbstractGroupedFeature2D = AbstractBasicGroupedFea template using AbstractGroupedFeature3D = AbstractBasicGroupedFeature<3, Derived, Float>; #endif -template class AbstractObject; -#ifndef CORRADE_GCC46_COMPATIBILITY -template using AbstractObject2D = AbstractObject<2, T>; -template using AbstractObject3D = AbstractObject<3, T>; -#endif +template class AbstractBasicObject; +typedef AbstractBasicObject<2, Float> AbstractObject2D; +typedef AbstractBasicObject<3, Float> AbstractObject3D; enum class TransformationType: UnsignedByte; diff --git a/src/SceneGraph/Test/AnimableTest.cpp b/src/SceneGraph/Test/AnimableTest.cpp index e7a77e2a1..b2b21b313 100644 --- a/src/SceneGraph/Test/AnimableTest.cpp +++ b/src/SceneGraph/Test/AnimableTest.cpp @@ -61,7 +61,7 @@ AnimableTest::AnimableTest() { void AnimableTest::state() { class StateTrackingAnimable: public SceneGraph::Animable3D { public: - StateTrackingAnimable(AbstractObject<3>* object, AnimableGroup3D* group = nullptr): SceneGraph::Animable3D(object, group) { + StateTrackingAnimable(AbstractObject3D* object, AnimableGroup3D* group = nullptr): SceneGraph::Animable3D(object, group) { setDuration(1.0f); } @@ -151,7 +151,7 @@ void AnimableTest::state() { class OneShotAnimable: public SceneGraph::Animable3D { public: - OneShotAnimable(AbstractObject<3>* object, AnimableGroup3D* group = nullptr): SceneGraph::Animable3D(object, group), time(-1.0f) { + OneShotAnimable(AbstractObject3D* object, AnimableGroup3D* group = nullptr): SceneGraph::Animable3D(object, group), time(-1.0f) { setDuration(10.0f); setState(AnimationState::Running); } @@ -176,7 +176,7 @@ class OneShotAnimable: public SceneGraph::Animable3D { void AnimableTest::step() { class InifiniteAnimable: public SceneGraph::Animable3D { public: - InifiniteAnimable(AbstractObject<3>* object, AnimableGroup3D* group = nullptr): SceneGraph::Animable3D(object, group), time(-1.0f), delta(0.0f) {} + InifiniteAnimable(AbstractObject3D* object, AnimableGroup3D* group = nullptr): SceneGraph::Animable3D(object, group), time(-1.0f), delta(0.0f) {} Float time, delta; @@ -235,7 +235,7 @@ void AnimableTest::duration() { void AnimableTest::repeat() { class RepeatingAnimable: public SceneGraph::Animable3D { public: - RepeatingAnimable(AbstractObject<3>* object, AnimableGroup3D* group = nullptr): SceneGraph::Animable3D(object, group), time(-1.0f) { + RepeatingAnimable(AbstractObject3D* object, AnimableGroup3D* group = nullptr): SceneGraph::Animable3D(object, group), time(-1.0f) { setDuration(10.0f); setState(AnimationState::Running); setRepeated(true); diff --git a/src/SceneGraph/Test/CameraTest.cpp b/src/SceneGraph/Test/CameraTest.cpp index 697dccd1e..c29a04dc1 100644 --- a/src/SceneGraph/Test/CameraTest.cpp +++ b/src/SceneGraph/Test/CameraTest.cpp @@ -158,7 +158,7 @@ void CameraTest::projectionSizeViewport() { void CameraTest::draw() { class Drawable: public SceneGraph::Drawable3D { public: - Drawable(AbstractObject<3>* object, DrawableGroup3D* group, Matrix4& result): SceneGraph::Drawable3D(object, group), result(result) {} + Drawable(AbstractObject3D* object, DrawableGroup3D* group, Matrix4& result): SceneGraph::Drawable3D(object, group), result(result) {} protected: void draw(const Matrix4& transformationMatrix, AbstractCamera3D*) { diff --git a/src/SceneGraph/Test/ObjectTest.cpp b/src/SceneGraph/Test/ObjectTest.cpp index 3bfec9ad2..f6151d420 100644 --- a/src/SceneGraph/Test/ObjectTest.cpp +++ b/src/SceneGraph/Test/ObjectTest.cpp @@ -271,7 +271,7 @@ void ObjectTest::setClean() { class CachingFeature: public AbstractFeature3D { public: - CachingFeature(AbstractObject<3>* object): AbstractFeature3D(object) { + CachingFeature(AbstractObject3D* object): AbstractFeature3D(object) { setCachedTransformations(CachedTransformation::Absolute); } @@ -284,7 +284,7 @@ void ObjectTest::setClean() { class CachingInvertedFeature: public AbstractFeature3D { public: - CachingInvertedFeature(AbstractObject<3>* object): AbstractFeature3D(object) { + CachingInvertedFeature(AbstractObject3D* object): AbstractFeature3D(object) { setCachedTransformations(CachedTransformation::InvertedAbsolute); } @@ -369,7 +369,7 @@ void ObjectTest::setCleanListHierarchy() { class CachingFeature: public AbstractFeature3D { public: - CachingFeature(AbstractObject<3>* object): AbstractFeature3D(object) { + CachingFeature(AbstractObject3D* object): AbstractFeature3D(object) { setCachedTransformations(CachedTransformation::Absolute); } diff --git a/src/SceneGraph/instantiation.cpp b/src/SceneGraph/instantiation.cpp index 461294575..a43a916a2 100644 --- a/src/SceneGraph/instantiation.cpp +++ b/src/SceneGraph/instantiation.cpp @@ -37,8 +37,8 @@ namespace Magnum { namespace SceneGraph { #ifndef DOXYGEN_GENERATING_OUTPUT -template class AbstractObject<2, Float>; -template class AbstractObject<3, Float>; +template class AbstractBasicObject<2, Float>; +template class AbstractBasicObject<3, Float>; template class AbstractTransformation<2, Float>; template class AbstractTransformation<3, Float>; diff --git a/src/Shapes/AbstractShape.cpp b/src/Shapes/AbstractShape.cpp index 693a0bbe0..baff8f03f 100644 --- a/src/Shapes/AbstractShape.cpp +++ b/src/Shapes/AbstractShape.cpp @@ -31,7 +31,7 @@ namespace Magnum { namespace Shapes { -template AbstractShape::AbstractShape(SceneGraph::AbstractObject* object, ShapeGroup* group): SceneGraph::AbstractBasicGroupedFeature, Float>(object, group) { +template AbstractShape::AbstractShape(SceneGraph::AbstractBasicObject* object, ShapeGroup* group): SceneGraph::AbstractBasicGroupedFeature, Float>(object, group) { this->setCachedTransformations(SceneGraph::CachedTransformation::Absolute); } diff --git a/src/Shapes/AbstractShape.h b/src/Shapes/AbstractShape.h index 98f29cfe4..b980d9f60 100644 --- a/src/Shapes/AbstractShape.h +++ b/src/Shapes/AbstractShape.h @@ -79,7 +79,7 @@ template class MAGNUM_SHAPES_EXPORT AbstractShape: publi * @param object Object holding this feature * @param group Group this shape belongs to */ - explicit AbstractShape(SceneGraph::AbstractObject* object, ShapeGroup* group = nullptr); + explicit AbstractShape(SceneGraph::AbstractBasicObject* object, ShapeGroup* group = nullptr); /** * @brief Shape group containing this shape diff --git a/src/Shapes/Shape.h b/src/Shapes/Shape.h index 37f478d05..c2073baff 100644 --- a/src/Shapes/Shape.h +++ b/src/Shapes/Shape.h @@ -75,17 +75,17 @@ template class MAGNUM_SHAPES_EXPORT Shape: public AbstractShape explicit Shape(SceneGraph::AbstractObject* object, const T& shape, ShapeGroup* group = nullptr): AbstractShape(object, group) { + template explicit Shape(SceneGraph::AbstractBasicObject* object, const T& shape, ShapeGroup* group = nullptr): AbstractShape(object, group) { Implementation::ShapeHelper::set(*this, shape); } /** @overload */ - template explicit Shape(SceneGraph::AbstractObject* object, T&& shape, ShapeGroup* group = nullptr): AbstractShape(object, group) { + template explicit Shape(SceneGraph::AbstractBasicObject* object, T&& shape, ShapeGroup* group = nullptr): AbstractShape(object, group) { Implementation::ShapeHelper::set(*this, std::move(shape)); } /** @overload */ - template explicit Shape(SceneGraph::AbstractObject* object, ShapeGroup* group = nullptr): AbstractShape(object, group) {} + template explicit Shape(SceneGraph::AbstractBasicObject* object, ShapeGroup* group = nullptr): AbstractShape(object, group) {} /** @brief Shape */ const T& shape() const { return _shape.shape; } diff --git a/src/Shapes/ShapeGroup.cpp b/src/Shapes/ShapeGroup.cpp index d99b9d598..226e7d15d 100644 --- a/src/Shapes/ShapeGroup.cpp +++ b/src/Shapes/ShapeGroup.cpp @@ -31,11 +31,11 @@ namespace Magnum { namespace Shapes { template void ShapeGroup::setClean() { /* Clean all objects */ if(!this->isEmpty()) { - std::vector*> objects(this->size()); + std::vector*> objects(this->size()); for(std::size_t i = 0; i != this->size(); ++i) objects[i] = (*this)[i]->object(); - SceneGraph::AbstractObject::setClean(objects); + SceneGraph::AbstractBasicObject::setClean(objects); } dirty = false;