Files
Renderive/YSGraphic_Core/architecture/Render_Data.cpp
T
2026-07-24 10:54:44 +08:00

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