diff --git a/src/SceneGraph/Object.hpp b/src/SceneGraph/Object.hpp index f352d23b1..902ba3e83 100644 --- a/src/SceneGraph/Object.hpp +++ b/src/SceneGraph/Object.hpp @@ -144,20 +144,36 @@ template std::vector std::vector Object::transformations(std::vector*> objects, const typename Transformation::DataType& initialTransformation) const { + CORRADE_ASSERT(objects.size() < 0xFFFFu, "SceneGraph::Object::transformations(): too large scene", {}); + /* Remember object count for later */ std::size_t objectCount = objects.size(); /** @bug What if there is one objects twice in the list */ - /* Create initial list of joints from original objects */ - std::vector*> jointObjects(objects.size()); - for(std::size_t i = 0; i != jointObjects.size(); ++i) { - jointObjects[i] = static_cast*>(objects[i]); - CORRADE_INTERNAL_ASSERT(jointObjects[i]->counter == 0xFFFFu); - jointObjects[i]->counter = i; - jointObjects[i]->flags |= Flag::Joint; + /* Mark all original objects as joints and create initial list of joints + from them */ + for(std::size_t i = 0; i != objects.size(); ++i) { + CORRADE_INTERNAL_ASSERT(objects[i]->counter == 0xFFFFu); + objects[i]->counter = i; + objects[i]->flags |= Flag::Joint; } + std::vector*> jointObjects(objects); /* Scene object */ const Scene* scene = this->scene(); @@ -186,6 +202,8 @@ template std::vector Ob /* If not already marked as joint, mark it as such and add it to list of joint objects */ if(!(parent->flags & Flag::Joint)) { + CORRADE_ASSERT(jointObjects.size() < 0xFFFFu, + "SceneGraph::Object::transformations(): too large scene", {}); CORRADE_INTERNAL_ASSERT(parent->counter == 0xFFFFu); parent->counter = jointObjects.size(); parent->flags |= Flag::Joint; @@ -199,8 +217,6 @@ template std::vector Ob if(it == objects.end()) it = objects.begin(); } - CORRADE_ASSERT(objects.size() < 0xFFFFu, "SceneGraph::Object::transformations(): too large scene", {}); - /* Array of absolute transformations in joints */ std::vector jointTransformations(jointObjects.size());