add set_unexpected_change

This commit is contained in:
David Rose 2007-09-20 18:18:26 +00:00
parent d4bddb4f14
commit 420a7931a2
2 changed files with 96 additions and 0 deletions

View File

@ -86,6 +86,10 @@ PandaNode(const string &name) :
pgraph_cat.debug()
<< "Constructing " << (void *)this << ", " << get_name() << "\n";
}
#ifndef NDEBUG
_unexpected_change_flags = 0;
#endif // !NDEBUG
#ifdef DO_MEMORY_USAGE
MemoryUsage::update_type(this, this);
#endif
@ -139,6 +143,9 @@ PandaNode(const PandaNode &copy) :
MemoryUsage::update_type(this, this);
#endif
// Copying a node does not copy its children.
#ifndef NDEBUG
_unexpected_change_flags = 0;
#endif // !NDEBUG
// Copy the other node's state.
{
@ -1799,6 +1806,76 @@ replace_node(PandaNode *other) {
}
}
////////////////////////////////////////////////////////////////////
// Function: PandaNode::set_unexpected_change
// Access: Published
// Description: Sets one or more of the PandaNode::UnexpectedChange
// bits on, indicating that the corresponding property
// should not change again on this node. Once one of
// these bits has been set, if the property changes, an
// assertion failure will be raised, which is designed
// to assist the developer in identifying the
// troublesome code that modified the property
// unexpectedly.
//
// The input parameter is the union of bits that are to
// be set. To clear these bits later, use
// clear_unexpected_change().
//
// Since this is a developer debugging tool only, this
// function does nothing in a production (NDEBUG) build.
////////////////////////////////////////////////////////////////////
void PandaNode::
set_unexpected_change(unsigned int flags) {
#ifndef NDEBUG
_unexpected_change_flags |= flags;
#endif // !NDEBUG
}
////////////////////////////////////////////////////////////////////
// Function: PandaNode::get_unexpected_change
// Access: Published
// Description: Returns nonzero if any of the bits in the input
// parameter are set on this node, or zero if none of
// them are set. More specifically, this returns the
// particular set of bits (masked by the input
// parameter) that have been set on this node. See
// set_unexpected_change().
//
// Since this is a developer debugging tool only, this
// function always returns zero in a production (NDEBUG)
// build.
////////////////////////////////////////////////////////////////////
unsigned int PandaNode::
get_unexpected_change(unsigned int flags) const {
#ifndef NDEBUG
return _unexpected_change_flags & flags;
#else
return 0;
#endif // !NDEBUG
}
////////////////////////////////////////////////////////////////////
// Function: PandaNode::clear_unexpected_change
// Access: Published
// Description: Sets one or more of the PandaNode::UnexpectedChange
// bits off, indicating that the corresponding property
// may once again change on this node. See
// set_unexpected_change().
//
// The input parameter is the union of bits that are to
// be cleared.
//
// Since this is a developer debugging tool only, this
// function does nothing in a production (NDEBUG) build.
////////////////////////////////////////////////////////////////////
void PandaNode::
clear_unexpected_change(unsigned int flags) {
#ifndef NDEBUG
_unexpected_change_flags &= ~flags;
#endif // !NDEBUG
}
////////////////////////////////////////////////////////////////////
// Function: PandaNode::adjust_draw_mask
// Access: Published
@ -2448,6 +2525,7 @@ compute_internal_bounds(PandaNode::BoundsData *bdata, int pipeline_stage,
////////////////////////////////////////////////////////////////////
void PandaNode::
parents_changed() {
nassertv((_unexpected_change_flags & UC_parents) == 0);
}
////////////////////////////////////////////////////////////////////
@ -2461,6 +2539,7 @@ parents_changed() {
////////////////////////////////////////////////////////////////////
void PandaNode::
children_changed() {
nassertv((_unexpected_change_flags & UC_children) == 0);
}
////////////////////////////////////////////////////////////////////
@ -2472,6 +2551,7 @@ children_changed() {
////////////////////////////////////////////////////////////////////
void PandaNode::
transform_changed() {
nassertv((_unexpected_change_flags & UC_transform) == 0);
}
////////////////////////////////////////////////////////////////////
@ -2483,6 +2563,7 @@ transform_changed() {
////////////////////////////////////////////////////////////////////
void PandaNode::
state_changed() {
nassertv((_unexpected_change_flags & UC_state) == 0);
}
////////////////////////////////////////////////////////////////////
@ -2494,6 +2575,7 @@ state_changed() {
////////////////////////////////////////////////////////////////////
void PandaNode::
draw_mask_changed() {
nassertv((_unexpected_change_flags & UC_draw_mask) == 0);
}
////////////////////////////////////////////////////////////////////

View File

@ -209,6 +209,17 @@ PUBLISHED:
void copy_all_properties(PandaNode *other);
void replace_node(PandaNode *other);
enum UnexpectedChange {
UC_parents = 0x001,
UC_children = 0x002,
UC_transform = 0x004,
UC_state = 0x008,
UC_draw_mask = 0x010,
};
void set_unexpected_change(unsigned int flags);
unsigned int get_unexpected_change(unsigned int flags) const;
void clear_unexpected_change(unsigned int flags);
INLINE static DrawMask get_overall_bit();
INLINE static DrawMask get_all_camera_mask();
INLINE bool is_overall_hidden() const;
@ -432,6 +443,9 @@ private:
typedef phash_map<string, PyObject *, string_hash> PythonTagData;
#endif // HAVE_PYTHON
#ifndef NDEBUG
unsigned int _unexpected_change_flags;
#endif // !NDEBUG
// This is the data that must be cycled between pipeline stages.