MCPcopy Create free account
hub / github.com/OpenMW/openmw / removeTransforms

Method removeTransforms

components/sceneutil/optimizer.cpp:546–624  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

544}
545
546bool CollectLowestTransformsVisitor::removeTransforms(osg::Node* nodeWeCannotRemove)
547{
548 // transform the objects that can be applied.
549 for(ObjectMap::iterator oitr=_objectMap.begin();
550 oitr!=_objectMap.end();
551 ++oitr)
552 {
553 osg::Object* object = oitr->first;
554 ObjectStruct& os = oitr->second;
555 if (os._canBeApplied)
556 {
557 doTransform(object,os._firstMatrix);
558 }
559 }
560
561
562 bool transformRemoved = false;
563
564 // clean up the transforms.
565 for(TransformMap::iterator titr=_transformMap.begin();
566 titr!=_transformMap.end();
567 ++titr)
568 {
569 if (titr->first!=0 && titr->second._canBeApplied)
570 {
571 if (titr->first!=nodeWeCannotRemove)
572 {
573 transformRemoved = true;
574
575 osg::ref_ptr<osg::Transform> transform = titr->first;
576 osg::ref_ptr<osg::Group> group = new osg::Group;
577 group->setName( transform->getName() );
578 group->setDataVariance(osg::Object::STATIC);
579 group->setNodeMask(transform->getNodeMask());
580 group->setStateSet(transform->getStateSet());
581 group->setUpdateCallback(transform->getUpdateCallback());
582 group->setEventCallback(transform->getEventCallback());
583 group->setCullCallback(transform->getCullCallback());
584 group->setUserDataContainer(transform->getUserDataContainer());
585 group->setDescriptions(transform->getDescriptions());
586 for(unsigned int i=0;i<transform->getNumChildren();++i)
587 {
588 group->addChild(transform->getChild(i));
589 }
590
591 for(int i2=transform->getNumParents()-1;i2>=0;--i2)
592 {
593 transform->getParent(i2)->replaceChild(transform.get(),group.get());
594 }
595 }
596 else
597 {
598 osg::MatrixTransform* mt = titr->first->asMatrixTransform();
599 if (mt) mt->setMatrix(osg::Matrix::identity());
600 else
601 {
602 osg::PositionAttitudeTransform* pat = titr->first->asPositionAttitudeTransform();
603 if (pat)

Callers 1

optimizeMethod · 0.80

Calls 15

identityClass · 0.85
setNodeMaskMethod · 0.80
getStateSetMethod · 0.80
getNumChildrenMethod · 0.80
getChildMethod · 0.80
setMatrixMethod · 0.80
setAttitudeMethod · 0.80
collectDataForMethod · 0.80
setUpMapsMethod · 0.80
disableTransformMethod · 0.80
asTransformMethod · 0.80
getMatrixMethod · 0.80

Tested by

no test coverage detected