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

122 lines
3.4 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 bufferContext.I
* @author drose
* @date 2006-03-16
*/
/**
* Returns the associated object.
*/
INLINE TypedWritableReferenceCount *BufferContext::
get_object() const {
return _object;
}
/**
* Returns the number of bytes previously reported for the data object. This
* is used to track changes in the data object's allocated size; if it changes
* from this, we need to create a new buffer. This is also used to track
* memory utilization in PStats.
*/
INLINE size_t BufferContext::
get_data_size_bytes() const {
return _data_size_bytes;
}
/**
* Returns the UpdateSeq that was recorded the last time mark_loaded() was
* called.
*/
INLINE UpdateSeq BufferContext::
get_modified() const {
return _modified;
}
/**
* Returns the active flag associated with this object. An object is
* considered "active" if it was rendered in the current frame.
*/
INLINE bool BufferContext::
get_active() const {
return (_residency_state & BufferResidencyTracker::S_active) != 0;
}
/**
* Returns the resident flag associated with this object. An object is
* considered "resident" if it appears to be resident in texture memory.
*/
INLINE bool BufferContext::
get_resident() const {
return (_residency_state & BufferResidencyTracker::S_resident) != 0;
}
/**
* Changes the active flag associated with this object. An object is
* considered "active" if it was rendered in the current frame.
*/
INLINE void BufferContext::
set_active(bool flag) {
if (flag) {
_residency_state |= BufferResidencyTracker::S_active;
// Assume that rendering the object automatically makes it resident.
_residency_state |= BufferResidencyTracker::S_resident;
} else {
_residency_state &= ~BufferResidencyTracker::S_active;
}
set_owning_chain(&_residency->_chains[_residency_state]);
}
/**
* Changes the resident flag associated with this object. An object is
* considered "resident" if it appears to be resident in texture memory.
*/
INLINE void BufferContext::
set_resident(bool flag) {
if (flag) {
_residency_state |= BufferResidencyTracker::S_resident;
} else {
_residency_state &= ~BufferResidencyTracker::S_resident;
}
set_owning_chain(&_residency->_chains[_residency_state]);
}
/**
* This can be used along with BufferContextChain::get_first() to walk through
* the list of objects stored on a tracker.
*/
INLINE BufferContext *BufferContext::
get_next() const {
nassertr(_owning_chain != nullptr, nullptr);
if ((BufferContextChain *)_next == _owning_chain) {
return nullptr;
}
return (BufferContext *)_next;
}
/**
* Should be called (usually by a derived class) when the on-card size of this
* object has changed.
*/
INLINE void BufferContext::
update_data_size_bytes(size_t new_data_size_bytes) {
if (_owning_chain != nullptr) {
_owning_chain->adjust_bytes((int)new_data_size_bytes - (int)_data_size_bytes);
}
_data_size_bytes = new_data_size_bytes;
}
/**
* Should be called (usually by a derived class) when the modified counter for
* this object has changed.
*/
INLINE void BufferContext::
update_modified(UpdateSeq new_modified) {
_modified = new_modified;
}