95 lines
2.6 KiB
Text
95 lines
2.6 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 indexBufferContext.I
|
||
|
* @author drose
|
||
|
* @date 2005-03-17
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
INLINE IndexBufferContext::
|
||
|
IndexBufferContext(PreparedGraphicsObjects *pgo, GeomPrimitive *data) :
|
||
|
BufferContext(&pgo->_ibuffer_residency, data),
|
||
|
AdaptiveLruPage(0)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the pointer to the client-side array data object.
|
||
|
*/
|
||
|
INLINE GeomPrimitive *IndexBufferContext::
|
||
|
get_data() const {
|
||
|
return (GeomPrimitive *)_object;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns true if the data has changed size since the last time mark_loaded()
|
||
|
* was called.
|
||
|
*/
|
||
|
INLINE bool IndexBufferContext::
|
||
|
changed_size(const GeomPrimitivePipelineReader *reader) const {
|
||
|
nassertr(reader->get_object() == get_data(), false);
|
||
|
return get_data_size_bytes() != (size_t)reader->get_data_size_bytes();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns true if the data has changed its usage hint since the last time
|
||
|
* mark_loaded() was called.
|
||
|
*/
|
||
|
INLINE bool IndexBufferContext::
|
||
|
changed_usage_hint(const GeomPrimitivePipelineReader *reader) const {
|
||
|
nassertr(reader->get_object() == get_data(), false);
|
||
|
return _usage_hint != reader->get_usage_hint();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns true if the data has been modified since the last time
|
||
|
* mark_loaded() was called.
|
||
|
*/
|
||
|
INLINE bool IndexBufferContext::
|
||
|
was_modified(const GeomPrimitivePipelineReader *reader) const {
|
||
|
nassertr(reader->get_object() == get_data(), false);
|
||
|
return get_modified() != reader->get_modified();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Should be called (usually by a derived class) when the on-card size of this
|
||
|
* object has changed.
|
||
|
*/
|
||
|
INLINE void IndexBufferContext::
|
||
|
update_data_size_bytes(size_t new_data_size_bytes) {
|
||
|
BufferContext::update_data_size_bytes(new_data_size_bytes);
|
||
|
AdaptiveLruPage::set_lru_size(new_data_size_bytes);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Should be called after the IndexBufferContext has been loaded into graphics
|
||
|
* memory, this updates the internal flags for changed_size() and modified().
|
||
|
*/
|
||
|
INLINE void IndexBufferContext::
|
||
|
mark_loaded(const GeomPrimitivePipelineReader *reader) {
|
||
|
nassertv(reader->get_object() == get_data());
|
||
|
update_data_size_bytes(reader->get_data_size_bytes());
|
||
|
update_modified(reader->get_modified());
|
||
|
_usage_hint = reader->get_usage_hint();
|
||
|
|
||
|
// Assume the buffer is now resident.
|
||
|
set_resident(true);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Should be called after the buffer has been forced out of graphics memory.
|
||
|
*/
|
||
|
INLINE void IndexBufferContext::
|
||
|
mark_unloaded() {
|
||
|
update_modified(UpdateSeq::old());
|
||
|
set_resident(false);
|
||
|
}
|