#pragma once #include "RenderAble.h" namespace YSG{ template struct CacheModel { std::array buffers; Triple_Role_Buffer_Control control; void syncStatePipeline() { auto lease = control.wait_mark_use_role(State_Ready); buffers[lease.index] = *state(SRC::Edit); control.unmark_use(lease); control.wait_swap_role(State_Ready, State_Render, [](const Triple_Buffer_View&) { return true; }); } T* state(SRC src = SRC::Render) { return &buffers[control.read_view()[static_cast(src)]]; } }; }