Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'drape/texture_manager.cpp')
-rw-r--r--drape/texture_manager.cpp49
1 files changed, 41 insertions, 8 deletions
diff --git a/drape/texture_manager.cpp b/drape/texture_manager.cpp
index 531e1215fc..30920845a7 100644
--- a/drape/texture_manager.cpp
+++ b/drape/texture_manager.cpp
@@ -37,6 +37,10 @@ size_t const kReservedColors = 20;
float const kGlyphAreaMultiplier = 1.2f;
float const kGlyphAreaCoverage = 0.9f;
+std::string const kDefaultSymbolsTexture = "symbols";
+std::string const kSymbolTextures[] = { kDefaultSymbolsTexture, "symbols-ad" };
+uint32_t const kDefaultSymbolsIndex = 0;
+
namespace
{
@@ -145,7 +149,9 @@ void TextureManager::BaseRegion::SetTexture(ref_ptr<Texture> texture)
m2::PointF TextureManager::BaseRegion::GetPixelSize() const
{
- ASSERT(IsValid(), ());
+ if (!IsValid())
+ return m2::PointF(0.0f, 0.0f);
+
m2::RectF const & texRect = m_info->GetTexRect();
return m2::PointF(texRect.SizeX() * m_texture->GetWidth(),
texRect.SizeY() * m_texture->GetHeight());
@@ -153,11 +159,20 @@ m2::PointF TextureManager::BaseRegion::GetPixelSize() const
float TextureManager::BaseRegion::GetPixelHeight() const
{
+ if (!IsValid())
+ return 0.0f;
+
return m_info->GetTexRect().SizeY() * m_texture->GetHeight();
}
m2::RectF const & TextureManager::BaseRegion::GetTexRect() const
{
+ if (!IsValid())
+ {
+ static m2::RectF nilRect(0.0f, 0.0f, 0.0f, 0.0f);
+ return nilRect;
+ }
+
return m_info->GetTexRect();
}
@@ -207,7 +222,7 @@ void TextureManager::Release()
m_glyphGroups.clear();
m_hybridGlyphGroups.clear();
- m_symbolTexture.reset();
+ m_symbolTextures.clear();
m_stipplePenTexture.reset();
m_colorTexture.reset();
@@ -380,7 +395,11 @@ void TextureManager::Init(Params const & params)
GLFunctions::glPixelStore(gl_const::GLUnpackAlignment, 1);
- m_symbolTexture = make_unique_dp<SymbolsTexture>(params.m_resPostfix, make_ref(m_textureAllocator));
+ for (size_t i = 0; i < ARRAY_SIZE(kSymbolTextures); ++i)
+ {
+ m_symbolTextures.push_back(make_unique_dp<SymbolsTexture>(params.m_resPostfix, kSymbolTextures[i],
+ make_ref(m_textureAllocator)));
+ }
m_trafficArrowTexture = make_unique_dp<StaticTexture>("traffic-arrow", params.m_resPostfix,
make_ref(m_textureAllocator));
@@ -454,9 +473,12 @@ void TextureManager::Init(Params const & params)
void TextureManager::Invalidate(string const & resPostfix)
{
- ASSERT(m_symbolTexture != nullptr, ());
- ref_ptr<SymbolsTexture> symbolsTexture = make_ref(m_symbolTexture);
- symbolsTexture->Invalidate(resPostfix, make_ref(m_textureAllocator));
+ for (size_t i = 0; i < m_symbolTextures.size(); ++i)
+ {
+ ASSERT(m_symbolTextures[i] != nullptr, ());
+ ref_ptr<SymbolsTexture> symbolsTexture = make_ref(m_symbolTextures[i]);
+ symbolsTexture->Invalidate(resPostfix, make_ref(m_textureAllocator));
+ }
ASSERT(m_trafficArrowTexture != nullptr, ());
ref_ptr<StaticTexture> staticTexture = make_ref(m_trafficArrowTexture);
@@ -465,7 +487,17 @@ void TextureManager::Invalidate(string const & resPostfix)
void TextureManager::GetSymbolRegion(string const & symbolName, SymbolRegion & region)
{
- GetRegionBase(make_ref(m_symbolTexture), region, SymbolsTexture::SymbolKey(symbolName));
+ for (size_t i = 0; i < m_symbolTextures.size(); ++i)
+ {
+ ASSERT(m_symbolTextures[i] != nullptr, ());
+ ref_ptr<SymbolsTexture> symbolsTexture = make_ref(m_symbolTextures[i]);
+ if (symbolsTexture->IsSymbolContained(symbolName))
+ {
+ GetRegionBase(symbolsTexture, region, SymbolsTexture::SymbolKey(symbolName));
+ return;
+ }
+ }
+ LOG(LWARNING, ("Detected using of unknown symbol ", symbolName));
}
void TextureManager::GetStippleRegion(TStipplePattern const & pen, StippleRegion & region)
@@ -515,7 +547,8 @@ bool TextureManager::AreGlyphsReady(strings::UniString const & str, int fixedHei
ref_ptr<Texture> TextureManager::GetSymbolsTexture() const
{
- return make_ref(m_symbolTexture);
+ ASSERT(!m_symbolTextures.empty(), ());
+ return make_ref(m_symbolTextures[kDefaultSymbolsIndex]);
}
ref_ptr<Texture> TextureManager::GetTrafficArrowTexture() const