GRIM: No need to make a copy of the nodes hierarchy.

This commit is contained in:
Giulio Camuffo 2011-12-12 19:18:33 +01:00
parent e6ccad7657
commit 4c030baf74
3 changed files with 9 additions and 20 deletions

View File

@ -161,7 +161,7 @@ public:
protected:
Common::String _filename;
ObjectPtr<Model> _obj;
Model *_obj;
ModelNode *_hier;
Math::Matrix4 _matrix;
AnimManager *_animation;
@ -376,11 +376,11 @@ void ModelComponent::init() {
if (_parent) {
MeshComponent *mc = static_cast<MeshComponent *>(_parent);
_obj = g_resourceloader->loadModel(_filename, cm, mc->getModel());
_hier = _obj->copyHierarchy();
_hier = _obj->getHierarchy();
mc->getNode()->addChild(_hier);
} else {
_obj = g_resourceloader->loadModel(_filename, cm);
_hier = _obj->copyHierarchy();
_hier = _obj->getHierarchy();
Debug::warning(Debug::Costumes, "Parent of model %s wasn't a mesh", _filename.c_str());
}
@ -440,7 +440,7 @@ ModelComponent::~ModelComponent() {
_hier->_parent->removeChild(_hier);
}
delete[] _hier;
delete _obj;
}
void ModelComponent::translateObject(ModelNode *node, bool reset) {
@ -543,10 +543,10 @@ void MainModelComponent::reset() {
MainModelComponent::~MainModelComponent() {
if (_hierShared)
_hier = NULL; // Keep ~ModelComp from deleting it
_obj = NULL; // Keep ~ModelComp from deleting it
for (Common::List<MainModelComponent*>::iterator i = _children.begin(); i != _children.end(); ++i) {
(*i)->_hier = NULL;
(*i)->_obj = NULL;
(*i)->_parentModel = NULL;
}

View File

@ -250,19 +250,8 @@ void Model::draw() const {
_rootHierNode->draw();
}
ModelNode *Model::copyHierarchy() {
ModelNode *result = new ModelNode[_numHierNodes];
memcpy(result, _rootHierNode, _numHierNodes * sizeof(ModelNode));
// Now adjust pointers
for (int i = 0; i < _numHierNodes; i++) {
if (result[i]._parent)
result[i]._parent = &result[(_rootHierNode[i]._parent - _rootHierNode)];
if (result[i]._child)
result[i]._child = &result[(_rootHierNode[i]._child - _rootHierNode)];
if (result[i]._sibling)
result[i]._sibling = &result[(_rootHierNode[i]._sibling - _rootHierNode)];
}
return result;
ModelNode *Model::getHierarchy() const {
return _rootHierNode;
}
void Model::reload(CMap *cmap) {

View File

@ -62,7 +62,7 @@ public:
Common::String _fname;
ObjectPtr<CMap> _cmap;
ModelNode *copyHierarchy();
ModelNode *getHierarchy() const;
int getNumNodes() const { return _numHierNodes; }
//private: