From 24556fcdb07cf520049bc135584e7a3f83427964 Mon Sep 17 00:00:00 2001 From: "r.kuznetsov" Date: Tue, 30 Jun 2015 17:08:34 +0300 Subject: [PATCH] Fixed text rendering under POI --- drape/shaders/shader_index.txt | 2 +- drape_frontend/apply_feature_functors.cpp | 15 +++++++++++++++ drape_frontend/poi_symbol_shape.cpp | 2 +- drape_frontend/shape_view_params.hpp | 2 ++ drape_frontend/text_shape.cpp | 4 ++-- drape_head/testing_engine.cpp | 4 ++++ 6 files changed, 25 insertions(+), 4 deletions(-) diff --git a/drape/shaders/shader_index.txt b/drape/shaders/shader_index.txt index d4986ad751..c1ce4fbdc7 100644 --- a/drape/shaders/shader_index.txt +++ b/drape/shaders/shader_index.txt @@ -1,7 +1,7 @@ LINE_PROGRAM line_vertex_shader.vsh line_fragment_shader.fsh +TEXT_PROGRAM text_vertex_shader.vsh text_fragment_shader.fsh TEXTURING_PROGRAM texturing_vertex_shader.vsh texturing_fragment_shader.fsh DASHED_LINE_PROGRAM dashed_vertex_shader.vsh dashed_fragment_shader.fsh -TEXT_PROGRAM text_vertex_shader.vsh text_fragment_shader.fsh COMPASS_PROGRAM compass_vertex_shader.vsh texturing_fragment_shader.fsh RULER_PROGRAM ruler_vertex_shader.vsh texturing_fragment_shader.fsh ACCURACY_PROGRAM position_accuracy_shader.vsh texturing_fragment_shader.fsh diff --git a/drape_frontend/apply_feature_functors.cpp b/drape_frontend/apply_feature_functors.cpp index 365368c0ee..69f9c00dcc 100644 --- a/drape_frontend/apply_feature_functors.cpp +++ b/drape_frontend/apply_feature_functors.cpp @@ -172,6 +172,17 @@ dp::Anchor GetAnchor(CaptionDefProto const * capRule) return dp::Center; } +m2::PointF GetOffset(CaptionDefProto const * capRule) +{ + m2::PointF result(0, 0); + if (capRule != nullptr && capRule->has_offset_x()) + result.x = capRule->offset_x(); + if (capRule != nullptr && capRule->has_offset_y()) + result.y = capRule->offset_y(); + + return result; +} + } // namespace BaseApplyFeature::BaseApplyFeature(ref_ptr context, FeatureID const & id, @@ -195,6 +206,8 @@ void BaseApplyFeature::ExtractCaptionParams(CaptionDefProto const * primaryProto params.m_featureID = m_id; params.m_primaryText = m_captions.GetMainText(); params.m_primaryTextFont = decl; + params.m_primaryOffset = GetOffset(primaryProto); + params.m_secondaryOffset = GetOffset(secondaryProto); if (secondaryProto) { @@ -450,6 +463,8 @@ void ApplyLineFeature::Finish() viewParams.m_featureID = FeatureID(); viewParams.m_primaryText = roadNumber; viewParams.m_primaryTextFont = dp::FontDecl(dp::Color::RoadNumberOutline(), textHeight, dp::Color::White()); + viewParams.m_primaryOffset = m2::PointF(0, 0); + viewParams.m_secondaryOffset = m2::PointF(0, 0); m2::Spline::iterator it = m_spline.CreateIterator(); while (!it.BeginAgain()) diff --git a/drape_frontend/poi_symbol_shape.cpp b/drape_frontend/poi_symbol_shape.cpp index f07281cf5c..0e815778f8 100644 --- a/drape_frontend/poi_symbol_shape.cpp +++ b/drape_frontend/poi_symbol_shape.cpp @@ -51,7 +51,7 @@ void PoiSymbolShape::Draw(ref_ptr batcher, ref_ptr handle = make_unique_dp(m_params.m_id, - dp::Center, + dp::Bottom, m_pt, pixelSize, m_params.m_depth); diff --git a/drape_frontend/shape_view_params.hpp b/drape_frontend/shape_view_params.hpp index fbd19e81bf..0fe06faef8 100644 --- a/drape_frontend/shape_view_params.hpp +++ b/drape_frontend/shape_view_params.hpp @@ -57,6 +57,8 @@ struct TextViewParams : CommonViewParams dp::FontDecl m_secondaryTextFont; string m_secondaryText; dp::Anchor m_anchor; + m2::PointF m_primaryOffset; + m2::PointF m_secondaryOffset; }; struct PathTextViewParams : CommonViewParams diff --git a/drape_frontend/text_shape.cpp b/drape_frontend/text_shape.cpp index 2fb0f8e79c..0382b85ca3 100644 --- a/drape_frontend/text_shape.cpp +++ b/drape_frontend/text_shape.cpp @@ -86,14 +86,14 @@ void TextShape::Draw(ref_ptr batcher, ref_ptr t ASSERT(!m_params.m_primaryText.empty(), ()); StraightTextLayout primaryLayout(strings::MakeUniString(m_params.m_primaryText), m_params.m_primaryTextFont.m_size, textures, m_params.m_anchor); - glsl::vec2 primaryOffset(0.0, 0.0); + glsl::vec2 primaryOffset = glsl::ToVec2(m_params.m_primaryOffset); if (!m_params.m_secondaryText.empty()) { StraightTextLayout secondaryLayout(strings::MakeUniString(m_params.m_secondaryText), m_params.m_secondaryTextFont.m_size, textures, m_params.m_anchor); - glsl::vec2 secondaryOffset = primaryOffset; + glsl::vec2 secondaryOffset = primaryOffset + glsl::ToVec2(m_params.m_secondaryOffset); if (m_params.m_anchor & dp::Top) secondaryOffset += glsl::vec2(0.0, primaryLayout.GetPixelSize().y); diff --git a/drape_head/testing_engine.cpp b/drape_head/testing_engine.cpp index 12e140cf2b..6563ce4237 100644 --- a/drape_head/testing_engine.cpp +++ b/drape_head/testing_engine.cpp @@ -394,6 +394,8 @@ void TestingEngine::Draw() TScene::iterator it = m_scene.begin(); for(; it != m_scene.end(); ++it) { + m_textures->UpdateDynamicTextures(); + dp::GLState const & state = it->first; ref_ptr prg = m_programManager->GetProgram(state.GetProgramIndex()); prg->Bind(); @@ -456,6 +458,8 @@ void TestingEngine::DrawImpl() params.m_primaryTextFont = fd; params.m_secondaryTextFont = auxFd; params.m_secondaryText = "Народная Китайская республика"; + params.m_primaryOffset = m2::PointF(0, 0); + params.m_secondaryOffset = m2::PointF(0, 0); TextShape sh1(m2::PointF(82.277071f, 46.9271164f), params); sh1.Draw(make_ref(m_batcher), make_ref(m_textures));