122 lines
3.4 KiB
Text
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;
|
|
}
|