22 lines
689 B
C++
22 lines
689 B
C++
#pragma once
|
|
#include "RenderAble.h"
|
|
namespace YSG{
|
|
template<typename T>
|
|
struct CacheModel {
|
|
std::array<T, 3> buffers;
|
|
Triple_Role_Buffer_Control control;
|
|
SpinLock mLock;
|
|
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<std::uint8_t>(src)]];
|
|
}
|
|
};
|
|
}
|