diff options
author | Roman Sorokin <sorok-roma@yandex.ru> | 2014-09-15 14:00:53 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 02:27:21 +0300 |
commit | 159c7b4b203ed0edc73aa7ce90adc97c016d8da2 (patch) | |
tree | 781af9145555ac87fdbbf38fa2b2bb337424792f /drape_frontend/area_shape.cpp | |
parent | 72391142132d2316edbe34fef8f0065134ca0530 (diff) |
Correct attribute loading for new shaders
Diffstat (limited to 'drape_frontend/area_shape.cpp')
-rw-r--r-- | drape_frontend/area_shape.cpp | 35 |
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)); } |