historical/toontown-classic.git/panda/include/cullBinStateSorted.I
2024-01-16 11:20:27 -06:00

69 lines
1.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 cullBinStateSorted.I
* @author drose
* @date 2005-03-22
*/
/**
*
*/
INLINE CullBinStateSorted::
CullBinStateSorted(const std::string &name, GraphicsStateGuardianBase *gsg,
const PStatCollector &draw_region_pcollector) :
CullBin(name, BT_state_sorted, gsg, draw_region_pcollector),
_objects(get_class_type())
{
}
/**
*
*/
INLINE CullBinStateSorted::ObjectData::
ObjectData(CullableObject *object) :
_object(object)
{
if (object->_munged_data == nullptr) {
_format = nullptr;
} else {
_format = object->_munged_data->get_format();
}
}
/**
* Specifies the correct sort ordering for these objects.
*/
INLINE bool CullBinStateSorted::ObjectData::
operator < (const ObjectData &other) const {
// Group by state changes, in approximate order from heaviest change to
// lightest change.
const RenderState *sa = _object->_state;
const RenderState *sb = other._object->_state;
int compare = sa->compare_sort(*sb);
if (compare != 0) {
return compare < 0;
}
// Vertex format changes are also fairly slow.
if (_format != other._format) {
return _format < other._format;
}
// Prevent unnecessary vertex buffer rebinds.
if (_object->_munged_data != other._object->_munged_data) {
return _object->_munged_data < other._object->_munged_data;
}
// Uniform updates are actually pretty fast.
if (_object->_internal_transform != other._object->_internal_transform) {
return _object->_internal_transform < other._object->_internal_transform;
}
return 0;
}