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_frontend/area_shape.cpp')
-rw-r--r--drape_frontend/area_shape.cpp35
1 files changed, 32 insertions, 3 deletions
diff --git a/drape_frontend/area_shape.cpp b/drape_frontend/area_shape.cpp
index 1c44bace34..35a750659c 100644
--- a/drape_frontend/area_shape.cpp
+++ b/drape_frontend/area_shape.cpp
@@ -1,13 +1,20 @@
#include "area_shape.hpp"
+#include "common_structures.hpp"
#include "../drape/shader_def.hpp"
#include "../drape/attribute_provider.hpp"
+#include "../drape/texture_of_colors.hpp"
+#include "../drape/texture_set_holder.hpp"
#include "../std/bind.hpp"
namespace df
{
+using glsl_types::vec2;
+using glsl_types::vec3;
+using glsl_types::vec4;
+
AreaShape::AreaShape(vector<m2::PointF> const & triangleList, AreaViewParams const & params)
: m_params(params)
{
@@ -24,12 +31,23 @@ AreaShape::AreaShape(vector<m2::PointF> const & triangleList, AreaViewParams con
bind(fn, &m_vertexes, bind(&Point3D::From2D, _1, params.m_depth)));
}
-void AreaShape::Draw(dp::RefPointer<dp::Batcher> batcher, dp::RefPointer<dp::TextureSetHolder> /*textures*/) const
+void AreaShape::Draw(dp::RefPointer<dp::Batcher> batcher, dp::RefPointer<dp::TextureSetHolder> textures) const
{
dp::GLState state(gpu::SOLID_AREA_PROGRAM, dp::GLState::GeometryLayer);
- state.SetColor(m_params.m_color);
- dp::AttributeProvider provider(1, m_vertexes.size());
+ dp::ColorKey key;
+ key.m_color = m_params.m_color.GetColorInInt();
+ dp::TextureSetHolder::ColorRegion region;
+ textures->GetColorRegion(key, region);
+ m2::RectF const & rect1 = region.GetTexRect();
+ m2::PointF coord1 = (rect1.RightTop() + rect1.LeftBottom()) * 0.5f;
+ float texIndex = static_cast<float>(region.GetTextureNode().m_textureOffset);
+
+ vector<vec3> colors(m_vertexes.size(), vec3(coord1, texIndex));
+
+ state.SetTextureSet(region.GetTextureNode().m_textureSet);
+
+ dp::AttributeProvider provider(2, m_vertexes.size());
{
dp::BindingInfo info(1);
dp::BindingDecl & decl = info.GetBindingDecl(0);
@@ -41,6 +59,17 @@ void AreaShape::Draw(dp::RefPointer<dp::Batcher> batcher, dp::RefPointer<dp::Tex
provider.InitStream(0, info, dp::MakeStackRefPointer((void *)&m_vertexes[0]));
}
+ {
+ dp::BindingInfo info(1);
+ dp::BindingDecl & decl = info.GetBindingDecl(0);
+ decl.m_attributeName = "a_color_index";
+ decl.m_componentCount = 3;
+ decl.m_componentType = gl_const::GLFloatType;
+ decl.m_offset = 0;
+ decl.m_stride = 0;
+ provider.InitStream(1, info, dp::MakeStackRefPointer((void *)&colors[0]));
+ }
+
batcher->InsertTriangleList(state, dp::MakeStackRefPointer(&provider));
}