we need to stay on the same pipeline after flush dynamic page

This commit is contained in:
ExMix 2013-05-15 16:16:04 +03:00 committed by Alex Zolotarev
parent 1a5be1754b
commit 17dd464dff
2 changed files with 37 additions and 28 deletions

View file

@ -736,8 +736,10 @@ namespace graphics
void GeometryBatcher::flushDynamicPage()
{
int currentDynamicPage = m_dynamicPage;
callClearPageFns(m_dynamicPage);
changeDynamicPage();
if (currentDynamicPage != m_dynamicPage)
changeDynamicPage();
}
int GeometryBatcher::nextDynamicPage() const
@ -841,39 +843,47 @@ namespace graphics
ids[i] = staticCache->findInfo(*infos[i]);
if (ids[i] == invalidPageHandle())
if (ids[i] != invalidPageHandle())
{
ids[i] = staticCache->findInfo(infos[i]->cacheKey());
if (ids[i] == invalidPageHandle())
{
ids[i] = dynamicCache->findInfo(*infos[i]);
if (ids[i] == invalidPageHandle())
{
if (dynamicCache->hasRoom(*infos[i]))
ids[i] = packID(m_dynamicPage, dynamicCache->mapInfo(*infos[i]));
else
{
packed = false;
break;
}
}
else
ids[i] = packID(m_dynamicPage, ids[i]);
}
else
{
ids[i] = staticCache->addParentInfo(*infos[i]);
ids[i] = packID(m_startStaticPage, ids[i]);
}
ids[i] = packID(m_startStaticPage, ids[i]);
continue;
}
ids[i] = staticCache->findInfo(infos[i]->cacheKey());
if (ids[i] != invalidPageHandle())
{
ids[i] = staticCache->addParentInfo(*infos[i]);
ids[i] = packID(m_startStaticPage, ids[i]);
continue;
}
ids[i] = dynamicCache->findInfo(*infos[i]);
if (ids[i] != invalidPageHandle())
{
ids[i] = packID(m_dynamicPage, ids[i]);
}
else
ids[i] = packID(m_startStaticPage, ids[i]);
{
if (dynamicCache->hasRoom(*infos[i]))
ids[i] = packID(m_dynamicPage, dynamicCache->mapInfo(*infos[i]));
else
{
packed = false;
break;
}
}
}
if (packed)
return packed;
return true;
else
{
#ifdef DEBUG
int lastPage = m_dynamicPage;
#endif
flushDynamicPage();
ASSERT(lastPage == m_dynamicPage, ());
}
}
return false;

View file

@ -164,11 +164,10 @@ void Drawer::drawPath(di::PathInfo const & path, di::DrawRule const * rules, siz
}
else
{
LOG(LERROR, ("couldn't successfully pack a sequence of path styles as a whole"));
buffer_vector<m2::PointU, 8> rects;
for (unsigned i = 0; i < count; ++i)
rects.push_back(infos[i]->resourceSize());
LOG(LERROR, (rects));
LOG(LERROR, ("couldn't successfully pack a sequence of path styles as a whole :" , rects));
return;
}