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:
parent
49ff010a20
commit
e630a6be55
@ -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
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user