42 lines
1.4 KiB
C++
42 lines
1.4 KiB
C++
#include "Renderable_Core.h"
|
|
namespace YSG {
|
|
QDebug operator<<(QDebug debug, const Range& range) {
|
|
QDebugStateSaver saver(debug);
|
|
debug.nospace() << "Range(" << range.lower << ", " << range.upper << ")";
|
|
return debug;
|
|
}
|
|
Render_Edit_Guard::Render_Edit_Guard(Render_Data* data, Triple_Buffer_Lease lease) : mData(data), mLease(lease) {
|
|
}
|
|
Render_Edit_Guard::~Render_Edit_Guard() {
|
|
if (!mData)
|
|
return;
|
|
++mData->state_by_index(mLease.index)->version;
|
|
if (mData->qPtr)
|
|
mData->qPtr->mark_render_dirty();
|
|
mData->unmark_state(mLease);
|
|
}
|
|
Render_Input_Guard::Render_Input_Guard(Render_Data* data, Triple_Buffer_Lease lease) : mData(data), mLease(lease) {
|
|
}
|
|
Render_Input_Guard::~Render_Input_Guard() {
|
|
if (!mData)
|
|
return;
|
|
mData->mark_input_dirty(mLease);
|
|
mData->mInputControl.unmark_use(mLease);
|
|
}
|
|
void Render_Data::mark_input_dirty(Triple_Buffer_Lease lease, bool notifyRender) {
|
|
Input_Buffer_Slot& slot = input_slot_by_index(lease.index);
|
|
slot.version = ++mInputVersion;
|
|
slot.pending = true;
|
|
if (notifyRender && qPtr)
|
|
qPtr->mark_render_dirty();
|
|
}
|
|
SRC Render_State::src() {
|
|
auto view = dPtr->mStateControl.read_view();
|
|
for (std::uint8_t role = State_Edit; role <= State_Render; ++role) {
|
|
if (dPtr->mStateBuffers[view[role]] == this)
|
|
return static_cast<SRC>(role);
|
|
}
|
|
return SRC::Edit;
|
|
}
|
|
} // namespace YSG
|