Free opengl resources before allocating new ones, this fixes crashes with low video memory

This commit is contained in:
Alex Zolotarev 2012-01-20 03:03:44 +03:00 committed by Alex Zolotarev
parent 159621adf4
commit 3b1610da64
3 changed files with 10 additions and 0 deletions

View file

@ -105,6 +105,7 @@ RenderPolicyST::RenderPolicyST(VideoTimer * videoTimer,
rmp.fitIntoLimits();
m_resourceManager.reset();
m_resourceManager.reset(new yg::ResourceManager(rmp));
Platform::FilesList fonts;
@ -123,8 +124,10 @@ RenderPolicyST::RenderPolicyST(VideoTimer * videoTimer,
p.m_isSynchronized = false;
p.m_useGuiResources = true;
m_drawer.reset();
m_drawer.reset(new DrawerYG(p));
m_windowHandle.reset();
m_windowHandle.reset(new WindowHandle());
m_windowHandle->setUpdatesEnabled(false);
@ -132,6 +135,7 @@ RenderPolicyST::RenderPolicyST(VideoTimer * videoTimer,
m_windowHandle->setVideoTimer(videoTimer);
m_windowHandle->setRenderContext(primaryRC);
m_renderQueue.reset();
m_renderQueue.reset(new RenderQueue(GetPlatform().SkinName(),
false,
false,

View file

@ -75,6 +75,7 @@ void RenderQueueRoutine::onSize(int w, int h)
size_t texW = m_renderState->m_textureWidth;
size_t texH = m_renderState->m_textureHeight;
m_newDepthBuffer.reset();
m_newDepthBuffer.reset(new yg::gl::RenderBuffer(texW, texH, true));
m_newActualTarget = m_resourceManager->createRenderTarget(texW, texH);
m_newBackBuffer = m_resourceManager->createRenderTarget(texW, texH);
@ -563,7 +564,9 @@ void RenderQueueRoutine::addCommand(render_fn_t const & fn, ScreenBase const & f
void RenderQueueRoutine::initializeGL(shared_ptr<yg::gl::RenderContext> const & renderContext,
shared_ptr<yg::ResourceManager> const & resourceManager)
{
m_frameBuffer.reset();
m_frameBuffer.reset(new yg::gl::FrameBuffer());
m_auxFrameBuffer.reset();
m_auxFrameBuffer.reset(new yg::gl::FrameBuffer());
m_renderContext = renderContext;
m_resourceManager = resourceManager;

View file

@ -28,7 +28,10 @@ namespace yg
m_updateInterval(params.m_updateInterval)
{
if ((m_doPeriodicalUpdate) && (!m_auxFrameBuffer))
{
m_auxFrameBuffer.reset();
m_auxFrameBuffer.reset(new FrameBuffer());
}
}
shared_ptr<RenderState> const & RenderStateUpdater::renderState() const