tempdata 也采用三缓冲架构
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user