129 lines
3.1 KiB
Text
129 lines
3.1 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 renderAttribRegistry.I
|
||
|
* @author drose
|
||
|
* @date 2008-11-13
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Returns the slot number assigned to the indicated TypeHandle, or 0 if no
|
||
|
* slot number has been assigned.
|
||
|
*/
|
||
|
INLINE int RenderAttribRegistry::
|
||
|
get_slot(TypeHandle type_handle) const {
|
||
|
int type_index = type_handle.get_index();
|
||
|
if (type_index >= (int)_slots_by_type.size()) {
|
||
|
return 0;
|
||
|
}
|
||
|
return _slots_by_type[(size_t)type_index];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the number of RenderAttrib slots that have been allocated. This is
|
||
|
* one more than the highest slot number in use.
|
||
|
*/
|
||
|
INLINE int RenderAttribRegistry::
|
||
|
get_num_slots() const {
|
||
|
return _registry.size();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the TypeHandle associated with slot n.
|
||
|
*/
|
||
|
INLINE TypeHandle RenderAttribRegistry::
|
||
|
get_slot_type(int slot) const {
|
||
|
nassertr(slot >= 0 && slot < (int)_registry.size(), TypeHandle::none());
|
||
|
return _registry[slot]._type;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the sort number associated with slot n.
|
||
|
*/
|
||
|
INLINE int RenderAttribRegistry::
|
||
|
get_slot_sort(int slot) const {
|
||
|
nassertr(slot >= 0 && slot < (int)_registry.size(), 0);
|
||
|
return _registry[slot]._sort;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the default RenderAttrib object associated with slot n. This is
|
||
|
* the attrib that should be applied in the absence of any other attrib of
|
||
|
* this type.
|
||
|
*/
|
||
|
INLINE const RenderAttrib *RenderAttribRegistry::
|
||
|
get_slot_default(int slot) const {
|
||
|
nassertr(slot >= 0 && slot < (int)_registry.size(), 0);
|
||
|
return _registry[slot]._default_attrib;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the number of entries in the sorted_slots list.
|
||
|
*/
|
||
|
INLINE int RenderAttribRegistry::
|
||
|
get_num_sorted_slots() const {
|
||
|
return _sorted_slots.size();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the nth slot in sorted order. By traversing this list, you will
|
||
|
* retrieve all the slot numbers in order according to their registered sort
|
||
|
* value.
|
||
|
*/
|
||
|
INLINE int RenderAttribRegistry::
|
||
|
get_sorted_slot(int n) const {
|
||
|
nassertr(n >= 0 && n < (int)_sorted_slots.size(), 0);
|
||
|
return _sorted_slots[n];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
INLINE RenderAttribRegistry *RenderAttribRegistry::
|
||
|
get_global_ptr() {
|
||
|
if (_global_ptr == nullptr) {
|
||
|
init_global_ptr();
|
||
|
}
|
||
|
return _global_ptr;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the global_ptr without first ensuring it has been initialized.
|
||
|
* Only safe for code that knows it has already been initialized.
|
||
|
*/
|
||
|
INLINE RenderAttribRegistry *RenderAttribRegistry::
|
||
|
quick_get_global_ptr() {
|
||
|
return _global_ptr;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* This is an STL function object for sorting the _sorted_slots list into
|
||
|
* order by slot sort number.
|
||
|
*/
|
||
|
INLINE RenderAttribRegistry::SortSlots::
|
||
|
SortSlots(RenderAttribRegistry *reg) : _reg(reg) {
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
INLINE bool RenderAttribRegistry::SortSlots::
|
||
|
operator () (int a, int b) const {
|
||
|
return _reg->get_slot_sort(a) < _reg->get_slot_sort(b);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
INLINE RenderAttribRegistry::RegistryNode::
|
||
|
RegistryNode(TypeHandle type, int sort, const RenderAttrib *default_attrib) :
|
||
|
_type(type),
|
||
|
_sort(sort),
|
||
|
_default_attrib(default_attrib) {
|
||
|
}
|