mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-07-06 04:35:51 +00:00
blocking resize to keep OS in sync with boo buffers
This commit is contained in:
parent
49ff010a20
commit
e630a6be55
@ -11,6 +11,7 @@ struct DeferredWindowEvents : public boo::IWindowCallback
|
|||||||
{
|
{
|
||||||
Receiver& m_rec;
|
Receiver& m_rec;
|
||||||
std::mutex m_mt;
|
std::mutex m_mt;
|
||||||
|
std::condition_variable m_resizeCv;
|
||||||
DeferredWindowEvents(Receiver& rec) : m_rec(rec) {}
|
DeferredWindowEvents(Receiver& rec) : m_rec(rec) {}
|
||||||
|
|
||||||
bool m_destroyed = false;
|
bool m_destroyed = false;
|
||||||
@ -26,6 +27,7 @@ struct DeferredWindowEvents : public boo::IWindowCallback
|
|||||||
std::unique_lock<std::mutex> lk(m_mt);
|
std::unique_lock<std::mutex> lk(m_mt);
|
||||||
m_latestResize = rect;
|
m_latestResize = rect;
|
||||||
m_hasResize = true;
|
m_hasResize = true;
|
||||||
|
m_resizeCv.wait_for(lk, std::chrono::milliseconds(500));
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Command
|
struct Command
|
||||||
|
@ -23,7 +23,6 @@ void RootView::destroyed()
|
|||||||
|
|
||||||
void RootView::resized(const boo::SWindowRect& root, const boo::SWindowRect&)
|
void RootView::resized(const boo::SWindowRect& root, const boo::SWindowRect&)
|
||||||
{
|
{
|
||||||
boo::SWindowRect old = m_rootRect;
|
|
||||||
m_rootRect = root;
|
m_rootRect = root;
|
||||||
m_rootRect.location[0] = 0;
|
m_rootRect.location[0] = 0;
|
||||||
m_rootRect.location[1] = 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);
|
m_view->resized(m_rootRect, m_rootRect);
|
||||||
if (m_tooltip)
|
if (m_tooltip)
|
||||||
m_tooltip->resized(m_rootRect, m_rootRect);
|
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)
|
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]);
|
gfxQ->resizeRenderTexture(m_renderTex, m_rootRect.size[0], m_rootRect.size[1]);
|
||||||
m_resizeRTDirty = false;
|
m_resizeRTDirty = false;
|
||||||
|
gfxQ->schedulePostFrameHandler([&](){m_events.m_resizeCv.notify_one();});
|
||||||
}
|
}
|
||||||
gfxQ->setRenderTarget(m_renderTex);
|
gfxQ->setRenderTarget(m_renderTex);
|
||||||
gfxQ->setViewport(m_rootRect);
|
gfxQ->setViewport(m_rootRect);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user