open_toontown_panda3d/panda/src/gobj/transformBlendTable.I

169 lines
6.5 KiB
Plaintext

// Filename: transformBlendTable.I
// Created by: drose (24Mar05)
//
////////////////////////////////////////////////////////////////////
//
// PANDA 3D SOFTWARE
// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
//
// All use of this software is subject to the terms of the Panda 3d
// Software license. You should have received a copy of this license
// along with this source code; you will also find a current copy of
// the license at http://etc.cmu.edu/panda3d/docs/license/ .
//
// To contact the maintainers of this program write to
// panda3d-general@lists.sourceforge.net .
//
////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
// Function: TransformBlendTable::get_num_blends
// Access: Published
// Description: Returns the total number of different blend
// combinations in the table.
////////////////////////////////////////////////////////////////////
INLINE int TransformBlendTable::
get_num_blends() const {
return _blends.size();
}
////////////////////////////////////////////////////////////////////
// Function: TransformBlendTable::get_blend
// Access: Published
// Description: Returns the nth blend in the table.
////////////////////////////////////////////////////////////////////
INLINE const TransformBlend &TransformBlendTable::
get_blend(int n) const {
nassertr(n >= 0 && n < (int)_blends.size(), _blends[0]);
return _blends[n];
}
////////////////////////////////////////////////////////////////////
// Function: TransformBlendTable::get_modified
// Access: Published
// Description: Returns a counter which is guaranteed to increment at
// least when any TransformBlends within the table
// have changed.
////////////////////////////////////////////////////////////////////
INLINE UpdateSeq TransformBlendTable::
get_modified(Thread *current_thread) const {
CDLockedReader cdata(_cycler);
if (cdata->_global_modified != VertexTransform::get_global_modified(current_thread)) {
CDWriter cdataw(((TransformBlendTable *)this)->_cycler, cdata, false);
((TransformBlendTable *)this)->recompute_modified(cdataw, current_thread);
return cdataw->_modified;
} else {
return cdata->_modified;
}
}
////////////////////////////////////////////////////////////////////
// Function: TransformBlendTable::get_num_transforms
// Access: Published
// Description: Returns the number of unique VertexTransform objects
// represented in the table. This will correspond to
// the size of the TransformTable object that would
// represent the same table. This is also the same
// limit reflected by
// GraphicsStateGuardian::get_max_vertex_transform_indices().
////////////////////////////////////////////////////////////////////
INLINE int TransformBlendTable::
get_num_transforms() const {
consider_rebuild_index();
if (_num_transforms < 0) {
// Even if our index is otherwise accurate, we might have recently
// added a blend or two, which would necessitate recomputing this
// value--which means we need to rebuild the index.
((TransformBlendTable *)this)->rebuild_index();
}
return _num_transforms;
}
////////////////////////////////////////////////////////////////////
// Function: TransformBlendTable::get_max_simultaneous_transforms
// Access: Published
// Description: Returns the maximum number of unique VertexTransform
// objects that are applied to any one vertex
// simultaneously. This is the same limit reflected by
// GraphicsStateGuardian::get_max_vertex_transforms().
////////////////////////////////////////////////////////////////////
INLINE int TransformBlendTable::
get_max_simultaneous_transforms() const {
consider_rebuild_index();
return _max_simultaneous_transforms;
}
////////////////////////////////////////////////////////////////////
// Function: TransformBlendTable::set_rows
// Access: Published
// Description: Specifies the subset of rows (vertices) in the
// associated GeomVertexData that this
// TransformBlendTable actually affects.
////////////////////////////////////////////////////////////////////
INLINE void TransformBlendTable::
set_rows(const SparseArray &rows) {
_rows = rows;
}
////////////////////////////////////////////////////////////////////
// Function: TransformBlendTable::get_rows
// Access: Published
// Description: Returns the subset of rows (vertices) in the
// associated GeomVertexData that this
// TransformBlendTable actually affects.
////////////////////////////////////////////////////////////////////
INLINE const SparseArray &TransformBlendTable::
get_rows() const {
return _rows;
}
////////////////////////////////////////////////////////////////////
// Function: TransformBlendTable::modify_rows
// Access: Published
// Description: Returns a modifiable reference to the SparseArray
// that specifies the subset of rows (vertices) in the
// associated GeomVertexData that this
// TransformBlendTable actually affects.
////////////////////////////////////////////////////////////////////
INLINE SparseArray &TransformBlendTable::
modify_rows() {
return _rows;
}
////////////////////////////////////////////////////////////////////
// Function: TransformBlendTable::consider_rebuild_index
// Access: Private
// Description: Calls rebuild_index() if the index needs to be
// rebuilt.
////////////////////////////////////////////////////////////////////
INLINE void TransformBlendTable::
consider_rebuild_index() const {
if (_blend_index.empty()) {
((TransformBlendTable *)this)->rebuild_index();
}
}
////////////////////////////////////////////////////////////////////
// Function: TransformBlendTable::CData::Constructor
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
INLINE TransformBlendTable::CData::
CData() {
}
////////////////////////////////////////////////////////////////////
// Function: TransformBlendTable::CData::Copy Constructor
// Access: Public
// Description:
////////////////////////////////////////////////////////////////////
INLINE TransformBlendTable::CData::
CData(const TransformBlendTable::CData &copy) :
_modified(copy._modified),
_global_modified(copy._global_modified)
{
}