tempdata 也采用三缓冲架构

This commit is contained in:
2026-07-23 11:39:46 +08:00
parent a3a385f8da
commit e2ecf8081f
22 changed files with 395 additions and 251 deletions
+18 -4
View File
@@ -101,6 +101,17 @@ namespace YSG {
RenderEditGuard::~RenderEditGuard() {
if(mData && mData->qPtr) mData->qPtr->markStateDirty();
}
RenderInputGuard::RenderInputGuard(RenderData* data) : mData(data) {
}
RenderInputGuard::~RenderInputGuard() {
if(mData) mData->markInputDirty();
}
void RenderData::markInputDirty() {
InputBufferSlot& slot = inputSlot(Input_Edit);
slot.version = ++mInputVersion;
slot.pending = true;
if(qPtr) qPtr->markRenderDirty();
}
void RenderAble::init(Plot* plot, QString layerName) {
if(layerName.isEmpty()) {
layerName = plot->mDefaultLayerName;
@@ -109,13 +120,13 @@ namespace YSG {
mPlot = plot;
if(!dPtr) dPtr = createRenderData();
dPtr->clearStateBuffers();
delete dPtr->mRenderTempData;
delete dPtr->mEditTempData;
dPtr->clearInputBuffers();
dPtr->mStateBuffers[State_Edit] = createRenderState();
dPtr->mStateBuffers[State_Ready] = createRenderState();
dPtr->mStateBuffers[State_Render] = createRenderState();
dPtr->mRenderTempData = createTempData();
dPtr->mEditTempData = createTempData();
dPtr->mInputBuffers[Input_Edit].data = createInputData();
dPtr->mInputBuffers[Input_Ready].data = createInputData();
dPtr->mInputBuffers[Input_Render].data = createInputData();
for(RenderState* state : dPtr->mStateBuffers) {
state->dPtr = dPtr;
}
@@ -125,6 +136,9 @@ namespace YSG {
}
void RenderAble::markStateDirty() {
if(dPtr) ++dPtr->state(State_Edit)->version;
markRenderDirty();
}
void RenderAble::markRenderDirty() {
if(mPlot) mPlot->markRenderStateDirty();
}
bool RenderAble::ok() const {