Introduce osg::Object::asNode(), asNodeVisitor(), asStateAttribute() and asUniform() to replace dynamic_cast<> usage in Callback.cpp.
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/trunk@14902 16af8721-9629-0410-8352-f15c8da7e697
This commit is contained in:
@@ -25,13 +25,8 @@ bool Callback::traverse(Object* object, Object* data)
|
||||
if (_nestedCallback.valid()) return _nestedCallback->run(object, data);
|
||||
else
|
||||
{
|
||||
#if 1
|
||||
osg::Node* node = dynamic_cast<osg::Node*>(object);
|
||||
osg::NodeVisitor* nv = dynamic_cast<osg::NodeVisitor*>(data);
|
||||
#else
|
||||
osg::Node* node = object ? data->asNode() : 0;
|
||||
osg::Node* node = object ? object->asNode() : 0;
|
||||
osg::NodeVisitor* nv = data ? data->asNodeVisitor() : 0;
|
||||
#endif
|
||||
if (node && nv)
|
||||
{
|
||||
nv->traverse(*node);
|
||||
@@ -69,8 +64,9 @@ bool CallbackObject::run(osg::Object* object, osg::Parameters& inputParameters,
|
||||
//
|
||||
bool NodeCallback::run(osg::Object* object, osg::Object* data)
|
||||
{
|
||||
osg::Node* node = dynamic_cast<osg::Node*>(object);
|
||||
osg::NodeVisitor* nv = dynamic_cast<osg::NodeVisitor*>(data);
|
||||
osg::Node* node = object ? object->asNode() : 0;
|
||||
osg::NodeVisitor* nv = data ? data->asNodeVisitor() : 0;
|
||||
|
||||
if (node && nv)
|
||||
{
|
||||
operator()(node, nv);
|
||||
@@ -95,8 +91,8 @@ void NodeCallback::operator()(Node* node, NodeVisitor* nv)
|
||||
//
|
||||
bool StateAttributeCallback::run(osg::Object* object, osg::Object* data)
|
||||
{
|
||||
osg::StateAttribute* sa = dynamic_cast<osg::StateAttribute*>(object);
|
||||
osg::NodeVisitor* nv = dynamic_cast<osg::NodeVisitor*>(data);
|
||||
osg::StateAttribute* sa = object ? object->asStateAttribute() : 0;
|
||||
osg::NodeVisitor* nv = data ? data->asNodeVisitor() : 0;
|
||||
if (sa && nv)
|
||||
{
|
||||
operator()(sa, nv);
|
||||
@@ -114,8 +110,8 @@ bool StateAttributeCallback::run(osg::Object* object, osg::Object* data)
|
||||
//
|
||||
bool UniformCallback::run(osg::Object* object, osg::Object* data)
|
||||
{
|
||||
osg::Uniform* uniform = dynamic_cast<osg::Uniform*>(object);
|
||||
osg::NodeVisitor* nv = dynamic_cast<osg::NodeVisitor*>(data);
|
||||
osg::Uniform* uniform = object ? object->asUniform() : 0;
|
||||
osg::NodeVisitor* nv = data ? data->asNodeVisitor() : 0;
|
||||
if (uniform && nv)
|
||||
{
|
||||
operator()(uniform, nv);
|
||||
|
||||
Reference in New Issue
Block a user