// Filename: callbackNode.I // Created by: drose (13Mar09) // //////////////////////////////////////////////////////////////////// // // PANDA 3D SOFTWARE // Copyright (c) Carnegie Mellon University. All rights reserved. // // All use of this software is subject to the terms of the revised BSD // license. You should have received a copy of this license along // with this source code in a file named "LICENSE." // //////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////// // Function: CallbackNode::set_cull_callback // Access: Published // Description: Sets the CallbackObject that will be notified when // this node is visited during the cull traversal. This // callback will be made during the cull thread. // // The cull traversal is responsible for determining // which nodes are visible and within the view frustum, // and for accumulating state and transform, and // generally building up the list of CullableObjects // that are to be eventually passed to the draw // traversal for rendering. // // At the time the cull traversal callback is made, the // node has been determined to be visible and it has // passed the bounding-volume test, so it lies within // the view frustum. // // The callback is passed an instance of a // NodeCullCallbackData, which contains pointers to the // CullTraverser and CullTraverserData--enough data to // examine the current node and its place within the // scene graph. The callback *replaces* the normal cull // behavior, so if your callback does nothing, the cull // traversal will not continue below this node. If you // wish the cull traversal to continue to visit this // node and below, you must call cbdata->upcall() // from your callback. //////////////////////////////////////////////////////////////////// INLINE void CallbackNode:: set_cull_callback(CallbackObject *object) { CDWriter cdata(_cycler); cdata->_cull_callback = object; } //////////////////////////////////////////////////////////////////// // Function: CallbackNode::clear_cull_callback // Access: Published // Description: Removes the callback set by an earlier call to // set_cull_callback(). //////////////////////////////////////////////////////////////////// INLINE void CallbackNode:: clear_cull_callback() { set_cull_callback(NULL); } //////////////////////////////////////////////////////////////////// // Function: CallbackNode::get_cull_callback // Access: Published // Description: Returns the CallbackObject set by set_cull_callback(). //////////////////////////////////////////////////////////////////// INLINE CallbackObject *CallbackNode:: get_cull_callback() const { CDReader cdata(_cycler); return cdata->_cull_callback; } //////////////////////////////////////////////////////////////////// // Function: CallbackNode::set_draw_callback // Access: Published // Description: Sets the CallbackObject that will be notified when // this node is visited during the draw traversal. This // callback will be made during the draw thread. // // The draw traversal is responsible for actually // issuing the commands to the graphics engine to draw // primitives. Its job is to walk through the list of // CullableObjects build up by the cull traversal, as // quickly as possible, issuing the appropriate commands // to draw each one. // // At the time the draw traversal callback is made, the // graphics state has been loaded with the correct // modelview transform and render state, and the // primitives (if any) in this node are ready to be // drawn. // // The callback is passed an instance of a // GeomDrawCallbackData, which contains pointers to the // current state and transform, as well as the current // GSG. There is a Geom pointer as well, but it will // always be NULL to this callback, since the // CallbackNode does not itself contain any Geoms. //////////////////////////////////////////////////////////////////// INLINE void CallbackNode:: set_draw_callback(CallbackObject *object) { CDWriter cdata(_cycler); cdata->_draw_callback = object; } //////////////////////////////////////////////////////////////////// // Function: CallbackNode::clear_draw_callback // Access: Published // Description: Removes the callback set by an earlier call to // set_draw_callback(). //////////////////////////////////////////////////////////////////// INLINE void CallbackNode:: clear_draw_callback() { set_draw_callback(NULL); } //////////////////////////////////////////////////////////////////// // Function: CallbackNode::get_draw_callback // Access: Published // Description: Returns the CallbackObject set by set_draw_callback(). //////////////////////////////////////////////////////////////////// INLINE CallbackObject *CallbackNode:: get_draw_callback() const { CDReader cdata(_cycler); return cdata->_draw_callback; } //////////////////////////////////////////////////////////////////// // Function: CallbackNode::CData::Constructor // Access: Public // Description: //////////////////////////////////////////////////////////////////// INLINE CallbackNode::CData:: CData() { } //////////////////////////////////////////////////////////////////// // Function: CallbackNode::CData::Copy Constructor // Access: Public // Description: //////////////////////////////////////////////////////////////////// INLINE CallbackNode::CData:: CData(const CallbackNode::CData ©) : _cull_callback(copy._cull_callback), _draw_callback(copy._draw_callback) { }