102 lines
2.8 KiB
Text
102 lines
2.8 KiB
Text
/**
|
|
* 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."
|
|
*
|
|
* @file transformTable.I
|
|
* @author drose
|
|
* @date 2005-03-23
|
|
*/
|
|
|
|
/**
|
|
* Returns true if this table has been registered. Once it has been
|
|
* registered, the set of transforms in a TransformTable may not be further
|
|
* modified; but it must be registered before it can be assigned to a Geom.
|
|
*/
|
|
INLINE bool TransformTable::
|
|
is_registered() const {
|
|
return _is_registered;
|
|
}
|
|
|
|
/**
|
|
* Registers a TransformTable for use. This is similar to
|
|
* GeomVertexFormat::register_format(). Once registered, a TransformTable may
|
|
* no longer be modified (although the individual VertexTransform objects may
|
|
* modify their reported transforms).
|
|
*
|
|
* This must be called before a table may be used in a Geom. After this call,
|
|
* you should discard the original pointer you passed in (which may or may not
|
|
* now be invalid) and let its reference count decrement normally; you should
|
|
* use only the returned value from this point on.
|
|
*/
|
|
INLINE CPT(TransformTable) TransformTable::
|
|
register_table(const TransformTable *table) {
|
|
// We don't actually bother adding the table object to a registry. This
|
|
// means there may be multiple copies of identical registered
|
|
// TransformTables. Big deal. We can always go back and make a registry
|
|
// later if we really need it.
|
|
if (table->is_registered()) {
|
|
return table;
|
|
}
|
|
|
|
((TransformTable *)table)->do_register();
|
|
return table;
|
|
}
|
|
|
|
/**
|
|
* Returns the number of transforms in the table.
|
|
*/
|
|
INLINE size_t TransformTable::
|
|
get_num_transforms() const {
|
|
return _transforms.size();
|
|
}
|
|
|
|
/**
|
|
* Returns the nth transform in the table.
|
|
*/
|
|
INLINE const VertexTransform *TransformTable::
|
|
get_transform(size_t n) const {
|
|
nassertr(n < _transforms.size(), nullptr);
|
|
return _transforms[n];
|
|
}
|
|
|
|
/**
|
|
* Returns a sequence number that's guaranteed to change at least when any
|
|
* VertexTransforms in the table change. (However, this is only true for a
|
|
* registered table. An unregistered table may or may not reflect an update
|
|
* here when a VertexTransform changes.)
|
|
*/
|
|
INLINE UpdateSeq TransformTable::
|
|
get_modified(Thread *current_thread) const {
|
|
CDReader cdata(_cycler, current_thread);
|
|
return cdata->_modified;
|
|
}
|
|
|
|
/**
|
|
* Called internally whenever a nested VertexTransform reports that it has
|
|
* been modified.
|
|
*/
|
|
INLINE void TransformTable::
|
|
update_modified(UpdateSeq modified, Thread *current_thread) {
|
|
CDWriter cdata(_cycler, true, current_thread);
|
|
cdata->_modified = modified;
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
INLINE TransformTable::CData::
|
|
CData() {
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
INLINE TransformTable::CData::
|
|
CData(const TransformTable::CData ©) :
|
|
_modified(copy._modified)
|
|
{
|
|
}
|