Changeset 10671

Show
Ignore:
Timestamp:
10/22/09 12:33:16 (5 years ago)
Author:
robert
Message:

From Cedric Pinson, "Here a patch to be able to clone stateattribute, in order to do that i
moved the StateAttribute::Callback structure to a file
StateAttributeCallback? with the same behavior as NodeCallback?.
"

Location:
OpenSceneGraph/trunk
Files:
10 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/include/osg/CopyOp

    r10362 r10671  
    2525class StateSet; 
    2626class StateAttribute; 
     27class StateAttributeCallback; 
    2728class Uniform; 
    2829class Node; 
     
    3233class Shape; 
    3334class NodeCallback; 
     35 
    3436 
    3537/** Copy Op(erator) used to control whether shallow or deep copy is used 
     
    5456            DEEP_COPY_SHAPES            = 1<<9, 
    5557            DEEP_COPY_UNIFORMS          = 1<<10, 
    56             DEEP_COPY_NODECALLBACKS     = 1<<11, 
     58            DEEP_COPY_CALLBACKS         = 1<<11, 
    5759            DEEP_COPY_ALL               = 0x7FFFFFFF 
    5860        }; 
     
    7678        virtual Uniform*        operator() (const Uniform* shape) const; 
    7779        virtual NodeCallback*   operator() (const NodeCallback* nodecallback) const; 
     80        virtual StateAttributeCallback* operator() (const StateAttributeCallback* stateattributecallback) const; 
    7881 
    7982    protected: 
  • OpenSceneGraph/trunk/include/osg/ImageSequence

    r8990 r10671  
    106106        virtual void update(NodeVisitor* nv); 
    107107 
    108         struct OSG_EXPORT UpdateCallback : public osg::StateAttribute::Callback 
     108        struct OSG_EXPORT UpdateCallback : public osg::StateAttributeCallback 
    109109        { 
    110110            virtual void operator () (osg::StateAttribute* attr, osg::NodeVisitor* nv); 
  • OpenSceneGraph/trunk/include/osg/StateAttribute

    r9599 r10671  
    1717#include <osg/Export> 
    1818#include <osg/Object> 
     19#include <osg/StateAttributeCallback> 
    1920#include <osg/GL> 
    2021 
     
    191192         
    192193        StateAttribute(const StateAttribute& sa,const CopyOp& copyop=CopyOp::SHALLOW_COPY):  
    193             Object(sa,copyop) {} 
     194            Object(sa,copyop), 
     195            _updateCallback(copyop(sa._updateCallback.get())) 
     196            {} 
    194197         
    195198 
     
    282285            return true; 
    283286        } 
    284          
    285         struct Callback : public virtual osg::Object 
    286         { 
    287             Callback() {} 
    288  
    289             Callback(const Callback&,const CopyOp&) {} 
    290  
    291             META_Object(osg,Callback); 
    292  
    293             /** do customized update code.*/ 
    294             virtual void operator () (StateAttribute*, NodeVisitor*) {} 
    295         }; 
     287 
     288        // provide callback for backwards compatibility. 
     289        typedef osg::StateAttributeCallback Callback; 
    296290 
    297291        /** Set the UpdateCallback which allows users to attach customize the updating of an object during the update traversal.*/ 
    298         void setUpdateCallback(Callback* uc); 
     292        void setUpdateCallback(StateAttributeCallback* uc); 
    299293 
    300294        /** Get the non const UpdateCallback.*/ 
    301         Callback* getUpdateCallback() { return _updateCallback.get(); } 
     295        StateAttributeCallback* getUpdateCallback() { return _updateCallback.get(); } 
    302296 
    303297        /** Get the const UpdateCallback.*/ 
    304         const Callback* getUpdateCallback() const { return _updateCallback.get(); } 
     298        const StateAttributeCallback* getUpdateCallback() const { return _updateCallback.get(); } 
    305299 
    306300 
    307301        /** Set the EventCallback which allows users to attach customize the updating of an object during the Event traversal.*/ 
    308         void setEventCallback(Callback* ec); 
     302        void setEventCallback(StateAttributeCallback* ec); 
    309303 
    310304        /** Get the non const EventCallback.*/ 
    311         Callback* getEventCallback() { return _eventCallback.get(); } 
     305        StateAttributeCallback* getEventCallback() { return _eventCallback.get(); } 
    312306 
    313307        /** Get the const EventCallback.*/ 
    314         const Callback* getEventCallback() const { return _eventCallback.get(); } 
     308        const StateAttributeCallback* getEventCallback() const { return _eventCallback.get(); } 
    315309 
    316310     
     
    344338        friend class osg::StateSet; 
    345339 
    346         ref_ptr<Callback>   _updateCallback; 
    347         ref_ptr<Callback>   _eventCallback; 
     340        ref_ptr<StateAttributeCallback>   _updateCallback; 
     341        ref_ptr<StateAttributeCallback>   _eventCallback; 
    348342}; 
    349343 
  • OpenSceneGraph/trunk/include/osgAnimation/UpdateCallback

    r10593 r10671  
    3737        virtual void updateLink() = 0; 
    3838        virtual const std::string& getName() const = 0; 
    39  
    40         virtual ~AnimationUpdateCallbackBase() {} 
    4139    }; 
    4240 
     
    131129 
    132130 
    133     class OSGANIMATION_EXPORT UpdateMaterial : public AnimationUpdateCallback<osg::StateAttribute::Callback> 
     131    class OSGANIMATION_EXPORT UpdateMaterial : public AnimationUpdateCallback<osg::StateAttributeCallback> 
    134132    { 
    135133    protected: 
     
    148146        bool needLink() const; 
    149147        bool link(osgAnimation::Channel* channel); 
     148        osgAnimation::Vec4Target* getDiffuse(); 
    150149    }; 
    151150 
  • OpenSceneGraph/trunk/src/osg/CMakeLists.txt

    r10650 r10671  
    141141    ${HEADER_PATH}/State 
    142142    ${HEADER_PATH}/StateAttribute 
     143    ${HEADER_PATH}/StateAttributeCallback 
    143144    ${HEADER_PATH}/StateSet 
    144145    ${HEADER_PATH}/Stats 
  • OpenSceneGraph/trunk/src/osg/CopyOp.cpp

    r10362 r10671  
    1919#include <osg/PrimitiveSet> 
    2020#include <osg/Shape> 
     21#include <osg/StateAttribute> 
    2122 
    2223using namespace osg; 
     
    6869NodeCallback* CopyOp::operator() (const NodeCallback* nc) const 
    6970{ 
    70     if (nc && _flags&DEEP_COPY_NODECALLBACKS) 
     71    if (nc && _flags&DEEP_COPY_CALLBACKS) 
    7172    { 
    7273        // deep copy the full chain of callback 
     
    8687        return const_cast<NodeCallback*>(nc); 
    8788} 
     89 
     90 
     91StateAttributeCallback* CopyOp::operator() (const StateAttributeCallback* sc) const 
     92{ 
     93    if (sc && _flags&DEEP_COPY_CALLBACKS) 
     94    { 
     95        // deep copy the full chain of callback 
     96        StateAttributeCallback* cb = dynamic_cast<StateAttributeCallback*>(sc->clone(*this)); 
     97        return cb; 
     98    } 
     99    else 
     100        return const_cast<StateAttributeCallback*>(sc); 
     101} 
     102 
  • OpenSceneGraph/trunk/src/osg/StateAttribute.cpp

    r9354 r10671  
    4343 
    4444 
    45 void StateAttribute::setUpdateCallback(Callback* uc) 
     45void StateAttribute::setUpdateCallback(StateAttributeCallback* uc) 
    4646{ 
    4747    osg::notify(osg::INFO)<<"StateAttribute::Setting Update callbacks"<<std::endl; 
     
    7070} 
    7171 
    72 void StateAttribute::setEventCallback(Callback* ec) 
     72void StateAttribute::setEventCallback(StateAttributeCallback* ec) 
    7373{ 
    7474    osg::notify(osg::INFO)<<"StateAttribute::Setting Event callbacks"<<std::endl; 
  • OpenSceneGraph/trunk/src/osg/StateSet.cpp

    r9989 r10671  
    16741674            ++itr) 
    16751675        { 
    1676             StateAttribute::Callback* callback = itr->second.first->getUpdateCallback(); 
     1676            StateAttributeCallback* callback = itr->second.first->getUpdateCallback(); 
    16771677            if (callback) (*callback)(itr->second.first.get(),nv); 
    16781678        } 
     
    16871687                ++itr) 
    16881688            { 
    1689                 StateAttribute::Callback* callback = itr->second.first->getUpdateCallback(); 
     1689                StateAttributeCallback* callback = itr->second.first->getUpdateCallback(); 
    16901690                if (callback) (*callback)(itr->second.first.get(),nv); 
    16911691            } 
     
    17481748            ++itr) 
    17491749        { 
    1750             StateAttribute::Callback* callback = itr->second.first->getEventCallback(); 
     1750            StateAttributeCallback* callback = itr->second.first->getEventCallback(); 
    17511751            if (callback) (*callback)(itr->second.first.get(),nv); 
    17521752        } 
     
    17611761                ++itr) 
    17621762            { 
    1763                 StateAttribute::Callback* callback = itr->second.first->getEventCallback(); 
     1763                StateAttributeCallback* callback = itr->second.first->getEventCallback(); 
    17641764                if (callback) (*callback)(itr->second.first.get(),nv); 
    17651765            } 
  • OpenSceneGraph/trunk/src/osgAnimation/UpdateCallback.cpp

    r10561 r10671  
    123123UpdateMaterial::UpdateMaterial(const UpdateMaterial& apc,const osg::CopyOp& copyop)  
    124124    : osg::Object(apc, copyop), 
    125       AnimationUpdateCallback<osg::StateAttribute::Callback>(apc, copyop) 
     125      AnimationUpdateCallback<osg::StateAttributeCallback>(apc, copyop) 
    126126{ 
    127127    _diffuse = new osgAnimation::Vec4Target(apc._diffuse->getValue()); 
     
    129129 
    130130UpdateMaterial::UpdateMaterial(const std::string& name): 
    131     AnimationUpdateCallback<osg::StateAttribute::Callback>(name) 
     131    AnimationUpdateCallback<osg::StateAttributeCallback>(name) 
    132132{ 
    133133    _diffuse = new osgAnimation::Vec4Target(osg::Vec4(1,0,1,1)); 
     
    145145} 
    146146 
     147 
     148osgAnimation::Vec4Target* UpdateMaterial::getDiffuse() { return _diffuse.get(); } 
    147149void UpdateMaterial::update(osg::Material& material)  
    148150{ 
  • OpenSceneGraph/trunk/src/osgPlugins/osg/StateAttribute.cpp

    r9389 r10671  
    3030    StateAttribute& stateAttribute = static_cast<StateAttribute&>(obj); 
    3131 
    32     static ref_ptr<StateAttribute::Callback> s_callback = new osg::StateAttribute::Callback; 
     32    static ref_ptr<StateAttributeCallback> s_callback = new osg::StateAttributeCallback; 
    3333    while (fr.matchSequence("UpdateCallback {")) 
    3434    { 
    3535        //int entry = fr[0].getNoNestedBrackets(); 
    3636        fr += 2; 
    37         StateAttribute::Callback* callback = dynamic_cast<StateAttribute::Callback*>(fr.readObjectOfType(*s_callback)); 
     37        StateAttributeCallback* callback = dynamic_cast<StateAttributeCallback*>(fr.readObjectOfType(*s_callback)); 
    3838        if (callback) { 
    3939            stateAttribute.setUpdateCallback(callback); 
     
    4646        //int entry = fr[0].getNoNestedBrackets(); 
    4747        fr += 2; 
    48         StateAttribute::Callback* callback = dynamic_cast<StateAttribute::Callback*>(fr.readObjectOfType(*s_callback)); 
     48        StateAttributeCallback* callback = dynamic_cast<StateAttributeCallback*>(fr.readObjectOfType(*s_callback)); 
    4949        if (callback) { 
    5050            stateAttribute.setEventCallback(callback);