2
0
mirror of https://github.com/AxioDL/metaforce.git synced 2025-07-05 05:15:53 +00:00

blocking resize to keep OS in sync with boo buffers

This commit is contained in:
Jack Andersen 2015-12-20 14:42:18 -10:00
parent 49ff010a20
commit e630a6be55
2 changed files with 4 additions and 3 deletions

View File

@ -11,6 +11,7 @@ struct DeferredWindowEvents : public boo::IWindowCallback
{
Receiver& m_rec;
std::mutex m_mt;
std::condition_variable m_resizeCv;
DeferredWindowEvents(Receiver& rec) : m_rec(rec) {}
bool m_destroyed = false;
@ -26,6 +27,7 @@ struct DeferredWindowEvents : public boo::IWindowCallback
std::unique_lock<std::mutex> lk(m_mt);
m_latestResize = rect;
m_hasResize = true;
m_resizeCv.wait_for(lk, std::chrono::milliseconds(500));
}
struct Command

View File

@ -23,7 +23,6 @@ void RootView::destroyed()
void RootView::resized(const boo::SWindowRect& root, const boo::SWindowRect&)
{
boo::SWindowRect old = m_rootRect;
m_rootRect = root;
m_rootRect.location[0] = 0;
m_rootRect.location[1] = 0;
@ -32,8 +31,7 @@ void RootView::resized(const boo::SWindowRect& root, const boo::SWindowRect&)
m_view->resized(m_rootRect, m_rootRect);
if (m_tooltip)
m_tooltip->resized(m_rootRect, m_rootRect);
if (old != m_rootRect)
m_resizeRTDirty = true;
m_resizeRTDirty = true;
}
void RootView::mouseDown(const boo::SWindowCoord& coord, boo::EMouseButton button, boo::EModifierKey mods)
@ -182,6 +180,7 @@ void RootView::draw(boo::IGraphicsCommandQueue* gfxQ)
{
gfxQ->resizeRenderTexture(m_renderTex, m_rootRect.size[0], m_rootRect.size[1]);
m_resizeRTDirty = false;
gfxQ->schedulePostFrameHandler([&](){m_events.m_resizeCv.notify_one();});
}
gfxQ->setRenderTarget(m_renderTex);
gfxQ->setViewport(m_rootRect);