diff --git a/graphics/geometry_batcher.cpp b/graphics/geometry_batcher.cpp index ff01f5ed32..303039ece5 100644 --- a/graphics/geometry_batcher.cpp +++ b/graphics/geometry_batcher.cpp @@ -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; diff --git a/map/drawer.cpp b/map/drawer.cpp index ff602c6fea..923152e57d 100644 --- a/map/drawer.cpp +++ b/map/drawer.cpp @@ -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 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; }