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:
-rw-r--r--drape/CMakeLists.txt3
-rw-r--r--drape/debug_rect_renderer.cpp15
-rw-r--r--drape/debug_rect_renderer.hpp8
-rw-r--r--drape/drape_tests/batcher_tests.cpp1
-rw-r--r--drape/drape_tests/uniform_value_tests.cpp2
-rw-r--r--drape/glsl_func.hpp7
-rw-r--r--drape/glstate.cpp38
-rw-r--r--drape/glstate.hpp49
-rw-r--r--drape/gpu_program.cpp24
-rw-r--r--drape/gpu_program.hpp5
-rw-r--r--drape/gpu_program_info.hpp32
-rw-r--r--drape/gpu_program_manager.cpp75
-rw-r--r--drape/gpu_program_manager.hpp38
-rw-r--r--drape_frontend/CMakeLists.txt86
-rw-r--r--drape_frontend/area_shape.cpp30
-rw-r--r--drape_frontend/area_shape.hpp14
-rw-r--r--drape_frontend/arrow3d.cpp16
-rw-r--r--drape_frontend/arrow3d.hpp26
-rw-r--r--drape_frontend/circles_pack_shape.cpp7
-rw-r--r--drape_frontend/circles_pack_shape.hpp5
-rw-r--r--drape_frontend/colored_symbol_shape.cpp7
-rw-r--r--drape_frontend/drape_api_renderer.cpp31
-rw-r--r--drape_frontend/drape_api_renderer.hpp19
-rw-r--r--drape_frontend/drape_frontend_tests/CMakeLists.txt24
-rw-r--r--drape_frontend/drape_frontend_tests/compile_shaders_test.cpp476
-rwxr-xr-xdrape_frontend/frontend_renderer.cpp30
-rwxr-xr-xdrape_frontend/frontend_renderer.hpp5
-rw-r--r--drape_frontend/gps_track_renderer.cpp13
-rw-r--r--drape_frontend/gps_track_renderer.hpp7
-rw-r--r--drape_frontend/gui/choose_position_mark.cpp5
-rw-r--r--drape_frontend/gui/compass.cpp7
-rw-r--r--drape_frontend/gui/gui_text.cpp7
-rw-r--r--drape_frontend/gui/layer_render.cpp4
-rw-r--r--drape_frontend/gui/layer_render.hpp7
-rw-r--r--drape_frontend/gui/ruler.cpp5
-rw-r--r--drape_frontend/gui/shape.cpp29
-rw-r--r--drape_frontend/gui/shape.hpp13
-rw-r--r--drape_frontend/gui/watermark.cpp7
-rw-r--r--drape_frontend/line_shape.cpp22
-rw-r--r--drape_frontend/my_position.cpp70
-rw-r--r--drape_frontend/my_position.hpp36
-rw-r--r--drape_frontend/my_position_controller.cpp2
-rw-r--r--drape_frontend/my_position_controller.hpp5
-rw-r--r--drape_frontend/path_symbol_shape.cpp14
-rw-r--r--drape_frontend/path_symbol_shape.hpp4
-rw-r--r--drape_frontend/path_text_shape.cpp14
-rw-r--r--drape_frontend/poi_symbol_shape.cpp11
-rw-r--r--drape_frontend/postprocess_renderer.cpp22
-rw-r--r--drape_frontend/postprocess_renderer.hpp12
-rwxr-xr-xdrape_frontend/render_group.cpp32
-rwxr-xr-xdrape_frontend/render_group.hpp1
-rw-r--r--drape_frontend/render_node.cpp22
-rw-r--r--drape_frontend/render_node.hpp14
-rw-r--r--drape_frontend/render_state.cpp4
-rw-r--r--drape_frontend/render_state.hpp4
-rw-r--r--drape_frontend/route_renderer.cpp45
-rw-r--r--drape_frontend/route_renderer.hpp21
-rw-r--r--drape_frontend/route_shape.cpp9
-rw-r--r--drape_frontend/route_shape.hpp2
-rw-r--r--drape_frontend/screen_quad_renderer.cpp10
-rw-r--r--drape_frontend/screen_quad_renderer.hpp16
-rw-r--r--drape_frontend/selection_shape.cpp38
-rw-r--r--drape_frontend/selection_shape.hpp19
-rw-r--r--drape_frontend/text_shape.cpp11
-rw-r--r--drape_frontend/traffic_generator.cpp65
-rw-r--r--drape_frontend/traffic_generator.hpp35
-rw-r--r--drape_frontend/traffic_renderer.cpp17
-rw-r--r--drape_frontend/traffic_renderer.hpp7
-rw-r--r--drape_frontend/transit_scheme_builder.cpp13
-rw-r--r--drape_frontend/transit_scheme_renderer.cpp41
-rw-r--r--drape_frontend/transit_scheme_renderer.hpp23
-rw-r--r--drape_frontend/user_mark_shapes.cpp11
-rw-r--r--qt_tstfrm/test_main_loop.cpp20
-rw-r--r--shaders/CMakeLists.txt2
-rw-r--r--shaders/GL/shaders_lib.glsl2
-rw-r--r--shaders/gl_program_info.hpp5
-rw-r--r--shaders/gl_program_params.cpp2
-rw-r--r--shaders/gl_program_pool.cpp10
-rw-r--r--shaders/gl_program_pool.hpp4
-rw-r--r--shaders/gl_shaders_preprocessor.py25
-rw-r--r--shaders/program_manager.cpp56
-rw-r--r--shaders/program_manager.hpp33
-rw-r--r--shaders/program_params.cpp2
-rw-r--r--shaders/program_params.hpp2
-rw-r--r--shaders/program_pool.hpp4
-rw-r--r--shaders/shaders_tests/CMakeLists.txt4
-rw-r--r--shaders/shaders_tests/gl_shaders_mobile_compile_test.cpp2
-rw-r--r--tools/autobuild/shader_preprocessor.py388
-rw-r--r--xcode/drape/drape.xcodeproj/project.pbxproj12
-rw-r--r--xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj25
-rw-r--r--xcode/shaders/shaders.xcodeproj/project.pbxproj14
91 files changed, 685 insertions, 1776 deletions
diff --git a/drape/CMakeLists.txt b/drape/CMakeLists.txt
index 0f4b020db3..6de276cc24 100644
--- a/drape/CMakeLists.txt
+++ b/drape/CMakeLists.txt
@@ -63,9 +63,6 @@ set(
${DRAPE_ROOT}/gpu_buffer.hpp
${DRAPE_ROOT}/gpu_program.cpp
${DRAPE_ROOT}/gpu_program.hpp
- ${DRAPE_ROOT}/gpu_program_info.hpp
- ${DRAPE_ROOT}/gpu_program_manager.cpp
- ${DRAPE_ROOT}/gpu_program_manager.hpp
${DRAPE_ROOT}/hw_texture.cpp
${DRAPE_ROOT}/hw_texture.hpp
${DRAPE_ROOT}/index_buffer.cpp
diff --git a/drape/debug_rect_renderer.cpp b/drape/debug_rect_renderer.cpp
index 19cf8c7410..b35e578a46 100644
--- a/drape/debug_rect_renderer.cpp
+++ b/drape/debug_rect_renderer.cpp
@@ -2,7 +2,8 @@
#include "drape/glextensions_list.hpp"
#include "drape/glfunctions.hpp"
-#include "drape/gpu_program_manager.hpp"
+
+#include <array>
namespace dp
{
@@ -10,8 +11,8 @@ namespace
{
m2::PointF PixelPointToScreenSpace(ScreenBase const & screen, m2::PointF const & pt)
{
- float const szX = static_cast<float>(screen.PixelRectIn3d().SizeX());
- float const szY = static_cast<float>(screen.PixelRectIn3d().SizeY());
+ auto const szX = static_cast<float>(screen.PixelRectIn3d().SizeX());
+ auto const szY = static_cast<float>(screen.PixelRectIn3d().SizeY());
return m2::PointF(pt.x / szX - 0.5f, -pt.y / szY + 0.5f) * 2.0f;
}
} // namespace
@@ -34,7 +35,7 @@ DebugRectRenderer::~DebugRectRenderer()
ASSERT_EQUAL(m_vertexBuffer, 0, ());
}
-void DebugRectRenderer::Init(ref_ptr<dp::GpuProgramManager> mng, int programId)
+void DebugRectRenderer::Init(ref_ptr<dp::GpuProgram> program)
{
if (dp::GLExtensionsList::Instance().IsSupported(dp::GLExtensionsList::VertexArrayObject))
{
@@ -44,7 +45,7 @@ void DebugRectRenderer::Init(ref_ptr<dp::GpuProgramManager> mng, int programId)
m_vertexBuffer = GLFunctions::glGenBuffer();
GLFunctions::glBindBuffer(m_vertexBuffer, gl_const::GLArrayBuffer);
- m_program = mng->GetProgram(programId);
+ m_program = program;
int8_t attributeLocation = m_program->GetAttributeLocation("a_position");
ASSERT_NOT_EQUAL(attributeLocation, -1, ());
GLFunctions::glEnableVertexAttribute(attributeLocation);
@@ -98,7 +99,7 @@ void DebugRectRenderer::DrawRect(ScreenBase const & screen, m2::RectF const & re
if (m_VAO != 0)
GLFunctions::glBindVertexArray(m_VAO);
- array<m2::PointF, 5> vertices;
+ std::array<m2::PointF, 5> vertices;
vertices[0] = PixelPointToScreenSpace(screen, rect.LeftBottom());
vertices[1] = PixelPointToScreenSpace(screen, rect.LeftTop());
vertices[2] = PixelPointToScreenSpace(screen, rect.RightTop());
@@ -141,7 +142,7 @@ void DebugRectRenderer::DrawArrow(ScreenBase const & screen,
if (m_VAO != 0)
GLFunctions::glBindVertexArray(m_VAO);
- array<m2::PointF, 5> vertices;
+ std::array<m2::PointF, 5> vertices;
m2::PointF const dir = (data.m_arrowEnd - data.m_arrowStart).Normalize();
m2::PointF const side = m2::PointF(-dir.y, dir.x);
vertices[0] = PixelPointToScreenSpace(screen, data.m_arrowStart);
diff --git a/drape/debug_rect_renderer.hpp b/drape/debug_rect_renderer.hpp
index 31c5e7107f..4b57eb9935 100644
--- a/drape/debug_rect_renderer.hpp
+++ b/drape/debug_rect_renderer.hpp
@@ -1,6 +1,6 @@
#pragma once
-#include "drape/gpu_program_manager.hpp"
+#include "drape/gpu_program.hpp"
#include "drape/overlay_tree.hpp"
#include "drape/pointers.hpp"
@@ -13,12 +13,11 @@
namespace dp
{
-
class DebugRectRenderer
{
public:
static DebugRectRenderer & Instance();
- void Init(ref_ptr<dp::GpuProgramManager> mng, int programId);
+ void Init(ref_ptr<dp::GpuProgram> program);
void Destroy();
bool IsEnabled() const;
@@ -36,6 +35,5 @@ private:
ref_ptr<dp::GpuProgram> m_program;
bool m_isEnabled;
};
-
-} // namespace dp
+} // namespace dp
diff --git a/drape/drape_tests/batcher_tests.cpp b/drape/drape_tests/batcher_tests.cpp
index 84486d7b5a..dac7ea49b7 100644
--- a/drape/drape_tests/batcher_tests.cpp
+++ b/drape/drape_tests/batcher_tests.cpp
@@ -4,7 +4,6 @@
#include "drape/drape_tests/glmock_functions.hpp"
#include "drape/drape_tests/memory_comparer.hpp"
#include "drape/glconstants.hpp"
-#include "drape/gpu_program_manager.hpp"
#include "drape/index_storage.hpp"
#include "drape/vertex_array_buffer.hpp"
diff --git a/drape/drape_tests/uniform_value_tests.cpp b/drape/drape_tests/uniform_value_tests.cpp
index 275d1cca60..868f0eec9b 100644
--- a/drape/drape_tests/uniform_value_tests.cpp
+++ b/drape/drape_tests/uniform_value_tests.cpp
@@ -152,7 +152,7 @@ UNIT_TEST(UniformValueTest)
drape_ptr<Shader> fs = make_unique_dp<Shader>("", "void main() { gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0); }",
"", Shader::Type::FragmentShader);
- drape_ptr<GpuProgram> program = make_unique_dp<GpuProgram>("", make_ref(vs), make_ref(fs), 0);
+ drape_ptr<GpuProgram> program = make_unique_dp<GpuProgram>("", make_ref(vs), make_ref(fs));
program->Bind();
diff --git a/drape/glsl_func.hpp b/drape/glsl_func.hpp
index 0a45cb70da..b82297fbc7 100644
--- a/drape/glsl_func.hpp
+++ b/drape/glsl_func.hpp
@@ -3,13 +3,11 @@
#include <glm_config.hpp>
#include <glm/geometric.hpp>
#include <glm/gtc/matrix_transform.hpp>
-#include <glm/gtc/type_ptr.hpp>
#include <glm/gtx/rotate_vector.hpp>
namespace glsl
{
-
using glm::dot;
using glm::cross;
using glm::normalize;
@@ -20,7 +18,4 @@ using glm::translate;
using glm::rotate;
using glm::scale;
using glm::transpose;
-
-using glm::value_ptr;
-
-} // namespace glsl
+} // namespace glsl
diff --git a/drape/glstate.cpp b/drape/glstate.cpp
index 7abdf38662..b99cc4b9e3 100644
--- a/drape/glstate.cpp
+++ b/drape/glstate.cpp
@@ -29,29 +29,9 @@ void Blending::Apply() const
GLFunctions::glDisable(gl_const::GLBlending);
}
-bool Blending::operator < (Blending const & other) const
-{
- return m_isEnabled < other.m_isEnabled;
-}
+bool Blending::operator<(Blending const & other) const { return m_isEnabled < other.m_isEnabled; }
-bool Blending::operator == (Blending const & other) const
-{
- return m_isEnabled == other.m_isEnabled;
-}
-
-GLState::GLState(int gpuProgramIndex, ref_ptr<BaseRenderState> renderState)
- : m_renderState(renderState)
- , m_gpuProgramIndex(gpuProgramIndex)
- , m_gpuProgram3dIndex(gpuProgramIndex)
- , m_depthFunction(gl_const::GLLessOrEqual)
- , m_textureFilter(gl_const::GLLinear)
- , m_colorTexture(nullptr)
- , m_maskTexture(nullptr)
- , m_drawAsLine(false)
- , m_lineWidth(1)
-{
- ASSERT(m_renderState != nullptr, ());
-}
+bool Blending::operator==(Blending const & other) const { return m_isEnabled == other.m_isEnabled; }
glConst GLState::GetDepthFunction() const
{
@@ -99,10 +79,10 @@ bool GLState::operator<(GLState const & other) const
return m_renderState->Less(other.m_renderState);
if (!(m_blending == other.m_blending))
return m_blending < other.m_blending;
- if (m_gpuProgramIndex != other.m_gpuProgramIndex)
- return m_gpuProgramIndex < other.m_gpuProgramIndex;
- if (m_gpuProgram3dIndex != other.m_gpuProgram3dIndex)
- return m_gpuProgram3dIndex < other.m_gpuProgram3dIndex;
+ if (m_gpuProgram != other.m_gpuProgram)
+ return m_gpuProgram < other.m_gpuProgram;
+ if (m_gpuProgram3d != other.m_gpuProgram3d)
+ return m_gpuProgram3d < other.m_gpuProgram3d;
if (m_depthFunction != other.m_depthFunction)
return m_depthFunction < other.m_depthFunction;
if (m_colorTexture != other.m_colorTexture)
@@ -120,8 +100,8 @@ bool GLState::operator<(GLState const & other) const
bool GLState::operator==(GLState const & other) const
{
return m_renderState->Equal(other.m_renderState) &&
- m_gpuProgramIndex == other.m_gpuProgramIndex &&
- m_gpuProgram3dIndex == other.m_gpuProgram3dIndex &&
+ m_gpuProgram == other.m_gpuProgram &&
+ m_gpuProgram3d == other.m_gpuProgram3d &&
m_blending == other.m_blending &&
m_colorTexture == other.m_colorTexture &&
m_maskTexture == other.m_maskTexture &&
@@ -152,7 +132,7 @@ struct UniformApplier
uint8_t TextureState::m_usedSlots = 0;
-void TextureState::ApplyTextures(GLState state, ref_ptr<GpuProgram> program)
+void TextureState::ApplyTextures(GLState const & state, ref_ptr<GpuProgram> program)
{
m_usedSlots = 0;
diff --git a/drape/glstate.hpp b/drape/glstate.hpp
index ed84c5490e..c30433fd95 100644
--- a/drape/glstate.hpp
+++ b/drape/glstate.hpp
@@ -1,13 +1,17 @@
#pragma once
+#include "drape/glconstants.hpp"
+#include "drape/gpu_program.hpp"
#include "drape/pointers.hpp"
#include "drape/texture.hpp"
-#include "drape/gpu_program.hpp"
#include "drape/uniform_values_storage.hpp"
+#include "base/assert.hpp"
+
+#include <utility>
+
namespace dp
{
-
struct BlendingParams
{
BlendingParams();
@@ -25,8 +29,8 @@ struct Blending
void Apply() const;
- bool operator < (Blending const & other) const;
- bool operator == (Blending const & other) const;
+ bool operator<(Blending const & other) const;
+ bool operator==(Blending const & other) const;
bool m_isEnabled;
};
@@ -42,9 +46,16 @@ public:
class GLState
{
public:
- GLState(int gpuProgramIndex, ref_ptr<BaseRenderState> renderState);
+ template<typename ProgramType>
+ GLState(ProgramType gpuProgram, ref_ptr<BaseRenderState> renderState)
+ : m_renderState(std::move(renderState))
+ , m_gpuProgram(static_cast<size_t>(gpuProgram))
+ , m_gpuProgram3d(static_cast<size_t>(gpuProgram))
+ {
+ ASSERT(m_renderState != nullptr, ());
+ }
- template <typename RenderStateType>
+ template<typename RenderStateType>
ref_ptr<RenderStateType> GetRenderState() const
{
ASSERT(dynamic_cast<RenderStateType *>(m_renderState.get()) != nullptr, ());
@@ -60,10 +71,14 @@ public:
void SetBlending(Blending const & blending) { m_blending = blending; }
Blending const & GetBlending() const { return m_blending; }
- int GetProgramIndex() const { return m_gpuProgramIndex; }
+ template<typename ProgramType>
+ ProgramType GetProgram() const { return static_cast<ProgramType>(m_gpuProgram); }
+
+ template<typename ProgramType>
+ void SetProgram3d(ProgramType gpuProgram3d) { m_gpuProgram3d = static_cast<size_t>(gpuProgram3d); }
- void SetProgram3dIndex(int gpuProgram3dIndex) { m_gpuProgram3dIndex = gpuProgram3dIndex; }
- int GetProgram3dIndex() const { return m_gpuProgram3dIndex; }
+ template<typename ProgramType>
+ ProgramType GetProgram3d() const { return static_cast<ProgramType>(m_gpuProgram3d); }
glConst GetDepthFunction() const;
void SetDepthFunction(glConst functionName);
@@ -82,23 +97,23 @@ public:
private:
ref_ptr<BaseRenderState> m_renderState;
- int m_gpuProgramIndex;
- int m_gpuProgram3dIndex;
+ size_t m_gpuProgram;
+ size_t m_gpuProgram3d;
Blending m_blending;
- glConst m_depthFunction;
- glConst m_textureFilter;
+ glConst m_depthFunction = gl_const::GLLessOrEqual;
+ glConst m_textureFilter = gl_const::GLLinear;
ref_ptr<Texture> m_colorTexture;
ref_ptr<Texture> m_maskTexture;
- bool m_drawAsLine;
- int m_lineWidth;
+ bool m_drawAsLine = false;
+ int m_lineWidth = 1;
};
class TextureState
{
public:
- static void ApplyTextures(GLState state, ref_ptr<GpuProgram> program);
+ static void ApplyTextures(GLState const & state, ref_ptr<GpuProgram> program);
static uint8_t GetLastUsedSlots();
private:
@@ -107,5 +122,5 @@ private:
void ApplyUniforms(UniformValuesStorage const & uniforms, ref_ptr<GpuProgram> program);
void ApplyState(GLState const & state, ref_ptr<GpuProgram> program);
-void ApplyBlending(GLState const & sstate);
+void ApplyBlending(GLState const & state);
} // namespace dp
diff --git a/drape/gpu_program.cpp b/drape/gpu_program.cpp
index 745d028d33..0b3b949a5a 100644
--- a/drape/gpu_program.cpp
+++ b/drape/gpu_program.cpp
@@ -5,21 +5,21 @@
#include "base/logging.hpp"
+#include <set>
+
namespace dp
{
GpuProgram::GpuProgram(std::string const & programName,
- ref_ptr<Shader> vertexShader, ref_ptr<Shader> fragmentShader,
- uint8_t textureSlotsCount)
+ ref_ptr<Shader> vertexShader, ref_ptr<Shader> fragmentShader)
: m_programName(programName)
, m_vertexShader(vertexShader)
, m_fragmentShader(fragmentShader)
- , m_textureSlotsCount(textureSlotsCount)
{
m_programID = GLFunctions::glCreateProgram();
GLFunctions::glAttachShader(m_programID, m_vertexShader->GetID());
GLFunctions::glAttachShader(m_programID, m_fragmentShader->GetID());
- string errorLog;
+ std::string errorLog;
if (!GLFunctions::glLinkProgram(m_programID, errorLog))
LOG(LERROR, ("Program ", programName, " link error = ", errorLog));
@@ -96,6 +96,11 @@ GpuProgram::UniformsInfo const & GpuProgram::GetUniformsInfo() const
void GpuProgram::LoadUniformLocations()
{
+ static std::set<glConst> const kSupportedTypes = {
+ gl_const::GLFloatType, gl_const::GLFloatVec2, gl_const::GLFloatVec3, gl_const::GLFloatVec4,
+ gl_const::GLIntType, gl_const::GLIntVec2, gl_const::GLIntVec3, gl_const::GLIntVec4,
+ gl_const::GLFloatMat4, gl_const::GLSampler2D};
+
auto const uniformsCount = GLFunctions::glGetProgramiv(m_programID, gl_const::GLActiveUniforms);
for (int i = 0; i < uniformsCount; ++i)
{
@@ -103,19 +108,14 @@ void GpuProgram::LoadUniformLocations()
UniformInfo info;
std::string name;
GLFunctions::glGetActiveUniform(m_programID, static_cast<uint32_t>(i), &size, &info.m_type, name);
- if (info.m_type != gl_const::GLFloatType && info.m_type != gl_const::GLFloatVec2 &&
- info.m_type != gl_const::GLFloatVec3 && info.m_type != gl_const::GLFloatVec4 &&
- info.m_type != gl_const::GLIntType && info.m_type != gl_const::GLIntVec2 &&
- info.m_type != gl_const::GLIntVec3 && info.m_type != gl_const::GLIntVec4 &&
- info.m_type != gl_const::GLFloatMat4 && info.m_type != gl_const::GLSampler2D)
- {
- CHECK(false, ("Used uniform has unsupported type. Program =", m_programName, "Type =", info.m_type));
- }
+ CHECK(kSupportedTypes.find(info.m_type) != kSupportedTypes.cend(),
+ ("Used uniform has unsupported type. Program =", m_programName, "Type =", info.m_type));
info.m_location = GLFunctions::glGetUniformLocation(m_programID, name);
m_uniforms[name] = std::move(info);
}
m_numericUniformsCount = CalculateNumericUniformsCount();
+ m_textureSlotsCount = static_cast<uint8_t>(m_uniforms.size() - m_numericUniformsCount);
}
uint32_t GpuProgram::CalculateNumericUniformsCount() const
diff --git a/drape/gpu_program.hpp b/drape/gpu_program.hpp
index 87edd20c4d..5ae0186568 100644
--- a/drape/gpu_program.hpp
+++ b/drape/gpu_program.hpp
@@ -14,8 +14,7 @@ class GpuProgram
{
public:
GpuProgram(std::string const & programName,
- ref_ptr<Shader> vertexShader, ref_ptr<Shader> fragmentShader,
- uint8_t textureSlotsCount);
+ ref_ptr<Shader> vertexShader, ref_ptr<Shader> fragmentShader);
~GpuProgram();
std::string const & GetName() const { return m_programName; }
@@ -49,7 +48,7 @@ private:
ref_ptr<Shader> m_fragmentShader;
UniformsInfo m_uniforms;
- uint8_t const m_textureSlotsCount;
+ uint8_t m_textureSlotsCount = 0;
uint32_t m_numericUniformsCount = 0;
};
} // namespace dp
diff --git a/drape/gpu_program_info.hpp b/drape/gpu_program_info.hpp
deleted file mode 100644
index a7f3fec5aa..0000000000
--- a/drape/gpu_program_info.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-#pragma once
-
-#include <cstdint>
-#include <string>
-
-namespace gpu
-{
-struct GpuProgramInfo
-{
- GpuProgramInfo() = default;
- GpuProgramInfo(int vertexIndex, int fragmentIndex, char const * vertexSource,
- char const * fragmentSource, uint8_t textureSlotsCount)
- : m_vertexIndex(vertexIndex)
- , m_fragmentIndex(fragmentIndex)
- , m_vertexSource(vertexSource)
- , m_fragmentSource(fragmentSource)
- , m_textureSlotsCount(textureSlotsCount)
- {}
- int m_vertexIndex = -1;
- int m_fragmentIndex = -1;
- char const * m_vertexSource = nullptr;
- char const * m_fragmentSource = nullptr;
- uint8_t m_textureSlotsCount = 0;
-};
-
-class GpuProgramGetter
-{
-public:
- virtual ~GpuProgramGetter() = default;
- virtual gpu::GpuProgramInfo const & GetProgramInfo(int program) const = 0;
-};
-} // namespace gpu
diff --git a/drape/gpu_program_manager.cpp b/drape/gpu_program_manager.cpp
deleted file mode 100644
index 0ba7ac5a5e..0000000000
--- a/drape/gpu_program_manager.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-#include "drape/gpu_program_manager.hpp"
-#include "drape/glfunctions.hpp"
-#include "drape/support_manager.hpp"
-
-#include "base/logging.hpp"
-#include "base/stl_add.hpp"
-
-#include <algorithm>
-
-namespace dp
-{
-GpuProgramManager::~GpuProgramManager()
-{
- m_programs.clear();
- m_shaders.clear();
-}
-
-void GpuProgramManager::Init(drape_ptr<gpu::GpuProgramGetter> && programGetter)
-{
- m_programGetter = std::move(programGetter);
- ASSERT(m_programGetter != nullptr, ());
-
- // This feature is not supported on some Android devices (especially on Android 4.x version).
- // Since we can't predict on which devices it'll work fine, we have to turn off for all devices.
-#if !defined(OMIM_OS_ANDROID)
- if (GLFunctions::glGetInteger(gl_const::GLMaxVertexTextures) > 0)
- {
- LOG(LINFO, ("VTF enabled"));
- m_globalDefines.append("#define ENABLE_VTF\n"); // VTF == Vetrex Texture Fetch
- }
-#endif
-
- if (SupportManager::Instance().IsSamsungGoogleNexus())
- {
- m_minTextureSlotsCount = 1;
- m_globalDefines.append("#define SAMSUNG_GOOGLE_NEXUS\n");
- }
-
- if (GLFunctions::CurrentApiVersion == dp::ApiVersion::OpenGLES3)
- m_globalDefines.append("#define GLES3\n");
-}
-
-ref_ptr<GpuProgram> GpuProgramManager::GetProgram(int index)
-{
- auto it = m_programs.find(index);
- if (it != m_programs.end())
- return make_ref(it->second);
-
- auto const & programInfo = m_programGetter->GetProgramInfo(index);
- auto vertexShader = GetShader(programInfo.m_vertexIndex, programInfo.m_vertexSource,
- Shader::Type::VertexShader);
- auto fragmentShader = GetShader(programInfo.m_fragmentIndex, programInfo.m_fragmentSource,
- Shader::Type::FragmentShader);
-
- auto const textureSlotsCount = std::max(m_minTextureSlotsCount, programInfo.m_textureSlotsCount);
- drape_ptr<GpuProgram> program = make_unique_dp<GpuProgram>("", vertexShader, fragmentShader,
- textureSlotsCount);
- ref_ptr<GpuProgram> result = make_ref(program);
- m_programs.emplace(index, move(program));
-
- return result;
-}
-
-ref_ptr<Shader> GpuProgramManager::GetShader(int index, string const & source, Shader::Type t)
-{
- auto it = m_shaders.find(index);
- if (it != m_shaders.end())
- return make_ref(it->second);
-
- drape_ptr<Shader> shader = make_unique_dp<Shader>("", source, m_globalDefines, t);
- ref_ptr<Shader> result = make_ref(shader);
- m_shaders.emplace(index, move(shader));
- return result;
-}
-} // namespace dp
diff --git a/drape/gpu_program_manager.hpp b/drape/gpu_program_manager.hpp
deleted file mode 100644
index 80e2ed3188..0000000000
--- a/drape/gpu_program_manager.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#pragma once
-
-#include "drape/pointers.hpp"
-#include "drape/gpu_program.hpp"
-#include "drape/gpu_program_info.hpp"
-#include "drape/shader.hpp"
-
-#include "base/macros.hpp"
-
-#include <map>
-#include <string>
-
-namespace dp
-{
-class GpuProgramManager
-{
-public:
- GpuProgramManager() = default;
- ~GpuProgramManager();
-
- void Init(drape_ptr<gpu::GpuProgramGetter> && programGetter);
-
- ref_ptr<GpuProgram> GetProgram(int index);
-
-private:
- ref_ptr<Shader> GetShader(int index, std::string const & source, Shader::Type t);
-
- using ProgramMap = std::map<int, drape_ptr<GpuProgram>>;
- using ShaderMap = std::map<int, drape_ptr<Shader>>;
- ProgramMap m_programs;
- ShaderMap m_shaders;
- std::string m_globalDefines;
- uint8_t m_minTextureSlotsCount = 0;
- drape_ptr<gpu::GpuProgramGetter> m_programGetter;
-
- DISALLOW_COPY_AND_MOVE(GpuProgramManager);
-};
-} // namespace dp
diff --git a/drape_frontend/CMakeLists.txt b/drape_frontend/CMakeLists.txt
index e8449c1ae4..4e67eec8c3 100644
--- a/drape_frontend/CMakeLists.txt
+++ b/drape_frontend/CMakeLists.txt
@@ -1,14 +1,5 @@
project(drape_frontend)
-execute_process(
- COMMAND python ${OMIM_ROOT}/tools/autobuild/shader_preprocessor.py
- ${OMIM_ROOT}/drape_frontend/shaders
- shader_index.txt
- shaders_lib.glsl
- ${OMIM_ROOT}/drape_frontend
- shader_def
-)
-
include_directories(
.
${OMIM_ROOT}/3party/protobuf/protobuf/src
@@ -184,8 +175,6 @@ set(
screen_quad_renderer.hpp
selection_shape.cpp
selection_shape.hpp
- shader_def.cpp
- shader_def.hpp
shape_view_params.hpp
stylist.cpp
stylist.hpp
@@ -225,79 +214,4 @@ set(
omim_add_library(${PROJECT_NAME} ${SRC})
-set(
- DRAPE_SHADERS_SRC
- shaders/area.vsh.glsl
- shaders/area3d.vsh.glsl
- shaders/area3d_outline.vsh.glsl
- shaders/arrow3d.fsh.glsl
- shaders/arrow3d.vsh.glsl
- shaders/arrow3d_outline.fsh.glsl
- shaders/arrow3d_shadow.fsh.glsl
- shaders/arrow3d_shadow.vsh.glsl
- shaders/circle.fsh.glsl
- shaders/circle.vsh.glsl
- shaders/circle_point.fsh.glsl
- shaders/circle_point.vsh.glsl
- shaders/colored_symbol.fsh.glsl
- shaders/colored_symbol.vsh.glsl
- shaders/colored_symbol_billboard.vsh.glsl
- shaders/dashed_line.fsh.glsl
- shaders/dashed_line.vsh.glsl
- shaders/debug_rect.fsh.glsl
- shaders/debug_rect.vsh.glsl
- shaders/hatching_area.fsh.glsl
- shaders/hatching_area.vsh.glsl
- shaders/line.fsh.glsl
- shaders/line.vsh.glsl
- shaders/masked_texturing.fsh.glsl
- shaders/masked_texturing.vsh.glsl
- shaders/masked_texturing_billboard.vsh.glsl
- shaders/my_position.vsh.glsl
- shaders/path_symbol.vsh.glsl
- shaders/position_accuracy3d.vsh.glsl
- shaders/route.fsh.glsl
- shaders/route.vsh.glsl
- shaders/route_arrow.fsh.glsl
- shaders/route_arrow.vsh.glsl
- shaders/route_dash.fsh.glsl
- shaders/route_marker.fsh.glsl
- shaders/route_marker.vsh.glsl
- shaders/ruler.vsh.glsl
- shaders/screen_quad.vsh.glsl
- shaders/shader_index.txt
- shaders/shaders_lib.glsl
- shaders/smaa_blending_weight.fsh.glsl
- shaders/smaa_blending_weight.vsh.glsl
- shaders/smaa_edges.fsh.glsl
- shaders/smaa_edges.vsh.glsl
- shaders/smaa_final.fsh.glsl
- shaders/smaa_final.vsh.glsl
- shaders/solid_color.fsh.glsl
- shaders/text.fsh.glsl
- shaders/text.vsh.glsl
- shaders/text_billboard.vsh.glsl
- shaders/text_fixed.fsh.glsl
- shaders/text_outlined.vsh.glsl
- shaders/text_outlined_billboard.vsh.glsl
- shaders/text_outlined_gui.vsh.glsl
- shaders/texturing.fsh.glsl
- shaders/texturing.vsh.glsl
- shaders/texturing3d.fsh.glsl
- shaders/texturing_billboard.vsh.glsl
- shaders/texturing_gui.vsh.glsl
- shaders/traffic.fsh.glsl
- shaders/traffic.vsh.glsl
- shaders/traffic_line.fsh.glsl
- shaders/traffic_line.vsh.glsl
- shaders/transit_marker.fsh.glsl
- shaders/transit_marker.vsh.glsl
- shaders/transit.fsh.glsl
- shaders/transit.vsh.glsl
- shaders/user_mark.fsh.glsl
- shaders/user_mark.vsh.glsl
- shaders/user_mark_billboard.vsh.glsl
-)
-add_custom_target(df_shaders SOURCES ${DRAPE_SHADERS_SRC})
-
omim_add_test_subdirectory(drape_frontend_tests)
diff --git a/drape_frontend/area_shape.cpp b/drape_frontend/area_shape.cpp
index cf893099ae..3d368ff873 100644
--- a/drape_frontend/area_shape.cpp
+++ b/drape_frontend/area_shape.cpp
@@ -1,6 +1,7 @@
#include "drape_frontend/area_shape.hpp"
#include "drape_frontend/render_state.hpp"
-#include "drape_frontend/shader_def.hpp"
+
+#include "shaders/programs.hpp"
#include "drape/attribute_provider.hpp"
#include "drape/batcher.hpp"
@@ -12,14 +13,14 @@
#include "base/buffer_vector.hpp"
#include "base/logging.hpp"
-#include "std/algorithm.hpp"
+#include <algorithm>
namespace df
{
AreaShape::AreaShape(vector<m2::PointD> && triangleList, BuildingOutline && buildingOutline,
AreaViewParams const & params)
- : m_vertexes(move(triangleList))
- , m_buildingOutline(move(buildingOutline))
+ : m_vertexes(std::move(triangleList))
+ , m_buildingOutline(std::move(buildingOutline))
, m_params(params)
{}
@@ -54,11 +55,12 @@ void AreaShape::DrawArea(ref_ptr<dp::Batcher> batcher, m2::PointD const & colorU
vertexes.resize(m_vertexes.size());
transform(m_vertexes.begin(), m_vertexes.end(), vertexes.begin(), [&uv, this](m2::PointD const & vertex)
{
- return gpu::AreaVertex(glsl::vec3(glsl::ToVec2(ConvertToLocal(m2::PointD(vertex), m_params.m_tileCenter, kShapeCoordScalar)),
- m_params.m_depth), uv);
+ return gpu::AreaVertex(
+ glsl::vec3(glsl::ToVec2(ConvertToLocal(m2::PointD(vertex), m_params.m_tileCenter, kShapeCoordScalar)),
+ m_params.m_depth), uv);
});
- auto state = CreateGLState(gpu::AREA_PROGRAM, RenderState::GeometryLayer);
+ auto state = CreateGLState(gpu::Program::Area, RenderState::GeometryLayer);
state.SetColorTexture(texture);
dp::AttributeProvider provider(1, static_cast<uint32_t>(vertexes.size()));
@@ -70,7 +72,7 @@ void AreaShape::DrawArea(ref_ptr<dp::Batcher> batcher, m2::PointD const & colorU
{
glsl::vec2 const ouv = glsl::ToVec2(outlineUv);
- vector<gpu::AreaVertex> vertices;
+ std::vector<gpu::AreaVertex> vertices;
vertices.reserve(m_buildingOutline.m_vertices.size());
for (size_t i = 0; i < m_buildingOutline.m_vertices.size(); i++)
{
@@ -79,7 +81,7 @@ void AreaShape::DrawArea(ref_ptr<dp::Batcher> batcher, m2::PointD const & colorU
vertices.emplace_back(gpu::AreaVertex(glsl::vec3(pos, m_params.m_depth), ouv));
}
- auto outlineState = CreateGLState(gpu::AREA_OUTLINE_PROGRAM, RenderState::GeometryLayer);
+ auto outlineState = CreateGLState(gpu::Program::AreaOutline, RenderState::GeometryLayer);
outlineState.SetColorTexture(texture);
outlineState.SetDrawAsLine(true);
@@ -112,7 +114,7 @@ void AreaShape::DrawHatchingArea(ref_ptr<dp::Batcher> batcher, m2::PointD const
vertexes[i].m_maskTexCoord.y = static_cast<float>(maxV * (m_vertexes[i].y - bbox.minY()) / bbox.SizeY());
}
- auto state = CreateGLState(gpu::HATCHING_AREA_PROGRAM, RenderState::GeometryLayer);
+ auto state = CreateGLState(gpu::Program::HatchingArea, RenderState::GeometryLayer);
state.SetColorTexture(texture);
state.SetMaskTexture(hatchingTexture);
state.SetTextureFilter(gl_const::GLLinear);
@@ -130,7 +132,7 @@ void AreaShape::DrawArea3D(ref_ptr<dp::Batcher> batcher, m2::PointD const & colo
glsl::vec2 const uv = glsl::ToVec2(colorUv);
- vector<gpu::Area3dVertex> vertexes;
+ std::vector<gpu::Area3dVertex> vertexes;
vertexes.reserve(m_vertexes.size() + m_buildingOutline.m_normals.size() * 6);
for (size_t i = 0; i < m_buildingOutline.m_normals.size(); i++)
@@ -160,7 +162,7 @@ void AreaShape::DrawArea3D(ref_ptr<dp::Batcher> batcher, m2::PointD const & colo
vertexes.emplace_back(gpu::Area3dVertex(glsl::vec3(pt, -m_params.m_posZ), normal, uv));
}
- auto state = CreateGLState(gpu::AREA_3D_PROGRAM, RenderState::Geometry3dLayer);
+ auto state = CreateGLState(gpu::Program::Area3d, RenderState::Geometry3dLayer);
state.SetColorTexture(texture);
state.SetBlending(dp::Blending(false /* isEnabled */));
@@ -173,12 +175,12 @@ void AreaShape::DrawArea3D(ref_ptr<dp::Batcher> batcher, m2::PointD const & colo
{
glsl::vec2 const ouv = glsl::ToVec2(outlineUv);
- auto outlineState = CreateGLState(gpu::AREA_3D_OUTLINE_PROGRAM, RenderState::Geometry3dLayer);
+ auto outlineState = CreateGLState(gpu::Program::Area3dOutline, RenderState::Geometry3dLayer);
outlineState.SetColorTexture(texture);
outlineState.SetBlending(dp::Blending(false /* isEnabled */));
outlineState.SetDrawAsLine(true);
- vector<gpu::AreaVertex> vertices;
+ std::vector<gpu::AreaVertex> vertices;
vertices.reserve(m_buildingOutline.m_vertices.size());
for (size_t i = 0; i < m_buildingOutline.m_vertices.size(); i++)
{
diff --git a/drape_frontend/area_shape.hpp b/drape_frontend/area_shape.hpp
index a3a4233c70..c717ae9371 100644
--- a/drape_frontend/area_shape.hpp
+++ b/drape_frontend/area_shape.hpp
@@ -6,7 +6,8 @@
#include "drape/pointers.hpp"
#include "geometry/point2d.hpp"
-#include "std/vector.hpp"
+
+#include <vector>
namespace df
{
@@ -14,15 +15,15 @@ namespace df
struct BuildingOutline
{
buffer_vector<m2::PointD, kBuildingOutlineSize> m_vertices;
- vector<int> m_indices;
- vector<m2::PointD> m_normals;
+ std::vector<int> m_indices;
+ std::vector<m2::PointD> m_normals;
bool m_generateOutline = false;
};
class AreaShape : public MapShape
{
public:
- AreaShape(vector<m2::PointD> && triangleList, BuildingOutline && buildingOutline,
+ AreaShape(std::vector<m2::PointD> && triangleList, BuildingOutline && buildingOutline,
AreaViewParams const & params);
void Draw(ref_ptr<dp::Batcher> batcher, ref_ptr<dp::TextureManager> textures) const override;
@@ -35,9 +36,8 @@ private:
void DrawHatchingArea(ref_ptr<dp::Batcher> batcher, m2::PointD const & colorUv,
ref_ptr<dp::Texture> texture, ref_ptr<dp::Texture> hatchingTexture) const;
- vector<m2::PointD> m_vertexes;
+ std::vector<m2::PointD> m_vertexes;
BuildingOutline m_buildingOutline;
AreaViewParams m_params;
};
-
-} // namespace df
+} // namespace df
diff --git a/drape_frontend/arrow3d.cpp b/drape_frontend/arrow3d.cpp
index fc185aa20f..01a3da67e6 100644
--- a/drape_frontend/arrow3d.cpp
+++ b/drape_frontend/arrow3d.cpp
@@ -1,15 +1,15 @@
#include "drape_frontend/arrow3d.hpp"
#include "drape_frontend/color_constants.hpp"
-#include "drape_frontend/shader_def.hpp"
#include "drape_frontend/visual_params.hpp"
+#include "shaders/program_manager.hpp"
+
#include "drape/glconstants.hpp"
#include "drape/glextensions_list.hpp"
#include "drape/glfunctions.hpp"
#include "drape/glsl_func.hpp"
#include "drape/glsl_types.hpp"
-#include "drape/gpu_program_manager.hpp"
#include "drape/texture_manager.hpp"
#include "drape/uniform_values_storage.hpp"
@@ -20,7 +20,6 @@
namespace df
{
-
double const kArrowSize = 12.0;
double const kArrow3dScaleMin = 1.0;
double const kArrow3dScaleMax = 2.2;
@@ -36,7 +35,7 @@ df::ColorConstant const kArrow3DColor = "Arrow3D";
df::ColorConstant const kArrow3DOutlineColor = "Arrow3DOutline";
Arrow3d::Arrow3d()
- : m_state(CreateGLState(gpu::ARROW_3D_PROGRAM, RenderState::OverlayLayer))
+ : m_state(CreateGLState(gpu::Program::Arrow3d, RenderState::OverlayLayer))
{
m_vertices = {
0.0f, 0.0f, -1.0f, 1.0f, -1.2f, -1.0f, 0.0f, 1.0f, 0.0f, 2.0f, 0.0f, 1.0f,
@@ -134,7 +133,7 @@ void Arrow3d::SetPositionObsolete(bool obsolete)
m_obsoletePosition = obsolete;
}
-void Arrow3d::Render(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> mng, bool routingMode)
+void Arrow3d::Render(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng, bool routingMode)
{
if (!m_isInitialized)
{
@@ -145,7 +144,7 @@ void Arrow3d::Render(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> m
// Render shadow.
if (screen.isPerspective())
{
- ref_ptr<dp::GpuProgram> shadowProgram = mng->GetProgram(gpu::ARROW_3D_SHADOW_PROGRAM);
+ ref_ptr<dp::GpuProgram> shadowProgram = mng->GetProgram(gpu::Program::Arrow3dShadow);
RenderArrow(screen, shadowProgram, df::GetColorConstant(df::kArrow3DShadowColor), 0.05f /* dz */,
routingMode ? kOutlineScale : 1.0f /* scaleFactor */, false /* hasNormals */);
}
@@ -156,14 +155,14 @@ void Arrow3d::Render(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> m
if (routingMode)
{
dp::Color const outlineColor = df::GetColorConstant(df::kArrow3DOutlineColor);
- ref_ptr<dp::GpuProgram> outlineProgram = mng->GetProgram(gpu::ARROW_3D_OUTLINE_PROGRAM);
+ ref_ptr<dp::GpuProgram> outlineProgram = mng->GetProgram(gpu::Program::Arrow3dOutline);
RenderArrow(screen, outlineProgram,
dp::Color(outlineColor.GetRed(), outlineColor.GetGreen(), outlineColor.GetBlue(), color.GetAlpha()),
0.0f /* dz */, kOutlineScale /* scaleFactor */, false /* hasNormals */);
}
// Render arrow.
- ref_ptr<dp::GpuProgram> arrowProgram = mng->GetProgram(gpu::ARROW_3D_PROGRAM);
+ ref_ptr<dp::GpuProgram> arrowProgram = mng->GetProgram(gpu::Program::Arrow3d);
RenderArrow(screen, arrowProgram, color, 0.0f /* dz */, 1.0f /* scaleFactor */, true /* hasNormals */);
arrowProgram->Unbind();
@@ -245,5 +244,4 @@ math::Matrix<float, 4, 4> Arrow3d::CalculateTransform(ScreenBase const & screen,
return modelTransform;
}
-
} // namespace df
diff --git a/drape_frontend/arrow3d.hpp b/drape_frontend/arrow3d.hpp
index 6712b66368..5ba8f7ad6f 100644
--- a/drape_frontend/arrow3d.hpp
+++ b/drape_frontend/arrow3d.hpp
@@ -6,20 +6,23 @@
#include "geometry/rect2d.hpp"
-#include "std/vector.hpp"
+#include <vector>
namespace dp
{
class GpuProgram;
-class GpuProgramManager;
class TextureManager;
-}
+} // namespace dp
+
+namespace gpu
+{
+class ProgramManager;
+} // namespace gpu
class ScreenBase;
namespace df
{
-
class Arrow3d
{
public:
@@ -31,16 +34,15 @@ public:
void SetTexture(ref_ptr<dp::TextureManager> texMng);
void SetPositionObsolete(bool obsolete);
- void Render(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> mng,
+ void Render(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng,
bool routingMode);
private:
void Build();
- math::Matrix<float, 4, 4> CalculateTransform(ScreenBase const & screen,
- float dz, float scaleFactor) const;
+ math::Matrix<float, 4, 4> CalculateTransform(ScreenBase const & screen, float dz,
+ float scaleFactor) const;
void RenderArrow(ScreenBase const & screen, ref_ptr<dp::GpuProgram> program,
- dp::Color const & color, float dz,
- float scaleFactor, bool hasNormals);
+ dp::Color const & color, float dz, float scaleFactor, bool hasNormals);
m2::PointD m_position;
double m_azimuth = 0.0;
@@ -50,13 +52,11 @@ private:
uint32_t m_bufferId = 0;
uint32_t m_bufferNormalsId = 0;
- vector<float> m_vertices;
- vector<float> m_normals;
+ std::vector<float> m_vertices;
+ std::vector<float> m_normals;
dp::GLState m_state;
bool m_isInitialized = false;
};
-
} // namespace df
-
diff --git a/drape_frontend/circles_pack_shape.cpp b/drape_frontend/circles_pack_shape.cpp
index 1b73659e00..65c4966243 100644
--- a/drape_frontend/circles_pack_shape.cpp
+++ b/drape_frontend/circles_pack_shape.cpp
@@ -1,5 +1,6 @@
#include "drape_frontend/circles_pack_shape.hpp"
-#include "drape_frontend/shader_def.hpp"
+
+#include "shaders/programs.hpp"
#include "drape/attribute_provider.hpp"
#include "drape/batcher.hpp"
@@ -18,14 +19,14 @@ struct CirclesPackStaticVertex
using TNormal = glsl::vec3;
CirclesPackStaticVertex() = default;
- CirclesPackStaticVertex(TNormal const & normal) : m_normal(normal) {}
+ explicit CirclesPackStaticVertex(TNormal const & normal) : m_normal(normal) {}
TNormal m_normal;
};
dp::GLState GetCirclesPackState(ref_ptr<dp::TextureManager> texMng)
{
- auto state = CreateGLState(gpu::CIRCLE_POINT_PROGRAM, RenderState::OverlayLayer);
+ auto state = CreateGLState(gpu::Program::CirclePoint, RenderState::OverlayLayer);
state.SetColorTexture(texMng->GetSymbolsTexture());
return state;
}
diff --git a/drape_frontend/circles_pack_shape.hpp b/drape_frontend/circles_pack_shape.hpp
index dafdcaf877..1193e0fd29 100644
--- a/drape_frontend/circles_pack_shape.hpp
+++ b/drape_frontend/circles_pack_shape.hpp
@@ -25,7 +25,8 @@ struct CirclesPackRenderData
dp::GLState m_state;
drape_ptr<dp::RenderBucket> m_bucket;
CirclesPackRenderData()
- : m_pointsCount(0), m_state(CreateGLState(0, RenderState::OverlayLayer))
+ : m_pointsCount(0)
+ , m_state(CreateGLState(gpu::Program::CirclePoint, RenderState::OverlayLayer))
{}
};
@@ -48,7 +49,7 @@ class CirclesPackHandle : public dp::OverlayHandle
using TBase = dp::OverlayHandle;
public:
- CirclesPackHandle(size_t pointsCount);
+ explicit CirclesPackHandle(size_t pointsCount);
void GetAttributeMutation(ref_ptr<dp::AttributeBufferMutator> mutator) const override;
bool Update(ScreenBase const & screen) override;
m2::RectD GetPixelRect(ScreenBase const & screen, bool perspective) const override;
diff --git a/drape_frontend/colored_symbol_shape.cpp b/drape_frontend/colored_symbol_shape.cpp
index 10dec230ee..445c27a2f3 100644
--- a/drape_frontend/colored_symbol_shape.cpp
+++ b/drape_frontend/colored_symbol_shape.cpp
@@ -1,9 +1,10 @@
#include "drape_frontend/colored_symbol_shape.hpp"
#include "drape_frontend/render_state.hpp"
-#include "drape_frontend/shader_def.hpp"
#include "drape_frontend/visual_params.hpp"
+#include "shaders/programs.hpp"
+
#include "drape/attribute_provider.hpp"
#include "drape/batcher.hpp"
#include "drape/glsl_func.hpp"
@@ -296,8 +297,8 @@ void ColoredSymbolShape::Draw(ref_ptr<dp::Batcher> batcher,
}
handle->SetOverlayRank(m_params.m_startOverlayRank);
}
- auto state = CreateGLState(gpu::COLORED_SYMBOL_PROGRAM, m_params.m_depthLayer);
- state.SetProgram3dIndex(gpu::COLORED_SYMBOL_BILLBOARD_PROGRAM);
+ auto state = CreateGLState(gpu::Program::ColoredSymbol, m_params.m_depthLayer);
+ state.SetProgram3d(gpu::Program::ColoredSymbolBillboard);
state.SetColorTexture(colorRegion.GetTexture());
state.SetDepthFunction(gl_const::GLLess);
diff --git a/drape_frontend/drape_api_renderer.cpp b/drape_frontend/drape_api_renderer.cpp
index 1c9191b4ff..4b5c725e63 100644
--- a/drape_frontend/drape_api_renderer.cpp
+++ b/drape_frontend/drape_api_renderer.cpp
@@ -1,16 +1,18 @@
#include "drape_frontend/drape_api_renderer.hpp"
-#include "drape_frontend/shader_def.hpp"
#include "drape_frontend/shape_view_params.hpp"
#include "drape_frontend/visual_params.hpp"
+#include "shaders/programs.hpp"
+
#include "drape/overlay_handle.hpp"
#include "drape/vertex_array_buffer.hpp"
+#include <algorithm>
+
namespace df
{
-
-void DrapeApiRenderer::AddRenderProperties(ref_ptr<dp::GpuProgramManager> mng,
- vector<drape_ptr<DrapeApiRenderProperty>> && properties)
+void DrapeApiRenderer::AddRenderProperties(ref_ptr<gpu::ProgramManager> mng,
+ std::vector<drape_ptr<DrapeApiRenderProperty>> && properties)
{
if (properties.empty())
return;
@@ -22,7 +24,7 @@ void DrapeApiRenderer::AddRenderProperties(ref_ptr<dp::GpuProgramManager> mng,
{
for (auto const & bucket : m_properties[i]->m_buckets)
{
- ref_ptr<dp::GpuProgram> program = mng->GetProgram(bucket.first.GetProgramIndex());
+ auto program = mng->GetProgram(bucket.first.GetProgram<gpu::Program>());
program->Bind();
bucket.second->GetBuffer()->Build(program);
}
@@ -31,11 +33,9 @@ void DrapeApiRenderer::AddRenderProperties(ref_ptr<dp::GpuProgramManager> mng,
void DrapeApiRenderer::RemoveRenderProperty(string const & id)
{
- m_properties.erase(remove_if(m_properties.begin(), m_properties.end(),
- [&id](drape_ptr<DrapeApiRenderProperty> const & p)
- {
- return p->m_id == id;
- }), m_properties.end());
+ m_properties.erase(std::remove_if(m_properties.begin(), m_properties.end(),
+ [&id](auto const & p) { return p->m_id == id; }),
+ m_properties.end());
}
void DrapeApiRenderer::Clear()
@@ -43,7 +43,7 @@ void DrapeApiRenderer::Clear()
m_properties.clear();
}
-void DrapeApiRenderer::Render(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> mng,
+void DrapeApiRenderer::Render(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms)
{
if (m_properties.empty())
@@ -55,14 +55,14 @@ void DrapeApiRenderer::Render(ScreenBase const & screen, ref_ptr<dp::GpuProgramM
math::Matrix<float, 4, 4> const mv = screen.GetModelView(property->m_center, kShapeCoordScalar);
for (auto const & bucket : property->m_buckets)
{
- ref_ptr<dp::GpuProgram> program = mng->GetProgram(bucket.first.GetProgramIndex());
+ auto program = mng->GetProgram(bucket.first.GetProgram<gpu::Program>());
program->Bind();
dp::ApplyState(bucket.first, program);
dp::UniformValuesStorage uniforms = commonUniforms;
- uniforms.SetMatrix4x4Value("modelView", mv.m_data);
+ uniforms.SetMatrix4x4Value("u_modelView", mv.m_data);
uniforms.SetFloatValue("u_opacity", 1.0f);
- if (bucket.first.GetProgramIndex() == gpu::TEXT_OUTLINED_GUI_PROGRAM)
+ if (bucket.first.GetProgram<gpu::Program>() == gpu::Program::TextOutlinedGui)
{
uniforms.SetFloatValue("u_contrastGamma", params.m_guiContrast, params.m_guiGamma);
uniforms.SetFloatValue("u_isOutlinePass", 0.0f);
@@ -73,5 +73,4 @@ void DrapeApiRenderer::Render(ScreenBase const & screen, ref_ptr<dp::GpuProgramM
}
}
}
-
-} // namespace df
+} // namespace df
diff --git a/drape_frontend/drape_api_renderer.hpp b/drape_frontend/drape_api_renderer.hpp
index a50276877b..94c8b68fa6 100644
--- a/drape_frontend/drape_api_renderer.hpp
+++ b/drape_frontend/drape_api_renderer.hpp
@@ -2,32 +2,29 @@
#include "drape_frontend/drape_api_builder.hpp"
-#include "drape/gpu_program_manager.hpp"
+#include "shaders/program_manager.hpp"
#include "geometry/screenbase.hpp"
-#include "std/vector.hpp"
-#include "std/string.hpp"
+#include <string>
+#include <vector>
namespace df
{
-
class DrapeApiRenderer
{
public:
DrapeApiRenderer() = default;
- void AddRenderProperties(ref_ptr<dp::GpuProgramManager> mng,
- vector<drape_ptr<DrapeApiRenderProperty>> && properties);
-
+ void AddRenderProperties(ref_ptr<gpu::ProgramManager> mng,
+ std::vector<drape_ptr<DrapeApiRenderProperty>> && properties);
void RemoveRenderProperty(string const & id);
void Clear();
- void Render(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> mng,
+ void Render(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms);
private:
- vector<drape_ptr<DrapeApiRenderProperty>> m_properties;
+ std::vector<drape_ptr<DrapeApiRenderProperty>> m_properties;
};
-
-} // namespace df
+} // namespace df
diff --git a/drape_frontend/drape_frontend_tests/CMakeLists.txt b/drape_frontend/drape_frontend_tests/CMakeLists.txt
index 3ef17f6e68..833cb9b032 100644
--- a/drape_frontend/drape_frontend_tests/CMakeLists.txt
+++ b/drape_frontend/drape_frontend_tests/CMakeLists.txt
@@ -1,33 +1,9 @@
project(drape_frontend_tests)
-add_definitions(
- -DCOMPILER_TESTS
-)
-
-execute_process(
- COMMAND python ${OMIM_ROOT}/tools/autobuild/shader_preprocessor.py
- ${OMIM_ROOT}/drape_frontend/shaders
- shader_index.txt
- shaders_lib.glsl
- ${OMIM_ROOT}/drape_frontend/drape_frontend_tests
- shader_def_for_tests
-)
-
-execute_process(
- COMMAND rm -rf ${OMIM_ROOT}/data/shaders_compiler
-)
-
-execute_process(
- COMMAND cp -r ${OMIM_ROOT}/tools/shaders_compiler ${OMIM_ROOT}/data
-)
-
set(
SRC
- compile_shaders_test.cpp
navigator_test.cpp
path_text_test.cpp
- shader_def_for_tests.cpp
- shader_def_for_tests.hpp
user_event_stream_tests.cpp
)
diff --git a/drape_frontend/drape_frontend_tests/compile_shaders_test.cpp b/drape_frontend/drape_frontend_tests/compile_shaders_test.cpp
deleted file mode 100644
index 396d89ddae..0000000000
--- a/drape_frontend/drape_frontend_tests/compile_shaders_test.cpp
+++ /dev/null
@@ -1,476 +0,0 @@
-#include "testing/testing.hpp"
-
-#include "drape_frontend/drape_frontend_tests/shader_def_for_tests.hpp"
-
-#include "platform/platform.hpp"
-
-#include "coding/file_name_utils.hpp"
-
-#include <functional>
-#include <sstream>
-#include <string>
-#include <vector>
-
-#include <QTemporaryFile>
-#include <QtCore/QDebug>
-#include <QtCore/QProcess>
-#include <QtCore/QTextStream>
-
-std::string const kCompilersDir = "shaders_compiler";
-
-#if defined(OMIM_OS_MAC)
-std::string const kMaliCompilerOpenGLES2Dir = "macos/mali_compiler";
-std::string const kMaliCompilerOpenGLES3Dir = "macos/mali_compiler_es3";
-std::string const kCompilerOpenGLES2 = "macos/GLSLESCompiler_Series5.mac";
-std::string const kCompilerMaliOpenGLES2 = kMaliCompilerOpenGLES2Dir + "/malisc";
-std::string const kCompilerOpenGLES3 = "macos/GLSLESCompiler_Series6.mac";
-std::string const kCompilerMaliOpenGLES3 = kMaliCompilerOpenGLES3Dir + "/malisc";
-#elif defined(OMIM_OS_LINUX)
-std::string const kMaliCompilerOpenGLES3Dir = "linux/mali_compiler_es3";
-std::string const kCompilerMaliOpenGLES3 = kMaliCompilerOpenGLES3Dir + "/malisc";
-#endif
-
-std::string DebugPrint(QString const & s) { return s.toStdString(); }
-
-namespace
-{
-void WriteShaderToFile(QTemporaryFile & file, std::string const & shader)
-{
- QTextStream out(&file);
- out << QString::fromStdString(shader);
-}
-
-using PrepareProcessFn = std::function<void(QProcess & p)>;
-using PrepareArgumentsFn = std::function<void(QStringList & args, QString const & fileName)>;
-using SuccessChecker = std::function<bool(QString const & output)>;
-
-void RunShaderTest(dp::ApiVersion apiVersion, std::string const & shaderName,
- QString const & glslCompiler, QString const & fileName,
- PrepareProcessFn const & procPrepare, PrepareArgumentsFn const & argsPrepare,
- SuccessChecker const & successChecker, QTextStream & errorLog)
-{
- QProcess p;
- procPrepare(p);
- p.setProcessChannelMode(QProcess::MergedChannels);
- QStringList args;
- argsPrepare(args, fileName);
- p.start(glslCompiler, args, QIODevice::ReadOnly);
-
- TEST(p.waitForStarted(), ("GLSL compiler not started", glslCompiler));
- TEST(p.waitForFinished(), ("GLSL compiler not finished in time", glslCompiler));
-
- QString result = p.readAllStandardOutput();
- if (!successChecker(result))
- {
- errorLog << "\n"
- << QString(DebugPrint(apiVersion).c_str()) << ": " << QString(shaderName.c_str())
- << QString(": SHADER COMPILE ERROR:\n");
- errorLog << result.trimmed() << "\n";
- }
-}
-
-void TestShaders(dp::ApiVersion apiVersion, std::string const & defines,
- gpu::ShadersEnum const & shaders, QString const & glslCompiler,
- PrepareProcessFn const & procPrepare, PrepareArgumentsFn const & argsPrepare,
- SuccessChecker const & successChecker, QTextStream & errorLog)
-{
- for (auto const & src : shaders)
- {
- QTemporaryFile srcFile;
- TEST(srcFile.open(), ("Temporary file can't be created!"));
- std::string fullSrc;
- if (src.second.find("#version") != std::string::npos)
- {
- auto pos = src.second.find('\n');
- ASSERT_NOT_EQUAL(pos, std::string::npos, ());
- fullSrc = src.second;
- fullSrc.insert(pos + 1, defines);
- }
- else
- {
- fullSrc = defines + src.second;
- }
- WriteShaderToFile(srcFile, fullSrc);
- RunShaderTest(apiVersion, src.first, glslCompiler, srcFile.fileName(), procPrepare, argsPrepare,
- successChecker, errorLog);
- }
-}
-
-std::string GetCompilerPath(std::string const & compilerName)
-{
- Platform & platform = GetPlatform();
- std::string compilerPath =
- my::JoinFoldersToPath({platform.ResourcesDir(), kCompilersDir}, compilerName);
- if (!platform.IsFileExistsByFullPath(compilerPath))
- {
- compilerPath = my::JoinFoldersToPath({platform.WritableDir(), kCompilersDir}, compilerName);
- TEST(platform.IsFileExistsByFullPath(compilerPath), ("GLSL compiler not found"));
- }
- return compilerPath;
-}
-} // namespace
-
-#if defined(OMIM_OS_MAC)
-
-UNIT_TEST(CompileShaders_Test)
-{
- struct CompilerData
- {
- dp::ApiVersion m_apiVersion;
- std::string m_compilerPath;
- };
- std::vector<CompilerData> const compilers = {
- {dp::ApiVersion::OpenGLES2, GetCompilerPath(kCompilerOpenGLES2)},
- {dp::ApiVersion::OpenGLES3, GetCompilerPath(kCompilerOpenGLES3)},
- };
-
- auto successChecker = [](QString const & output) { return output.indexOf("Success") != -1; };
-
- for (auto const & compiler : compilers)
- {
- QString errorLog;
- QTextStream ss(&errorLog);
-
- QString compilerPath = QString::fromStdString(compiler.m_compilerPath);
- QString shaderType = "-v";
- auto argsPrepareFn = [&shaderType](QStringList & args, QString const & fileName) {
- args << fileName << fileName + ".bin" << shaderType;
- };
-
- std::string const defines = compiler.m_apiVersion == dp::ApiVersion::OpenGLES3 ? "#define GLES3\n" : "";
- TestShaders(compiler.m_apiVersion, defines, gpu::GetVertexShaders(compiler.m_apiVersion),
- compilerPath, [](QProcess const &) {}, argsPrepareFn, successChecker, ss);
- shaderType = "-f";
- TestShaders(compiler.m_apiVersion, defines, gpu::GetFragmentShaders(compiler.m_apiVersion),
- compilerPath, [](QProcess const &) {}, argsPrepareFn, successChecker, ss);
-
- TEST_EQUAL(errorLog.isEmpty(), true, ("PVR without defines :", errorLog));
-
- std::string const defines2 = defines + "#define ENABLE_VTF\n";
- errorLog.clear();
- shaderType = "-v";
- TestShaders(compiler.m_apiVersion, defines2, gpu::GetVertexShaders(compiler.m_apiVersion),
- compilerPath, [](QProcess const &) {}, argsPrepareFn, successChecker, ss);
- shaderType = "-f";
- TestShaders(compiler.m_apiVersion, defines2, gpu::GetFragmentShaders(compiler.m_apiVersion),
- compilerPath, [](QProcess const &) {}, argsPrepareFn, successChecker, ss);
-
- TEST_EQUAL(errorLog.isEmpty(), true, ("PVR with defines : ", defines2, "\n", errorLog));
-
- std::string const defines3 = defines + "#define SAMSUNG_GOOGLE_NEXUS\n";
- errorLog.clear();
- shaderType = "-v";
- TestShaders(compiler.m_apiVersion, defines3, gpu::GetVertexShaders(compiler.m_apiVersion),
- compilerPath, [](QProcess const &) {}, argsPrepareFn, successChecker, ss);
- shaderType = "-f";
- TestShaders(compiler.m_apiVersion, defines3, gpu::GetFragmentShaders(compiler.m_apiVersion),
- compilerPath, [](QProcess const &) {}, argsPrepareFn, successChecker, ss);
-
- TEST_EQUAL(errorLog.isEmpty(), true, ("PVR with defines : ", defines3, "\n", errorLog));
- }
-}
-
-#endif
-
-UNIT_TEST(MALI_CompileShaders_Test)
-{
- struct ReleaseVersion
- {
- QString m_series;
- QString m_version;
- bool m_availableForMacOS;
- };
-
- using Releases = std::vector<ReleaseVersion>;
-
- struct DriverSet
- {
- QString m_driverName;
- Releases m_releases;
- };
-
- struct CompilerData
- {
- dp::ApiVersion m_apiVersion;
- std::string m_compilerPath;
- std::string m_compilerAdditionalPath;
- std::vector<DriverSet> m_driverSets;
- };
-
-#if defined(OMIM_OS_MAC)
- std::vector<DriverSet> const driversES2old = {
- {"Mali-400_r4p0-00rel1",
- {{"Mali-200", "r0p1", true}, {"Mali-200", "r0p2", true},
- {"Mali-200", "r0p3", true}, {"Mali-200", "r0p4", true},
- {"Mali-200", "r0p5", true}, {"Mali-200", "r0p6", true},
- {"Mali-400", "r0p0", true}, {"Mali-400", "r0p1", true},
- {"Mali-400", "r1p0", true}, {"Mali-400", "r1p1", true},
- {"Mali-300", "r0p0", true}, {"Mali-450", "r0p0", true}}},
- {"Mali-T600_r4p0-00rel0",
- {{"Mali-T600", "r0p0", true}, {"Mali-T600", "r0p0_15dev0", true},
- {"Mali-T600", "r0p1", true}, {"Mali-T620", "r0p1", true},
- {"Mali-T620", "r1p0", true}, {"Mali-T670", "r1p0", true}}},
- {"Mali-T600_r4p1-00rel0",
- {{"Mali-T600", "r0p0", true}, {"Mali-T600", "r0p0_15dev0", true},
- {"Mali-T600", "r0p1", true}, {"Mali-T620", "r0p1", true},
- {"Mali-T620", "r1p0", true}, {"Mali-T620", "r1p1", true},
- {"Mali-T720", "r0p0", true}, {"Mali-T720", "r1p0", true},
- {"Mali-T760", "r0p0", true}, {"Mali-T760", "r0p1", true},
- {"Mali-T760", "r0p1_50rel0", true}, {"Mali-T760", "r0p2", true},
- {"Mali-T760", "r0p3", true}, {"Mali-T760", "r1p0", true}}}};
-#endif
-
- std::vector<DriverSet> const driversES3new = {
- {"Mali-T600_r3p0-00rel0",
- {{"Mali-T600", "r0p0", false}, {"Mali-T600", "r0p0_15dev0", false},
- {"Mali-T600", "r0p1", false},
- {"Mali-T620", "r0p0", false}, {"Mali-T620", "r0p1", false},
- {"Mali-T620", "r1p0", false}}},
- {"Mali-T600_r4p0-00rel0",
- {{"Mali-T600", "r0p0", true}, {"Mali-T600", "r0p0_15dev0", true},
- {"Mali-T600", "r0p1", true}, {"Mali-T620", "r0p1", true},
- {"Mali-T620", "r1p0", true}}},
- {"Mali-T600_r4p1-00rel0",
- {{"Mali-T600", "r0p0", true}, {"Mali-T600", "r0p0_15dev0", true},
- {"Mali-T600", "r0p1", true}, {"Mali-T620", "r0p1", true},
- {"Mali-T620", "r1p0", true}, {"Mali-T620", "r1p1", true},
- {"Mali-T720", "r0p0", true}, {"Mali-T720", "r1p0", true},
- {"Mali-T760", "r0p0", true}, {"Mali-T760", "r0p1", true},
- {"Mali-T760", "r0p1_50rel0", true}, {"Mali-T760", "r0p2", true},
- {"Mali-T760", "r0p3", true}, {"Mali-T760", "r1p0", true}}},
- {"Mali-T600_r5p0-00rel0",
- {{"Mali-T600", "r0p0", true}, {"Mali-T600", "r0p0_15dev0", true},
- {"Mali-T600", "r0p1", true}, {"Mali-T620", "r0p1", true},
- {"Mali-T620", "r1p0", true}, {"Mali-T620", "r1p1", true},
- {"Mali-T720", "r0p0", true}, {"Mali-T720", "r1p0", true},
- {"Mali-T720", "r1p1", true},
- {"Mali-T760", "r0p0", true}, {"Mali-T760", "r0p1", true},
- {"Mali-T760", "r0p1_50rel0", true}, {"Mali-T760", "r0p2", true},
- {"Mali-T760", "r0p3", true}, {"Mali-T760", "r1p0", true}}},
- {"Mali-T600_r5p1-00rel0",
- {{"Mali-T600", "r0p0", true}, {"Mali-T600", "r0p0_15dev0", true},
- {"Mali-T600", "r0p1", true}, {"Mali-T620", "r0p1", true},
- {"Mali-T620", "r1p0", true}, {"Mali-T620", "r1p1", true},
- {"Mali-T720", "r0p0", true}, {"Mali-T720", "r1p0", true},
- {"Mali-T720", "r1p1", true},
- {"Mali-T760", "r0p0", true}, {"Mali-T760", "r0p1", true},
- {"Mali-T760", "r0p1_50rel0", true}, {"Mali-T760", "r0p2", true},
- {"Mali-T760", "r0p3", true}, {"Mali-T760", "r1p0", true},
- {"Mali-T860", "r0p2", true}, {"Mali-T880", "r0p0", true},
- {"Mali-T880", "r0p1", true}, {"Mali-T880", "r0p2", true}}},
- {"Mali-T600_r6p0-00rel0",
- {{"Mali-T600", "r0p0", true}, {"Mali-T600", "r0p0_15dev0", true},
- {"Mali-T600", "r0p1", true}, {"Mali-T620", "r0p1", true},
- {"Mali-T620", "r1p0", true}, {"Mali-T620", "r1p1", true},
- {"Mali-T720", "r0p0", true}, {"Mali-T720", "r1p0", true},
- {"Mali-T720", "r1p1", true},
- {"Mali-T760", "r0p0", true}, {"Mali-T760", "r0p1", true},
- {"Mali-T760", "r0p1_50rel0", true}, {"Mali-T760", "r0p2", true},
- {"Mali-T760", "r0p3", true}, {"Mali-T760", "r1p0", true},
- {"Mali-T820", "r0p0", true},
- {"Mali-T830", "r1p0", true}, {"Mali-T830", "r0p1", true},
- {"Mali-T860", "r0p2", true}, {"Mali-T860", "r1p0", true},
- {"Mali-T880", "r1p0", true}, {"Mali-T880", "r0p2", true},
- {"Mali-T880", "r0p1", true}}},
- {"Mali-T600_r7p0-00rel0",
- {{"Mali-T600", "r0p0", true}, {"Mali-T600", "r0p0_15dev0", true},
- {"Mali-T600", "r0p1", true},
- {"Mali-T620", "r0p1", true}, {"Mali-T620", "r1p0", true},
- {"Mali-T620", "r1p1", true},
- {"Mali-T720", "r0p0", true}, {"Mali-T720", "r1p0", true},
- {"Mali-T720", "r1p1", true},
- {"Mali-T760", "r0p0", true}, {"Mali-T760", "r0p1", true},
- {"Mali-T760", "r0p1_50rel0", true}, {"Mali-T760", "r0p2", true},
- {"Mali-T760", "r0p3", true}, {"Mali-T760", "r1p0", true},
- {"Mali-T820", "r0p0", true}, {"Mali-T820", "r0p1", true},
- {"Mali-T820", "r1p0", true},
- {"Mali-T830", "r1p0", true}, {"Mali-T830", "r0p1", true},
- {"Mali-T860", "r0p2", true}, {"Mali-T860", "r1p0", true},
- {"Mali-T860", "r2p0", true},
- {"Mali-T880", "r1p0", true}, {"Mali-T880", "r0p2", true},
- {"Mali-T880", "r0p1", true}, {"Mali-T880", "r2p0", true}}},
- {"Mali-T600_r8p0-00rel0",
- {{"Mali-T600", "r0p0", true}, {"Mali-T600", "r0p0_15dev0", true},
- {"Mali-T600", "r0p1", true},
- {"Mali-T620", "r0p1", true}, {"Mali-T620", "r1p0", true},
- {"Mali-T620", "r1p1", true},
- {"Mali-T720", "r0p0", true}, {"Mali-T720", "r1p0", true},
- {"Mali-T720", "r1p1", true},
- {"Mali-T760", "r0p0", true}, {"Mali-T760", "r0p1", true},
- {"Mali-T760", "r0p1_50rel0", true}, {"Mali-T760", "r0p2", true},
- {"Mali-T760", "r0p3", true}, {"Mali-T760", "r1p0", true},
- {"Mali-T820", "r0p0", true}, {"Mali-T820", "r0p1", true},
- {"Mali-T820", "r1p0", true},
- {"Mali-T830", "r1p0", true}, {"Mali-T830", "r0p1", true},
- {"Mali-T860", "r0p2", true}, {"Mali-T860", "r1p0", true},
- {"Mali-T860", "r2p0", true},
- {"Mali-T880", "r1p0", true}, {"Mali-T880", "r0p2", true},
- {"Mali-T880", "r0p1", true}, {"Mali-T880", "r2p0", true}}},
- {"Mali-T600_r9p0-00rel0",
- {{"Mali-T600", "r0p0", true}, {"Mali-T600", "r0p0_15dev0", true},
- {"Mali-T600", "r0p1", true},
- {"Mali-T620", "r0p1", true}, {"Mali-T620", "r1p0", true},
- {"Mali-T620", "r1p1", true},
- {"Mali-T720", "r0p0", true}, {"Mali-T720", "r1p0", true},
- {"Mali-T720", "r1p1", true},
- {"Mali-T760", "r0p0", true}, {"Mali-T760", "r0p1", true},
- {"Mali-T760", "r0p1_50rel0", true}, {"Mali-T760", "r0p2", true},
- {"Mali-T760", "r0p3", true}, {"Mali-T760", "r1p0", true},
- {"Mali-T820", "r0p0", true}, {"Mali-T820", "r0p1", true},
- {"Mali-T820", "r1p0", true},
- {"Mali-T830", "r1p0", true}, {"Mali-T830", "r0p1", true},
- {"Mali-T860", "r0p2", true}, {"Mali-T860", "r1p0", true},
- {"Mali-T860", "r2p0", true},
- {"Mali-T880", "r1p0", true}, {"Mali-T880", "r0p2", true},
- {"Mali-T880", "r0p1", true}, {"Mali-T880", "r2p0", true}}},
- {"Mali-T600_r10p0-00rel0",
- {{"Mali-T600", "r0p0", true}, {"Mali-T600", "r0p0_15dev0", true},
- {"Mali-T600", "r0p1", true},
- {"Mali-T620", "r0p1", true}, {"Mali-T620", "r1p0", true},
- {"Mali-T620", "r1p1", true},
- {"Mali-T720", "r0p0", true}, {"Mali-T720", "r1p0", true},
- {"Mali-T720", "r1p1", true},
- {"Mali-T760", "r0p0", true}, {"Mali-T760", "r0p1", true},
- {"Mali-T760", "r0p1_50rel0", true}, {"Mali-T760", "r0p2", true},
- {"Mali-T760", "r0p3", true}, {"Mali-T760", "r1p0", true},
- {"Mali-T820", "r0p0", true}, {"Mali-T820", "r0p1", true},
- {"Mali-T820", "r1p0", true},
- {"Mali-T830", "r1p0", true}, {"Mali-T830", "r0p1", true},
- {"Mali-T860", "r0p2", true}, {"Mali-T860", "r1p0", true},
- {"Mali-T860", "r2p0", true},
- {"Mali-T880", "r1p0", true}, {"Mali-T880", "r0p2", true},
- {"Mali-T880", "r0p1", true}, {"Mali-T880", "r2p0", true}}},
- {"Mali-T600_r11p0-00rel0",
- {{"Mali-T600", "r0p0", true}, {"Mali-T600", "r0p0_15dev0", true},
- {"Mali-T600", "r0p1", true},
- {"Mali-T620", "r0p1", true}, {"Mali-T620", "r1p0", true},
- {"Mali-T620", "r1p1", true},
- {"Mali-T720", "r0p0", true}, {"Mali-T720", "r1p0", true},
- {"Mali-T720", "r1p1", true},
- {"Mali-T760", "r0p0", true}, {"Mali-T760", "r0p1", true},
- {"Mali-T760", "r0p1_50rel0", true}, {"Mali-T760", "r0p2", true},
- {"Mali-T760", "r0p3", true}, {"Mali-T760", "r1p0", true},
- {"Mali-T820", "r0p0", true}, {"Mali-T820", "r0p1", true},
- {"Mali-T820", "r1p0", true},
- {"Mali-T830", "r1p0", true}, {"Mali-T830", "r0p1", true},
- {"Mali-T860", "r0p2", true}, {"Mali-T860", "r1p0", true},
- {"Mali-T860", "r2p0", true},
- {"Mali-T880", "r1p0", true}, {"Mali-T880", "r0p2", true},
- {"Mali-T880", "r0p1", true}, {"Mali-T880", "r2p0", true}}},
- {"Mali-T600_r12p0-00rel0",
- {{"Mali-T600", "r0p0", true}, {"Mali-T600", "r0p0_15dev0", true},
- {"Mali-T600", "r0p1", true},
- {"Mali-T620", "r0p1", true}, {"Mali-T620", "r1p0", true},
- {"Mali-T620", "r1p1", true},
- {"Mali-T720", "r0p0", true}, {"Mali-T720", "r1p0", true},
- {"Mali-T720", "r1p1", true},
- {"Mali-T760", "r0p0", true}, {"Mali-T760", "r0p1", true},
- {"Mali-T760", "r0p1_50rel0", true}, {"Mali-T760", "r0p2", true},
- {"Mali-T760", "r0p3", true}, {"Mali-T760", "r1p0", true},
- {"Mali-T820", "r0p0", true}, {"Mali-T820", "r0p1", true},
- {"Mali-T820", "r1p0", true},
- {"Mali-T830", "r1p0", true}, {"Mali-T830", "r0p1", true},
- {"Mali-T860", "r0p2", true}, {"Mali-T860", "r1p0", true},
- {"Mali-T860", "r2p0", true},
- {"Mali-T880", "r1p0", true}, {"Mali-T880", "r0p2", true},
- {"Mali-T880", "r0p1", true}, {"Mali-T880", "r2p0", true}}},
- {"Mali-T600_r13p0-00rel0",
- {{"Mali-T600", "r0p0", true}, {"Mali-T600", "r0p0_15dev0", true},
- {"Mali-T600", "r0p1", true},
- {"Mali-T620", "r0p1", true}, {"Mali-T620", "r1p0", true},
- {"Mali-T620", "r1p1", true},
- {"Mali-T720", "r0p0", true}, {"Mali-T720", "r1p0", true},
- {"Mali-T720", "r1p1", true},
- {"Mali-T760", "r0p0", true}, {"Mali-T760", "r0p1", true},
- {"Mali-T760", "r0p1_50rel0", true}, {"Mali-T760", "r0p2", true},
- {"Mali-T760", "r0p3", true}, {"Mali-T760", "r1p0", true},
- {"Mali-T820", "r0p0", true}, {"Mali-T820", "r0p1", true},
- {"Mali-T820", "r1p0", true},
- {"Mali-T830", "r1p0", true}, {"Mali-T830", "r0p1", true},
- {"Mali-T860", "r0p2", true}, {"Mali-T860", "r1p0", true},
- {"Mali-T860", "r2p0", true},
- {"Mali-T880", "r1p0", true}, {"Mali-T880", "r0p2", true},
- {"Mali-T880", "r0p1", true}, {"Mali-T880", "r2p0", true}}},
- {"Mali-Gxx_r3p0-00rel0",
- {{"Mali-G71", "r0p0", false}}}};
-
- std::vector<DriverSet> driversES2new = {
- {"Mali-400_r5p0-01rel0",
- {{"Mali-300", "r0p0", true},
- {"Mali-400", "r1p1", true}, {"Mali-400", "r1p0", true},
- {"Mali-400", "r0p1", true}, {"Mali-400", "r0p0", true},
- {"Mali-450", "r0p0", true}
- }},
- {"Mali-400_r6p1-00rel0",
- {{"Mali-400", "r1p1", true}, {"Mali-400", "r1p0", true},
- {"Mali-400", "r0p1", true}, {"Mali-400", "r0p0", true},
- {"Mali-450", "r0p0", true},
- {"Mali-470", "r0p1", true}
- }},
- {"Mali-400_r7p0-00rel0",
- {{"Mali-400", "r1p1", true}, {"Mali-400", "r1p0", true},
- {"Mali-400", "r0p1", true}, {"Mali-400", "r0p0", true},
- {"Mali-450", "r0p0", true},
- {"Mali-470", "r0p1", true}}}};
- driversES2new.insert(driversES2new.end(), driversES3new.begin(), driversES3new.end());
-
- std::vector<CompilerData> const compilers = {
-#if defined(OMIM_OS_MAC)
- {dp::ApiVersion::OpenGLES2,
- GetCompilerPath(kCompilerMaliOpenGLES2),
- GetCompilerPath(kMaliCompilerOpenGLES2Dir),
- driversES2old},
-#endif
- {dp::ApiVersion::OpenGLES2,
- GetCompilerPath(kCompilerMaliOpenGLES3),
- GetCompilerPath(kMaliCompilerOpenGLES3Dir),
- driversES2new},
- {dp::ApiVersion::OpenGLES3,
- GetCompilerPath(kCompilerMaliOpenGLES3),
- GetCompilerPath(kMaliCompilerOpenGLES3Dir),
- driversES3new}
- };
-
- auto successChecker = [](QString const & output) {
- return output.indexOf("Compilation succeeded.") != -1;
- };
-
- for (auto const & compiler : compilers)
- {
- for (auto const & set : compiler.m_driverSets)
- {
- for (auto const & version : set.m_releases)
- {
-#if defined(OMIM_OS_MAC)
- if (!version.m_availableForMacOS)
- continue;
-#endif
- QString errorLog;
- QTextStream ss(&errorLog);
-
- QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
- env.insert("MALICM_LOCATION", QString::fromStdString(compiler.m_compilerAdditionalPath));
- auto procPrepare = [&env](QProcess & p) { p.setProcessEnvironment(env); };
- QString shaderType = "-v";
- auto argForming = [&](QStringList & args, QString const & fileName) {
- args << shaderType
- << "-r" << version.m_version << "-c" << version.m_series << "-d" << set.m_driverName
- << fileName;
- };
- std::string const defines =
- compiler.m_apiVersion == dp::ApiVersion::OpenGLES3 ? "#define GLES3\n" : "";
- QString const compilerPath = QString::fromStdString(compiler.m_compilerPath);
- TestShaders(compiler.m_apiVersion, defines, gpu::GetVertexShaders(compiler.m_apiVersion),
- compilerPath, procPrepare, argForming, successChecker, ss);
- shaderType = "-f";
- TestShaders(compiler.m_apiVersion, defines, gpu::GetFragmentShaders(compiler.m_apiVersion),
- compilerPath, procPrepare, argForming, successChecker, ss);
- TEST(errorLog.isEmpty(),
- (shaderType, version.m_series, version.m_version, set.m_driverName, defines, errorLog));
-
- // MALI GPUs do not support ENABLE_VTF. Do not test it here.
- // SAMSUNG_GOOGLE_NEXUS doesn't use Mali GPU. Do not test it here.
- }
- }
- }
-}
diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp
index a3328709f7..8a930046a7 100755
--- a/drape_frontend/frontend_renderer.cpp
+++ b/drape_frontend/frontend_renderer.cpp
@@ -10,10 +10,11 @@
#include "drape_frontend/scenario_manager.hpp"
#include "drape_frontend/screen_operations.hpp"
#include "drape_frontend/screen_quad_renderer.hpp"
-#include "drape_frontend/shader_def.hpp"
#include "drape_frontend/user_mark_shapes.hpp"
#include "drape_frontend/visual_params.hpp"
+#include "shaders/programs.hpp"
+
#include "drape/debug_rect_renderer.hpp"
#include "drape/framebuffer.hpp"
#include "drape/support_manager.hpp"
@@ -119,7 +120,6 @@ struct RemoveTilePredicate
FrontendRenderer::FrontendRenderer(Params && params)
: BaseRenderer(ThreadsCommutator::RenderThread, params)
- , m_gpuProgramManager(new dp::GpuProgramManager())
, m_trafficRenderer(new TrafficRenderer())
, m_transitSchemeRenderer(new TransitSchemeRenderer())
, m_drapeApiRenderer(new DrapeApiRenderer())
@@ -1054,8 +1054,8 @@ void FrontendRenderer::AddToRenderGroup(dp::GLState const & state,
}
drape_ptr<TRenderGroup> group = make_unique_dp<TRenderGroup>(state, newTile);
- ref_ptr<dp::GpuProgram> program = m_gpuProgramManager->GetProgram(state.GetProgramIndex());
- ref_ptr<dp::GpuProgram> program3d = m_gpuProgramManager->GetProgram(state.GetProgram3dIndex());
+ auto program = m_gpuProgramManager->GetProgram(state.GetProgram<gpu::Program>());
+ auto program3d = m_gpuProgramManager->GetProgram(state.GetProgram3d<gpu::Program>());
group->SetRenderParams(program, program3d, make_ref(&m_generalUniforms));
group->AddBucket(std::move(renderBucket));
@@ -1420,7 +1420,7 @@ void FrontendRenderer::RenderTransitBackground()
m_texMng->GetColorRegion(df::GetColorConstant(kTransitBackgroundColor), region);
if (!m_transitBackground->IsInitialized())
{
- auto prg = m_gpuProgramManager->GetProgram(gpu::SCREEN_QUAD_PROGRAM);
+ auto prg = m_gpuProgramManager->GetProgram(gpu::Program::ScreenQuad);
m_transitBackground->SetTextureRect(region.GetTexRect(), prg);
}
m_transitBackground->RenderTexture(make_ref(m_gpuProgramManager),
@@ -1497,8 +1497,8 @@ void FrontendRenderer::BuildOverlayTree(ScreenBase const & modelView)
void FrontendRenderer::PrepareBucket(dp::GLState const & state, drape_ptr<dp::RenderBucket> & bucket)
{
- ref_ptr<dp::GpuProgram> program = m_gpuProgramManager->GetProgram(state.GetProgramIndex());
- ref_ptr<dp::GpuProgram> program3d = m_gpuProgramManager->GetProgram(state.GetProgram3dIndex());
+ auto program = m_gpuProgramManager->GetProgram(state.GetProgram<gpu::Program>());
+ auto program3d = m_gpuProgramManager->GetProgram(state.GetProgram3d<gpu::Program>());
bool const isPerspective = m_userEventStream.GetCurrentScreen().isPerspective();
if (isPerspective)
program3d->Bind();
@@ -1575,12 +1575,12 @@ void FrontendRenderer::RefreshProjection(ScreenBase const & screen)
{
std::array<float, 16> m;
dp::MakeProjection(m, 0.0f, screen.GetWidth(), screen.GetHeight(), 0.0f);
- m_generalUniforms.SetMatrix4x4Value("projection", m.data());
+ m_generalUniforms.SetMatrix4x4Value("u_projection", m.data());
}
void FrontendRenderer::RefreshZScale(ScreenBase const & screen)
{
- m_generalUniforms.SetFloatValue("zScale", static_cast<float>(screen.GetZScale()));
+ m_generalUniforms.SetFloatValue("u_zScale", static_cast<float>(screen.GetZScale()));
}
void FrontendRenderer::RefreshPivotTransform(ScreenBase const & screen)
@@ -1588,19 +1588,19 @@ void FrontendRenderer::RefreshPivotTransform(ScreenBase const & screen)
if (screen.isPerspective())
{
math::Matrix<float, 4, 4> transform(screen.Pto3dMatrix());
- m_generalUniforms.SetMatrix4x4Value("pivotTransform", transform.m_data);
+ m_generalUniforms.SetMatrix4x4Value("u_pivotTransform", transform.m_data);
}
else if (m_isIsometry)
{
math::Matrix<float, 4, 4> transform(math::Identity<float, 4>());
transform(2, 1) = -1.0f / static_cast<float>(tan(kIsometryAngle));
transform(2, 2) = 1.0f / screen.GetHeight();
- m_generalUniforms.SetMatrix4x4Value("pivotTransform", transform.m_data);
+ m_generalUniforms.SetMatrix4x4Value("u_pivotTransform", transform.m_data);
}
else
{
math::Matrix<float, 4, 4> transform(math::Identity<float, 4>());
- m_generalUniforms.SetMatrix4x4Value("pivotTransform", transform.m_data);
+ m_generalUniforms.SetMatrix4x4Value("u_pivotTransform", transform.m_data);
}
}
@@ -1951,13 +1951,13 @@ void FrontendRenderer::OnContextCreate()
dp::SupportManager::Instance().Init();
- m_gpuProgramManager = make_unique_dp<dp::GpuProgramManager>();
- m_gpuProgramManager->Init(make_unique_dp<gpu::ShaderMapper>(m_apiVersion));
+ m_gpuProgramManager = make_unique_dp<gpu::ProgramManager>();
+ m_gpuProgramManager->Init(m_apiVersion);
dp::BlendingParams blendingParams;
blendingParams.Apply();
- dp::DebugRectRenderer::Instance().Init(make_ref(m_gpuProgramManager), gpu::DEBUG_RECT_PROGRAM);
+ dp::DebugRectRenderer::Instance().Init(m_gpuProgramManager->GetProgram(gpu::Program::DebugRect));
#ifdef RENDER_DEBUG_DISPLACEMENT
dp::DebugRectRenderer::Instance().SetEnabled(true);
#endif
diff --git a/drape_frontend/frontend_renderer.hpp b/drape_frontend/frontend_renderer.hpp
index d8a08dadb2..3a9a998f63 100755
--- a/drape_frontend/frontend_renderer.hpp
+++ b/drape_frontend/frontend_renderer.hpp
@@ -22,7 +22,8 @@
#include "drape_frontend/transit_scheme_renderer.hpp"
#include "drape_frontend/user_event_stream.hpp"
-#include "drape/gpu_program_manager.hpp"
+#include "shaders/program_manager.hpp"
+
#include "drape/overlay_tree.hpp"
#include "drape/pointers.hpp"
#include "drape/uniform_values_storage.hpp"
@@ -250,7 +251,7 @@ private:
void CheckAndRunFirstLaunchAnimation();
- drape_ptr<dp::GpuProgramManager> m_gpuProgramManager;
+ drape_ptr<gpu::ProgramManager> m_gpuProgramManager;
std::array<RenderLayer, RenderState::LayersCount> m_layers;
diff --git a/drape_frontend/gps_track_renderer.cpp b/drape_frontend/gps_track_renderer.cpp
index f2f5ac8512..642d36b749 100644
--- a/drape_frontend/gps_track_renderer.cpp
+++ b/drape_frontend/gps_track_renderer.cpp
@@ -1,10 +1,11 @@
#include "drape_frontend/gps_track_renderer.hpp"
#include "drape_frontend/color_constants.hpp"
#include "drape_frontend/map_shape.hpp"
-#include "drape_frontend/shader_def.hpp"
#include "drape_frontend/shape_view_params.hpp"
#include "drape_frontend/visual_params.hpp"
+#include "shaders/programs.hpp"
+
#include "drape/glsl_func.hpp"
#include "drape/vertex_array_buffer.hpp"
@@ -78,11 +79,11 @@ GpsTrackRenderer::GpsTrackRenderer(TRenderDataRequestFn const & dataRequestFn)
m_handlesCache.reserve(8);
}
-void GpsTrackRenderer::AddRenderData(ref_ptr<dp::GpuProgramManager> mng,
+void GpsTrackRenderer::AddRenderData(ref_ptr<gpu::ProgramManager> mng,
drape_ptr<CirclesPackRenderData> && renderData)
{
drape_ptr<CirclesPackRenderData> data = std::move(renderData);
- ref_ptr<dp::GpuProgram> program = mng->GetProgram(gpu::CIRCLE_POINT_PROGRAM);
+ ref_ptr<dp::GpuProgram> program = mng->GetProgram(gpu::Program::CirclePoint);
program->Bind();
data->m_bucket->GetBuffer()->Build(program);
m_renderData.push_back(std::move(data));
@@ -190,7 +191,7 @@ dp::Color GpsTrackRenderer::GetColorBySpeed(double speed) const
}
void GpsTrackRenderer::RenderTrack(ScreenBase const & screen, int zoomLevel,
- ref_ptr<dp::GpuProgramManager> mng,
+ ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms)
{
if (zoomLevel < kMinVisibleZoomLevel)
@@ -302,9 +303,9 @@ void GpsTrackRenderer::RenderTrack(ScreenBase const & screen, int zoomLevel,
// Render points.
dp::UniformValuesStorage uniforms = commonUniforms;
math::Matrix<float, 4, 4> mv = screen.GetModelView(m_pivot, kShapeCoordScalar);
- uniforms.SetMatrix4x4Value("modelView", mv.m_data);
+ uniforms.SetMatrix4x4Value("u_modelView", mv.m_data);
uniforms.SetFloatValue("u_opacity", 1.0f);
- ref_ptr<dp::GpuProgram> program = mng->GetProgram(gpu::CIRCLE_POINT_PROGRAM);
+ ref_ptr<dp::GpuProgram> program = mng->GetProgram(gpu::Program::CirclePoint);
program->Bind();
ASSERT_GREATER(m_renderData.size(), 0, ());
diff --git a/drape_frontend/gps_track_renderer.hpp b/drape_frontend/gps_track_renderer.hpp
index e11732aaa9..80f4280925 100644
--- a/drape_frontend/gps_track_renderer.hpp
+++ b/drape_frontend/gps_track_renderer.hpp
@@ -3,7 +3,8 @@
#include "drape_frontend/circles_pack_shape.hpp"
#include "drape_frontend/gps_track_point.hpp"
-#include "drape/gpu_program_manager.hpp"
+#include "shaders/program_manager.hpp"
+
#include "drape/pointers.hpp"
#include "drape/uniform_values_storage.hpp"
@@ -22,14 +23,14 @@ public:
using TRenderDataRequestFn = std::function<void(uint32_t)>;
explicit GpsTrackRenderer(TRenderDataRequestFn const & dataRequestFn);
- void AddRenderData(ref_ptr<dp::GpuProgramManager> mng,
+ void AddRenderData(ref_ptr<gpu::ProgramManager> mng,
drape_ptr<CirclesPackRenderData> && renderData);
void UpdatePoints(std::vector<GpsTrackPoint> const & toAdd,
std::vector<uint32_t> const & toRemove);
void RenderTrack(ScreenBase const & screen, int zoomLevel,
- ref_ptr<dp::GpuProgramManager> mng,
+ ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms);
void Update();
diff --git a/drape_frontend/gui/choose_position_mark.cpp b/drape_frontend/gui/choose_position_mark.cpp
index f1cb552ac0..988b56455f 100644
--- a/drape_frontend/gui/choose_position_mark.cpp
+++ b/drape_frontend/gui/choose_position_mark.cpp
@@ -1,6 +1,7 @@
#include "drape_frontend/gui/choose_position_mark.hpp"
#include "drape_frontend/gui/drape_gui.hpp"
-#include "drape_frontend/shader_def.hpp"
+
+#include "shaders/programs.hpp"
#include "drape/utils/vertex_decl.hpp"
@@ -58,7 +59,7 @@ drape_ptr<ShapeRenderer> ChoosePositionMark::Draw(ref_ptr<dp::TextureManager> te
ChoosePositionMarkVertex(glsl::vec2(halfSize.x, -halfSize.y), glsl::ToVec2(texRect.RightBottom()))
};
- auto state = df::CreateGLState(gpu::TEXTURING_GUI_PROGRAM, df::RenderState::GuiLayer);
+ auto state = df::CreateGLState(gpu::Program::TexturingGui, df::RenderState::GuiLayer);
state.SetColorTexture(region.GetTexture());
dp::AttributeProvider provider(1 /*streamCount*/, 4 /*vertexCount*/);
diff --git a/drape_frontend/gui/compass.cpp b/drape_frontend/gui/compass.cpp
index d2ae879ea0..8a76742b3e 100644
--- a/drape_frontend/gui/compass.cpp
+++ b/drape_frontend/gui/compass.cpp
@@ -2,7 +2,8 @@
#include "drape_frontend/animation/show_hide_animation.hpp"
#include "drape_frontend/gui/drape_gui.hpp"
-#include "drape_frontend/shader_def.hpp"
+
+#include "shaders/programs.hpp"
#include "drape/glsl_func.hpp"
#include "drape/glsl_types.hpp"
@@ -73,7 +74,7 @@ public:
glsl::mat4 r = glsl::rotate(glsl::mat4(), angle, glsl::vec3(0.0, 0.0, 1.0));
glsl::mat4 m = glsl::translate(glsl::mat4(), glsl::vec3(m_pivot, 0.0));
m = glsl::transpose(m * r);
- m_uniforms.SetMatrix4x4Value("modelView", glsl::value_ptr(m));
+ m_uniforms.SetMatrix4x4Value("u_modelView", glsl::value_ptr(m));
m_uniforms.SetFloatValue("u_opacity", static_cast<float>(m_animation.GetT()));
}
@@ -106,7 +107,7 @@ drape_ptr<ShapeRenderer> Compass::Draw(m2::PointF & compassSize, ref_ptr<dp::Tex
CompassVertex(glsl::vec2(halfSize.x, -halfSize.y), glsl::ToVec2(texRect.RightBottom()))
};
- auto state = df::CreateGLState(gpu::TEXTURING_GUI_PROGRAM, df::RenderState::GuiLayer);
+ auto state = df::CreateGLState(gpu::Program::TexturingGui, df::RenderState::GuiLayer);
state.SetColorTexture(region.GetTexture());
dp::AttributeProvider provider(1, 4);
diff --git a/drape_frontend/gui/gui_text.cpp b/drape_frontend/gui/gui_text.cpp
index b0cc0f7189..aff3874d91 100644
--- a/drape_frontend/gui/gui_text.cpp
+++ b/drape_frontend/gui/gui_text.cpp
@@ -1,8 +1,9 @@
#include "drape_frontend/gui/gui_text.hpp"
-#include "drape_frontend/shader_def.hpp"
#include "drape_frontend/visual_params.hpp"
+#include "shaders/programs.hpp"
+
#include "base/string_utils.hpp"
#include "base/stl_add.hpp"
@@ -104,7 +105,7 @@ dp::BindingInfo const & StaticLabel::Vertex::GetBindingInfo()
}
StaticLabel::LabelResult::LabelResult()
- : m_state(df::CreateGLState(gpu::TEXT_OUTLINED_GUI_PROGRAM, df::RenderState::GuiLayer))
+ : m_state(df::CreateGLState(gpu::Program::TextOutlinedGui, df::RenderState::GuiLayer))
{}
char const * StaticLabel::DefaultDelim = "\n";
@@ -283,7 +284,7 @@ dp::BindingInfo const & MutableLabel::DynamicVertex::GetBindingInfo()
}
MutableLabel::PrecacheResult::PrecacheResult()
- : m_state(df::CreateGLState(gpu::TEXT_OUTLINED_GUI_PROGRAM, df::RenderState::GuiLayer))
+ : m_state(df::CreateGLState(gpu::Program::TextOutlinedGui, df::RenderState::GuiLayer))
{}
MutableLabel::MutableLabel(dp::Anchor anchor)
diff --git a/drape_frontend/gui/layer_render.cpp b/drape_frontend/gui/layer_render.cpp
index f882bd740d..25ef0bfb28 100644
--- a/drape_frontend/gui/layer_render.cpp
+++ b/drape_frontend/gui/layer_render.cpp
@@ -33,13 +33,13 @@ LayerRenderer::~LayerRenderer()
DestroyRenderers();
}
-void LayerRenderer::Build(ref_ptr<dp::GpuProgramManager> mng)
+void LayerRenderer::Build(ref_ptr<gpu::ProgramManager> mng)
{
for (auto & r : m_renderers)
r.second->Build(mng);
}
-void LayerRenderer::Render(ref_ptr<dp::GpuProgramManager> mng, bool routingActive,
+void LayerRenderer::Render(ref_ptr<gpu::ProgramManager> mng, bool routingActive,
ScreenBase const & screen)
{
if (HasWidget(gui::WIDGET_RULER))
diff --git a/drape_frontend/gui/layer_render.hpp b/drape_frontend/gui/layer_render.hpp
index 8391e9f5aa..ad0d60e0d5 100644
--- a/drape_frontend/gui/layer_render.hpp
+++ b/drape_frontend/gui/layer_render.hpp
@@ -3,7 +3,8 @@
#include "drape_frontend/gui/skin.hpp"
#include "drape_frontend/gui/shape.hpp"
-#include "drape/gpu_program_manager.hpp"
+#include "shaders/program_manager.hpp"
+
#include "drape/texture_manager.hpp"
#include "geometry/screenbase.hpp"
@@ -20,8 +21,8 @@ public:
LayerRenderer() = default;
~LayerRenderer();
- void Build(ref_ptr<dp::GpuProgramManager> mng);
- void Render(ref_ptr<dp::GpuProgramManager> mng, bool routingActive,
+ void Build(ref_ptr<gpu::ProgramManager> mng);
+ void Render(ref_ptr<gpu::ProgramManager> mng, bool routingActive,
ScreenBase const & screen);
void Merge(ref_ptr<LayerRenderer> other);
void SetLayout(gui::TWidgetsLayoutInfo const & info);
diff --git a/drape_frontend/gui/ruler.cpp b/drape_frontend/gui/ruler.cpp
index c179fb5bb2..1b4395dba1 100644
--- a/drape_frontend/gui/ruler.cpp
+++ b/drape_frontend/gui/ruler.cpp
@@ -4,7 +4,8 @@
#include "drape_frontend/gui/drape_gui.hpp"
#include "drape_frontend/gui/gui_text.hpp"
#include "drape_frontend/gui/ruler_helper.hpp"
-#include "drape_frontend/shader_def.hpp"
+
+#include "shaders/programs.hpp"
#include "drape/glsl_func.hpp"
#include "drape/glsl_types.hpp"
@@ -212,7 +213,7 @@ void Ruler::DrawRuler(m2::PointF & size, ShapeControl & control, ref_ptr<dp::Tex
data.push_back(RulerVertex(glsl::vec2(0.0, h), normals[1], texCoord));
data.push_back(RulerVertex(glsl::vec2(0.0, -h), normals[1], texCoord));
- auto state = df::CreateGLState(gpu::RULER_PROGRAM, df::RenderState::GuiLayer);
+ auto state = df::CreateGLState(gpu::Program::Ruler, df::RenderState::GuiLayer);
state.SetColorTexture(reg.GetTexture());
dp::AttributeProvider provider(1, 4);
diff --git a/drape_frontend/gui/shape.cpp b/drape_frontend/gui/shape.cpp
index de0124eff5..8675dc89c8 100644
--- a/drape_frontend/gui/shape.cpp
+++ b/drape_frontend/gui/shape.cpp
@@ -8,6 +8,7 @@
#include "base/logging.hpp"
#include <algorithm>
+#include <array>
namespace gui
{
@@ -23,7 +24,7 @@ bool Handle::Update(ScreenBase const & screen)
if (IsVisible())
{
- m_uniforms.SetMatrix4x4Value("modelView",
+ m_uniforms.SetMatrix4x4Value("u_modelView",
value_ptr(transpose(translate(mat4(), vec3(m_pivot, 0.0)))));
m_uniforms.SetFloatValue("u_opacity", 1.0);
@@ -44,7 +45,7 @@ m2::RectD Handle::GetPixelRect(ScreenBase const & screen, bool perspective) cons
{
// There is no need to check intersection of gui elements.
UNUSED_VALUE(perspective);
- return m2::RectD();
+ return {};
}
void Handle::GetPixelShape(ScreenBase const & screen, bool perspective,
@@ -80,22 +81,23 @@ ShapeRenderer::~ShapeRenderer()
ForEachShapeInfo([](ShapeControl::ShapeInfo & info) { info.Destroy(); });
}
-void ShapeRenderer::Build(ref_ptr<dp::GpuProgramManager> mng)
+void ShapeRenderer::Build(ref_ptr<gpu::ProgramManager> mng)
{
ForEachShapeInfo([mng](ShapeControl::ShapeInfo & info) mutable
{
- info.m_buffer->Build(mng->GetProgram(info.m_state.GetProgramIndex()));
+ info.m_buffer->Build(mng->GetProgram(info.m_state.GetProgram<gpu::Program>()));
});
}
-void ShapeRenderer::Render(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> mng)
+void ShapeRenderer::Render(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng)
{
- array<float, 16> m;
+ std::array<float, 16> m;
m2::RectD const & pxRect = screen.PixelRectIn3d();
- dp::MakeProjection(m, 0.0f, pxRect.SizeX(), pxRect.SizeY(), 0.0f);
+ dp::MakeProjection(m, 0.0f, static_cast<float>(pxRect.SizeX()),
+ static_cast<float>(pxRect.SizeY()), 0.0f);
dp::UniformValuesStorage uniformStorage;
- uniformStorage.SetMatrix4x4Value("projection", m.data());
+ uniformStorage.SetMatrix4x4Value("u_projection", m.data());
ForEachShapeInfo([&uniformStorage, &screen, mng](ShapeControl::ShapeInfo & info) mutable
{
@@ -105,7 +107,7 @@ void ShapeRenderer::Render(ScreenBase const & screen, ref_ptr<dp::GpuProgramMana
if (!info.m_handle->IsVisible())
return;
- ref_ptr<dp::GpuProgram> prg = mng->GetProgram(info.m_state.GetProgramIndex());
+ ref_ptr<dp::GpuProgram> prg = mng->GetProgram(info.m_state.GetProgram<gpu::Program>());
prg->Bind();
dp::ApplyState(info.m_state, prg);
dp::ApplyUniforms(info.m_handle->GetUniforms(), prg);
@@ -125,7 +127,7 @@ void ShapeRenderer::Render(ScreenBase const & screen, ref_ptr<dp::GpuProgramMana
void ShapeRenderer::AddShape(dp::GLState const & state, drape_ptr<dp::RenderBucket> && bucket)
{
- m_shapes.push_back(ShapeControl());
+ m_shapes.emplace_back(ShapeControl());
m_shapes.back().AddShape(state, std::move(bucket));
}
@@ -201,15 +203,10 @@ void ShapeControl::AddShape(dp::GLState const & state, drape_ptr<dp::RenderBucke
drape_ptr<dp::OverlayHandle> handle = bucket->PopOverlayHandle();
ASSERT(dynamic_cast<Handle *>(handle.get()) != nullptr, ());
- m_shapesInfo.push_back(ShapeInfo());
+ m_shapesInfo.emplace_back(ShapeInfo());
ShapeInfo & info = m_shapesInfo.back();
info.m_state = state;
info.m_buffer = bucket->MoveBuffer();
info.m_handle = drape_ptr<Handle>(static_cast<Handle *>(handle.release()));
}
-
-void ArrangeShapes(ref_ptr<ShapeRenderer> renderer, ShapeRenderer::TShapeControlEditFn const & fn)
-{
- renderer->ForEachShapeControl(fn);
-}
} // namespace gui
diff --git a/drape_frontend/gui/shape.hpp b/drape_frontend/gui/shape.hpp
index 74aadb9c96..ef8799fdb0 100644
--- a/drape_frontend/gui/shape.hpp
+++ b/drape_frontend/gui/shape.hpp
@@ -3,9 +3,10 @@
#include "drape_frontend/gui/skin.hpp"
#include "drape_frontend/render_state.hpp"
+#include "shaders/program_manager.hpp"
+
#include "drape/batcher.hpp"
#include "drape/glsl_types.hpp"
-#include "drape/gpu_program_manager.hpp"
#include "drape/overlay_handle.hpp"
#include "drape/texture_manager.hpp"
#include "drape/vertex_array_buffer.hpp"
@@ -64,7 +65,7 @@ struct ShapeControl
struct ShapeInfo
{
- ShapeInfo() : m_state(df::CreateGLState(0, df::RenderState::GuiLayer)) {}
+ ShapeInfo() : m_state(df::CreateGLState(gpu::Program::TexturingGui, df::RenderState::GuiLayer)) {}
ShapeInfo(dp::GLState const & state, drape_ptr<dp::VertexArrayBuffer> && buffer,
drape_ptr<Handle> && handle);
@@ -87,8 +88,8 @@ public:
~ShapeRenderer();
- void Build(ref_ptr<dp::GpuProgramManager> mng);
- void Render(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> mng);
+ void Build(ref_ptr<gpu::ProgramManager> mng);
+ void Render(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng);
void AddShape(dp::GLState const & state, drape_ptr<dp::RenderBucket> && bucket);
void AddShapeControl(ShapeControl && control);
@@ -98,7 +99,6 @@ public:
ref_ptr<Handle> FindHandle(FeatureID const & id);
private:
- friend void ArrangeShapes(ref_ptr<ShapeRenderer>, ShapeRenderer::TShapeControlEditFn const &);
void ForEachShapeControl(TShapeControlEditFn const & fn);
using TShapeInfoEditFn = std::function<void(ShapeControl::ShapeInfo &)>;
@@ -108,9 +108,6 @@ private:
std::vector<ShapeControl> m_shapes;
};
-void ArrangeShapes(ref_ptr<ShapeRenderer> renderer,
- ShapeRenderer::TShapeControlEditFn const & fn);
-
class Shape
{
public:
diff --git a/drape_frontend/gui/watermark.cpp b/drape_frontend/gui/watermark.cpp
index 1e88f4ef8f..1dd1d27cb2 100644
--- a/drape_frontend/gui/watermark.cpp
+++ b/drape_frontend/gui/watermark.cpp
@@ -1,6 +1,7 @@
#include "drape_frontend/gui/watermark.hpp"
#include "drape_frontend/gui/drape_gui.hpp"
-#include "drape_frontend/shader_def.hpp"
+
+#include "shaders/programs.hpp"
#include "drape/glsl_func.hpp"
#include "drape/utils/vertex_decl.hpp"
@@ -56,7 +57,7 @@ public:
if (IsVisible())
{
m_uniforms.SetMatrix4x4Value(
- "modelView", value_ptr(transpose(translate(mat4(), vec3(m_pivot + m_offset, 0.0)))));
+ "u_modelView", value_ptr(transpose(translate(mat4(), vec3(m_pivot + m_offset, 0.0)))));
m_uniforms.SetFloatValue("u_opacity", 1.0);
}
return true;
@@ -82,7 +83,7 @@ drape_ptr<ShapeRenderer> Watermark::Draw(m2::PointF & size, ref_ptr<dp::TextureM
WatermarkVertex(glsl::vec2(halfSize.x, -halfSize.y), glsl::ToVec2(texRect.RightBottom()))
};
- auto state = df::CreateGLState(gpu::TEXTURING_GUI_PROGRAM, df::RenderState::GuiLayer);
+ auto state = df::CreateGLState(gpu::Program::TexturingGui, df::RenderState::GuiLayer);
state.SetColorTexture(region.GetTexture());
dp::AttributeProvider provider(1 /* streamCount */, 4 /* vertexCount */);
diff --git a/drape_frontend/line_shape.cpp b/drape_frontend/line_shape.cpp
index 657ff5b3b3..b42ec47a27 100644
--- a/drape_frontend/line_shape.cpp
+++ b/drape_frontend/line_shape.cpp
@@ -1,7 +1,8 @@
#include "drape_frontend/line_shape.hpp"
#include "drape_frontend/line_shape_helper.hpp"
-#include "drape_frontend/shader_def.hpp"
+
+#include "shaders/programs.hpp"
#include "drape/attribute_provider.hpp"
#include "drape/batcher.hpp"
@@ -17,10 +18,8 @@
namespace df
{
-
namespace
{
-
class TextureCoordGenerator
{
public:
@@ -129,7 +128,7 @@ public:
float GetSide(bool isLeft) const
{
- return isLeft ? 1.0 : -1.0;
+ return isLeft ? 1.0f : -1.0f;
}
protected:
@@ -139,8 +138,6 @@ protected:
TGeometryBuffer m_geometry;
TGeometryBuffer m_joinGeom;
- vector<glsl::vec2> m_normalBuffer;
-
BaseBuilderParams m_params;
glsl::vec2 const m_colorCoord;
};
@@ -179,7 +176,7 @@ public:
dp::GLState GetState() override
{
- auto state = CreateGLState(gpu::LINE_PROGRAM, m_params.m_depthLayer);
+ auto state = CreateGLState(gpu::Program::Line, m_params.m_depthLayer);
state.SetColorTexture(m_params.m_color.GetTexture());
return state;
}
@@ -208,7 +205,7 @@ public:
if (m_params.m_cap == dp::ButtCap)
return TBase::GetCapState();
- auto state = CreateGLState(gpu::CAP_JOIN_PROGRAM, m_params.m_depthLayer);
+ auto state = CreateGLState(gpu::Program::CapJoin, m_params.m_depthLayer);
state.SetColorTexture(m_params.m_color.GetTexture());
state.SetDepthFunction(gl_const::GLLess);
return state;
@@ -279,7 +276,7 @@ public:
dp::GLState GetState() override
{
- auto state = CreateGLState(gpu::AREA_OUTLINE_PROGRAM, m_params.m_depthLayer);
+ auto state = CreateGLState(gpu::Program::AreaOutline, m_params.m_depthLayer);
state.SetColorTexture(m_params.m_color.GetTexture());
state.SetDrawAsLine(true);
state.SetLineWidth(m_lineWidth);
@@ -322,7 +319,7 @@ public:
dp::GLState GetState() override
{
- auto state = CreateGLState(gpu::DASHED_LINE_PROGRAM, m_params.m_depthLayer);
+ auto state = CreateGLState(gpu::Program::DashedLine, m_params.m_depthLayer);
state.SetColorTexture(m_params.m_color.GetTexture());
state.SetMaskTexture(m_texCoordGen.GetRegion().GetTexture());
return state;
@@ -340,7 +337,7 @@ private:
float const m_baseGtoPScale;
};
-} // namespace
+} // namespace
LineShape::LineShape(m2::SharedSpline const & spline, LineViewParams const & params)
: m_params(params)
@@ -570,6 +567,5 @@ void LineShape::Draw(ref_ptr<dp::Batcher> batcher, ref_ptr<dp::TextureManager> t
batcher->InsertLineStrip(state, make_ref(&provider));
}
}
-
-} // namespace df
+} // namespace df
diff --git a/drape_frontend/my_position.cpp b/drape_frontend/my_position.cpp
index 5f561c825d..a86e9835e2 100644
--- a/drape_frontend/my_position.cpp
+++ b/drape_frontend/my_position.cpp
@@ -1,10 +1,11 @@
#include "drape_frontend/my_position.hpp"
#include "drape_frontend/color_constants.hpp"
#include "drape_frontend/map_shape.hpp"
-#include "drape_frontend/shader_def.hpp"
#include "drape_frontend/shape_view_params.hpp"
#include "drape_frontend/tile_utils.hpp"
+#include "shaders/programs.hpp"
+
#include "drape/constants.hpp"
#include "drape/glsl_func.hpp"
#include "drape/glsl_types.hpp"
@@ -25,8 +26,7 @@ struct Vertex
Vertex(glsl::vec2 const & normal, glsl::vec2 const & texCoord)
: m_normal(normal)
, m_texCoord(texCoord)
- {
- }
+ {}
glsl::vec2 m_normal;
glsl::vec2 m_texCoord;
@@ -51,7 +51,7 @@ dp::BindingInfo GetBindingInfo()
return info;
}
-} // namespace
+} // namespace
MyPosition::MyPosition(ref_ptr<dp::TextureManager> mng)
: m_position(m2::PointF::Zero())
@@ -98,26 +98,28 @@ void MyPosition::SetPositionObsolete(bool obsolete)
}
void MyPosition::RenderAccuracy(ScreenBase const & screen, int zoomLevel,
- ref_ptr<dp::GpuProgramManager> mng,
+ ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms)
{
dp::UniformValuesStorage uniforms = commonUniforms;
m2::PointD accuracyPoint(m_position.x + m_accuracy, m_position.y);
- float pixelAccuracy = (screen.GtoP(accuracyPoint) - screen.GtoP(m2::PointD(m_position))).Length();
+ auto const pixelAccuracy =
+ static_cast<float>((screen.GtoP(accuracyPoint) - screen.GtoP(m2::PointD(m_position))).Length());
TileKey const key = GetTileKeyByPoint(m2::PointD(m_position), ClipTileZoomByMaxDataZoom(zoomLevel));
math::Matrix<float, 4, 4> mv = key.GetTileBasedModelView(screen);
- uniforms.SetMatrix4x4Value("modelView", mv.m_data);
+ uniforms.SetMatrix4x4Value("u_modelView", mv.m_data);
- m2::PointD const pos = MapShape::ConvertToLocal(m2::PointD(m_position), key.GetGlobalRect().Center(), kShapeCoordScalar);
+ auto const pos = static_cast<m2::PointF>(
+ MapShape::ConvertToLocal(m2::PointD(m_position), key.GetGlobalRect().Center(), kShapeCoordScalar));
uniforms.SetFloatValue("u_position", pos.x, pos.y, 0.0f);
uniforms.SetFloatValue("u_accuracy", pixelAccuracy);
uniforms.SetFloatValue("u_opacity", 1.0f);
- RenderPart(mng, uniforms, MY_POSITION_ACCURACY);
+ RenderPart(mng, uniforms, MyPositionAccuracy);
}
void MyPosition::RenderMyPosition(ScreenBase const & screen, int zoomLevel,
- ref_ptr<dp::GpuProgramManager> mng,
+ ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms)
{
if (m_showAzimuth)
@@ -131,30 +133,31 @@ void MyPosition::RenderMyPosition(ScreenBase const & screen, int zoomLevel,
dp::UniformValuesStorage uniforms = commonUniforms;
TileKey const key = GetTileKeyByPoint(m2::PointD(m_position), ClipTileZoomByMaxDataZoom(zoomLevel));
math::Matrix<float, 4, 4> mv = key.GetTileBasedModelView(screen);
- uniforms.SetMatrix4x4Value("modelView", mv.m_data);
+ uniforms.SetMatrix4x4Value("u_modelView", mv.m_data);
- m2::PointD const pos = MapShape::ConvertToLocal(m2::PointD(m_position), key.GetGlobalRect().Center(), kShapeCoordScalar);
+ auto const pos = static_cast<m2::PointF>(
+ MapShape::ConvertToLocal(m2::PointD(m_position), key.GetGlobalRect().Center(), kShapeCoordScalar));
uniforms.SetFloatValue("u_position", pos.x, pos.y, dp::depth::kMyPositionMarkDepth);
- uniforms.SetFloatValue("u_azimut", -(m_azimuth + screen.GetAngle()));
+ uniforms.SetFloatValue("u_azimut", -(m_azimuth + static_cast<float>(screen.GetAngle())));
uniforms.SetFloatValue("u_opacity", 1.0);
- RenderPart(mng, uniforms, MY_POSITION_POINT);
+ RenderPart(mng, uniforms, MyPositionPoint);
}
}
void MyPosition::CacheAccuracySector(ref_ptr<dp::TextureManager> mng)
{
- int const TriangleCount = 40;
- int const VertexCount = 3 * TriangleCount;
- float const etalonSector = math::twicePi / static_cast<double>(TriangleCount);
+ size_t constexpr kTriangleCount = 40;
+ size_t constexpr kVertexCount = 3 * kTriangleCount;
+ auto const etalonSector = static_cast<float>(math::twicePi / kTriangleCount);
dp::TextureManager::ColorRegion color;
mng->GetColorRegion(df::GetColorConstant(df::kMyPositionAccuracyColor), color);
glsl::vec2 colorCoord = glsl::ToVec2(color.GetTexRect().Center());
- buffer_vector<Vertex, TriangleCount> buffer;
+ buffer_vector<Vertex, kTriangleCount> buffer;
glsl::vec2 startNormal(0.0f, 1.0f);
- for (size_t i = 0; i < TriangleCount + 1; ++i)
+ for (size_t i = 0; i < kTriangleCount + 1; ++i)
{
glsl::vec2 normal = glsl::rotate(startNormal, i * etalonSector);
glsl::vec2 nextNormal = glsl::rotate(startNormal, (i + 1) * etalonSector);
@@ -164,25 +167,25 @@ void MyPosition::CacheAccuracySector(ref_ptr<dp::TextureManager> mng)
buffer.emplace_back(nextNormal, colorCoord);
}
- auto state = CreateGLState(gpu::ACCURACY_PROGRAM, RenderState::OverlayLayer);
+ auto state = CreateGLState(gpu::Program::Accuracy, RenderState::OverlayLayer);
state.SetColorTexture(color.GetTexture());
{
- dp::Batcher batcher(TriangleCount * dp::Batcher::IndexPerTriangle, VertexCount);
+ dp::Batcher batcher(kTriangleCount * dp::Batcher::IndexPerTriangle, kVertexCount);
dp::SessionGuard guard(batcher, [this](dp::GLState const & state, drape_ptr<dp::RenderBucket> && b)
{
- drape_ptr<dp::RenderBucket> bucket = move(b);
+ drape_ptr<dp::RenderBucket> bucket = std::move(b);
ASSERT(bucket->GetOverlayHandlesCount() == 0, ());
m_nodes.emplace_back(state, bucket->MoveBuffer());
- m_parts[MY_POSITION_ACCURACY].second = m_nodes.size() - 1;
+ m_parts[MyPositionAccuracy].second = m_nodes.size() - 1;
});
- dp::AttributeProvider provider(1 /*stream count*/, VertexCount);
- provider.InitStream(0 /*stream index*/, GetBindingInfo(), make_ref(buffer.data()));
+ dp::AttributeProvider provider(1 /* stream count */, kVertexCount);
+ provider.InitStream(0 /* stream index */, GetBindingInfo(), make_ref(buffer.data()));
- m_parts[MY_POSITION_ACCURACY].first = batcher.InsertTriangleList(state, make_ref(&provider), nullptr);
- ASSERT(m_parts[MY_POSITION_ACCURACY].first.IsValid(), ());
+ m_parts[MyPositionAccuracy].first = batcher.InsertTriangleList(state, make_ref(&provider), nullptr);
+ ASSERT(m_parts[MyPositionAccuracy].first.IsValid(), ());
}
}
@@ -215,22 +218,22 @@ void MyPosition::CachePointPosition(ref_ptr<dp::TextureManager> mng)
m_arrow3d.SetTexture(mng);
- auto state = CreateGLState(gpu::MY_POSITION_PROGRAM, RenderState::OverlayLayer);
+ auto state = CreateGLState(gpu::Program::MyPosition, RenderState::OverlayLayer);
state.SetColorTexture(pointSymbol.GetTexture());
dp::TextureManager::SymbolRegion * symbols[kSymbolsCount] = { &pointSymbol };
- EMyPositionPart partIndices[kSymbolsCount] = { MY_POSITION_POINT };
+ EMyPositionPart partIndices[kSymbolsCount] = { MyPositionPoint };
{
dp::Batcher batcher(kSymbolsCount * dp::Batcher::IndexPerQuad, kSymbolsCount * dp::Batcher::VertexPerQuad);
dp::SessionGuard guard(batcher, [this](dp::GLState const & state, drape_ptr<dp::RenderBucket> && b)
{
- drape_ptr<dp::RenderBucket> bucket = move(b);
+ drape_ptr<dp::RenderBucket> bucket = std::move(b);
ASSERT(bucket->GetOverlayHandlesCount() == 0, ());
m_nodes.emplace_back(state, bucket->MoveBuffer());
});
- int const partIndex = static_cast<int>(m_nodes.size());
+ auto const partIndex = m_nodes.size();
for (int i = 0; i < kSymbolsCount; i++)
{
m_parts[partIndices[i]].second = partIndex;
@@ -239,12 +242,11 @@ void MyPosition::CachePointPosition(ref_ptr<dp::TextureManager> mng)
}
}
-void MyPosition::RenderPart(ref_ptr<dp::GpuProgramManager> mng,
+void MyPosition::RenderPart(ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & uniforms,
MyPosition::EMyPositionPart part)
{
TPart const & p = m_parts[part];
m_nodes[p.second].Render(mng, uniforms, p.first);
}
-
-} // namespace df
+} // namespace df
diff --git a/drape_frontend/my_position.hpp b/drape_frontend/my_position.hpp
index 0a89cd410c..847bce7bd5 100644
--- a/drape_frontend/my_position.hpp
+++ b/drape_frontend/my_position.hpp
@@ -4,23 +4,26 @@
#include "drape_frontend/render_node.hpp"
#include "drape_frontend/render_state.hpp"
-#include "drape/vertex_array_buffer.hpp"
-#include "drape/gpu_program_manager.hpp"
+#include "shaders/program_manager.hpp"
+
+#include "drape/batcher.hpp"
#include "drape/texture_manager.hpp"
#include "drape/uniform_values_storage.hpp"
-#include "drape/batcher.hpp"
+#include "drape/vertex_array_buffer.hpp"
#include "geometry/screenbase.hpp"
+#include <vector>
+#include <utility>
+
namespace df
{
-
class MyPosition
{
public:
- MyPosition(ref_ptr<dp::TextureManager> mng);
+ explicit MyPosition(ref_ptr<dp::TextureManager> mng);
- ///@param pt = mercator point
+ // pt - mercator point
void SetPosition(m2::PointF const & pt);
void SetAzimuth(float azimut);
void SetIsValidAzimuth(bool isValid);
@@ -29,11 +32,11 @@ public:
void SetPositionObsolete(bool obsolete);
void RenderAccuracy(ScreenBase const & screen, int zoomLevel,
- ref_ptr<dp::GpuProgramManager> mng,
+ ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms);
void RenderMyPosition(ScreenBase const & screen, int zoomLevel,
- ref_ptr<dp::GpuProgramManager> mng,
+ ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms);
private:
@@ -42,12 +45,12 @@ private:
enum EMyPositionPart
{
- // don't change order and values
- MY_POSITION_ACCURACY = 0,
- MY_POSITION_POINT = 1,
+ // Don't change the order and the values.
+ MyPositionAccuracy = 0,
+ MyPositionPoint = 1,
};
- void RenderPart(ref_ptr<dp::GpuProgramManager> mng,
+ void RenderPart(ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & uniforms,
EMyPositionPart part);
@@ -62,12 +65,11 @@ private:
bool m_isRoutingMode;
bool m_obsoletePosition;
- using TPart = pair<dp::IndicesRange, size_t>;
+ using TPart = std::pair<dp::IndicesRange, size_t>;
- vector<TPart> m_parts;
- vector<RenderNode> m_nodes;
+ std::vector<TPart> m_parts;
+ std::vector<RenderNode> m_nodes;
Arrow3d m_arrow3d;
};
-
-}
+} // namespace df
diff --git a/drape_frontend/my_position_controller.cpp b/drape_frontend/my_position_controller.cpp
index 4238b24d8d..5672a0e726 100644
--- a/drape_frontend/my_position_controller.cpp
+++ b/drape_frontend/my_position_controller.cpp
@@ -522,7 +522,7 @@ bool MyPositionController::UpdateViewportWithAutoZoom()
}
void MyPositionController::Render(ScreenBase const & screen, int zoomLevel,
- ref_ptr<dp::GpuProgramManager> mng,
+ ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms)
{
if (IsWaitingForLocation())
diff --git a/drape_frontend/my_position_controller.hpp b/drape_frontend/my_position_controller.hpp
index e99a106671..1a3ee489c2 100644
--- a/drape_frontend/my_position_controller.hpp
+++ b/drape_frontend/my_position_controller.hpp
@@ -4,7 +4,8 @@
#include "drape_frontend/drape_hints.hpp"
#include "drape_frontend/my_position.hpp"
-#include "drape/gpu_program_manager.hpp"
+#include "shaders/program_manager.hpp"
+
#include "drape/uniform_values_storage.hpp"
#include "platform/location.hpp"
@@ -115,7 +116,7 @@ public:
void OnLocationUpdate(location::GpsInfo const & info, bool isNavigable, ScreenBase const & screen);
void OnCompassUpdate(location::CompassInfo const & info, ScreenBase const & screen);
- void Render(ScreenBase const & screen, int zoomLevel, ref_ptr<dp::GpuProgramManager> mng,
+ void Render(ScreenBase const & screen, int zoomLevel, ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms);
bool IsRotationAvailable() const { return m_isDirectionAssigned; }
diff --git a/drape_frontend/path_symbol_shape.cpp b/drape_frontend/path_symbol_shape.cpp
index 307f9efc2d..b9f45b1221 100644
--- a/drape_frontend/path_symbol_shape.cpp
+++ b/drape_frontend/path_symbol_shape.cpp
@@ -1,8 +1,9 @@
#include "drape_frontend/path_symbol_shape.hpp"
#include "drape_frontend/render_state.hpp"
-#include "drape_frontend/shader_def.hpp"
#include "drape_frontend/visual_params.hpp"
+#include "shaders/programs.hpp"
+
#include "drape/utils/vertex_decl.hpp"
#include "drape/glsl_types.hpp"
#include "drape/glsl_func.hpp"
@@ -13,13 +14,11 @@
namespace df
{
-
PathSymbolShape::PathSymbolShape(m2::SharedSpline const & spline,
PathSymbolViewParams const & params)
: m_params(params)
, m_spline(spline)
-{
-}
+{}
void PathSymbolShape::Draw(ref_ptr<dp::Batcher> batcher, ref_ptr<dp::TextureManager> textures) const
{
@@ -36,7 +35,7 @@ void PathSymbolShape::Draw(ref_ptr<dp::Batcher> batcher, ref_ptr<dp::TextureMana
m2::Spline::iterator splineIter = m_spline.CreateIterator();
double pToGScale = 1.0 / m_params.m_baseGtoPScale;
splineIter.Advance(m_params.m_offset * pToGScale);
- float step = m_params.m_step * pToGScale;
+ auto const step = static_cast<float>(m_params.m_step * pToGScale);
glsl::vec2 dummy(0.0, 0.0);
while (!splineIter.BeginAgain())
{
@@ -54,12 +53,11 @@ void PathSymbolShape::Draw(ref_ptr<dp::Batcher> batcher, ref_ptr<dp::TextureMana
if (buffer.empty())
return;
- auto state = CreateGLState(gpu::PATH_SYMBOL_LINE, RenderState::GeometryLayer);
+ auto state = CreateGLState(gpu::Program::PathSymbol, RenderState::GeometryLayer);
state.SetColorTexture(region.GetTexture());
dp::AttributeProvider provider(1, static_cast<uint32_t>(buffer.size()));
provider.InitStream(0, gpu::SolidTexturingVertex::GetBindingInfo(), make_ref(buffer.data()));
batcher->InsertListOfStrip(state, make_ref(&provider), 4);
}
-
-}
+} // namespace df
diff --git a/drape_frontend/path_symbol_shape.hpp b/drape_frontend/path_symbol_shape.hpp
index d02c36c0d6..0114a454b9 100644
--- a/drape_frontend/path_symbol_shape.hpp
+++ b/drape_frontend/path_symbol_shape.hpp
@@ -7,7 +7,6 @@
namespace df
{
-
class PathSymbolShape : public MapShape
{
public:
@@ -18,5 +17,4 @@ private:
PathSymbolViewParams m_params;
m2::SharedSpline m_spline;
};
-
-}
+} // namespace df
diff --git a/drape_frontend/path_text_shape.cpp b/drape_frontend/path_text_shape.cpp
index fb1b79b6f8..c3f89f7751 100644
--- a/drape_frontend/path_text_shape.cpp
+++ b/drape_frontend/path_text_shape.cpp
@@ -1,7 +1,8 @@
#include "drape_frontend/path_text_shape.hpp"
#include "drape_frontend/path_text_handle.hpp"
#include "drape_frontend/render_state.hpp"
-#include "drape_frontend/shader_def.hpp"
+
+#include "shaders/programs.hpp"
#include "drape/attribute_provider.hpp"
#include "drape/batcher.hpp"
@@ -81,10 +82,11 @@ void PathTextShape::DrawPathTextPlain(ref_ptr<dp::TextureManager> textures,
dp::TextureManager::ColorRegion color;
textures->GetColorRegion(m_params.m_textFont.m_color, color);
- auto state = CreateGLState(layout->GetFixedHeight() > 0 ? gpu::TEXT_FIXED_PROGRAM : gpu::TEXT_PROGRAM,
+ auto state = CreateGLState(layout->GetFixedHeight() > 0 ?
+ gpu::Program::TextFixed : gpu::Program::Text,
RenderState::OverlayLayer);
- state.SetProgram3dIndex(layout->GetFixedHeight() > 0 ? gpu::TEXT_FIXED_BILLBOARD_PROGRAM :
- gpu::TEXT_BILLBOARD_PROGRAM);
+ state.SetProgram3d(layout->GetFixedHeight() > 0 ?
+ gpu::Program::TextFixedBillboard : gpu::Program::TextBillboard);
state.SetColorTexture(color.GetTexture());
state.SetMaskTexture(layout->GetMaskTexture());
@@ -121,8 +123,8 @@ void PathTextShape::DrawPathTextOutlined(ref_ptr<dp::TextureManager> textures,
textures->GetColorRegion(m_params.m_textFont.m_color, color);
textures->GetColorRegion(m_params.m_textFont.m_outlineColor, outline);
- auto state = CreateGLState(gpu::TEXT_OUTLINED_PROGRAM, RenderState::OverlayLayer);
- state.SetProgram3dIndex(gpu::TEXT_OUTLINED_BILLBOARD_PROGRAM);
+ auto state = CreateGLState(gpu::Program::TextOutlined, RenderState::OverlayLayer);
+ state.SetProgram3d(gpu::Program::TextOutlinedBillboard);
state.SetColorTexture(color.GetTexture());
state.SetMaskTexture(layout->GetMaskTexture());
diff --git a/drape_frontend/poi_symbol_shape.cpp b/drape_frontend/poi_symbol_shape.cpp
index 62d3b6dec7..ab0f28ead6 100644
--- a/drape_frontend/poi_symbol_shape.cpp
+++ b/drape_frontend/poi_symbol_shape.cpp
@@ -1,6 +1,7 @@
#include "drape_frontend/poi_symbol_shape.hpp"
#include "drape_frontend/color_constants.hpp"
-#include "drape_frontend/shader_def.hpp"
+
+#include "shaders/programs.hpp"
#include "drape/attribute_provider.hpp"
#include "drape/batcher.hpp"
@@ -66,8 +67,8 @@ void Batch<SV>(ref_ptr<dp::Batcher> batcher, drape_ptr<dp::OverlayHandle> && han
glsl::vec2(texRect.maxX(), texRect.minY()) },
};
- auto state = df::CreateGLState(gpu::TEXTURING_PROGRAM, params.m_depthLayer);
- state.SetProgram3dIndex(gpu::TEXTURING_BILLBOARD_PROGRAM);
+ auto state = df::CreateGLState(gpu::Program::Texturing, params.m_depthLayer);
+ state.SetProgram3d(gpu::Program::TexturingBillboard);
state.SetColorTexture(symbolRegion.GetTexture());
state.SetTextureFilter(gl_const::GLNearest);
@@ -99,8 +100,8 @@ void Batch<MV>(ref_ptr<dp::Batcher> batcher, drape_ptr<dp::OverlayHandle> && han
glsl::vec2(texRect.maxX(), texRect.minY()), maskColorCoords },
};
- auto state = df::CreateGLState(gpu::MASKED_TEXTURING_PROGRAM, params.m_depthLayer);
- state.SetProgram3dIndex(gpu::MASKED_TEXTURING_BILLBOARD_PROGRAM);
+ auto state = df::CreateGLState(gpu::Program::MaskedTexturing, params.m_depthLayer);
+ state.SetProgram3d(gpu::Program::MaskedTexturingBillboard);
state.SetColorTexture(symbolRegion.GetTexture());
state.SetMaskTexture(colorRegion.GetTexture()); // Here mask is a color.
state.SetTextureFilter(gl_const::GLNearest);
diff --git a/drape_frontend/postprocess_renderer.cpp b/drape_frontend/postprocess_renderer.cpp
index 2f10edf406..14bb671909 100644
--- a/drape_frontend/postprocess_renderer.cpp
+++ b/drape_frontend/postprocess_renderer.cpp
@@ -1,10 +1,10 @@
#include "drape_frontend/postprocess_renderer.hpp"
#include "drape_frontend/render_state.hpp"
#include "drape_frontend/screen_quad_renderer.hpp"
-#include "drape_frontend/shader_def.hpp"
+
+#include "shaders/program_manager.hpp"
#include "drape/glfunctions.hpp"
-#include "drape/gpu_program_manager.hpp"
#include "drape/texture_manager.hpp"
#include "drape/uniform_values_storage.hpp"
@@ -32,7 +32,7 @@ protected:
class EdgesRendererContext : public SMAABaseRendererContext
{
public:
- int GetGpuProgram() const override { return gpu::SMAA_EDGES_PROGRAM; }
+ gpu::Program GetGpuProgram() const override { return gpu::Program::SmaaEdges; }
void PreRender(ref_ptr<dp::GpuProgram> prg) override
{
@@ -60,7 +60,7 @@ protected:
class BlendingWeightRendererContext : public SMAABaseRendererContext
{
public:
- int GetGpuProgram() const override { return gpu::SMAA_BLENDING_WEIGHT_PROGRAM; }
+ gpu::Program GetGpuProgram() const override { return gpu::Program::SmaaBlendingWeight; }
void PreRender(ref_ptr<dp::GpuProgram> prg) override
{
@@ -103,7 +103,7 @@ private:
class SMAAFinalRendererContext : public SMAABaseRendererContext
{
public:
- int GetGpuProgram() const override { return gpu::SMAA_FINAL_PROGRAM; }
+ gpu::Program GetGpuProgram() const override { return gpu::Program::SmaaFinal; }
void PreRender(ref_ptr<dp::GpuProgram> prg) override
{
@@ -144,7 +144,7 @@ private:
void InitFramebuffer(drape_ptr<dp::Framebuffer> & framebuffer, uint32_t width, uint32_t height)
{
if (framebuffer == nullptr)
- framebuffer.reset(new dp::Framebuffer(gl_const::GLRGBA, true /* stencilEnabled */));
+ framebuffer = make_unique_dp<dp::Framebuffer>(gl_const::GLRGBA, true /* stencilEnabled */);
framebuffer->SetSize(width, height);
}
@@ -153,7 +153,7 @@ void InitFramebuffer(drape_ptr<dp::Framebuffer> & framebuffer, uint32_t colorFor
uint32_t width, uint32_t height)
{
if (framebuffer == nullptr)
- framebuffer.reset(new dp::Framebuffer(colorFormat));
+ framebuffer = make_unique_dp<dp::Framebuffer>(colorFormat);
framebuffer->SetDepthStencilRef(depthStencilRef);
framebuffer->SetSize(width, height);
}
@@ -239,8 +239,8 @@ bool PostprocessRenderer::IsEnabled() const
void PostprocessRenderer::SetEffectEnabled(Effect effect, bool enabled)
{
- uint32_t const oldValue = m_effects;
- uint32_t const effectMask = static_cast<uint32_t>(effect);
+ auto const oldValue = m_effects;
+ auto const effectMask = static_cast<uint32_t>(effect);
m_effects = (m_effects & ~effectMask) | (enabled ? effectMask : 0);
if (m_width != 0 && m_height != 0 && oldValue != m_effects)
@@ -276,9 +276,9 @@ void PostprocessRenderer::BeginFrame()
GLFunctions::glDisable(gl_const::GLStencilTest);
}
-void PostprocessRenderer::EndFrame(ref_ptr<dp::GpuProgramManager> gpuProgramManager)
+void PostprocessRenderer::EndFrame(ref_ptr<gpu::ProgramManager> gpuProgramManager)
{
- if (!IsEnabled() && !m_frameStarted)
+ if (!IsEnabled() || !m_frameStarted)
return;
bool wasPostEffect = false;
diff --git a/drape_frontend/postprocess_renderer.hpp b/drape_frontend/postprocess_renderer.hpp
index ce926218cf..d6f54ea9e8 100644
--- a/drape_frontend/postprocess_renderer.hpp
+++ b/drape_frontend/postprocess_renderer.hpp
@@ -3,12 +3,18 @@
#include "drape/framebuffer.hpp"
#include "drape/pointers.hpp"
+#include <cstdint>
+
namespace dp
{
-class GpuProgramManager;
class Texture;
} // namespace dp
+namespace gpu
+{
+class ProgramManager;
+} // namespace gpu
+
namespace df
{
class ScreenQuadRenderer;
@@ -44,7 +50,7 @@ public:
void OnFramebufferFallback();
void BeginFrame();
- void EndFrame(ref_ptr<dp::GpuProgramManager> gpuProgramManager);
+ void EndFrame(ref_ptr<gpu::ProgramManager> gpuProgramManager);
void EnableWritingToStencil() const;
void DisableWritingToStencil() const;
@@ -75,7 +81,7 @@ private:
class StencilWriterGuard
{
public:
- StencilWriterGuard(ref_ptr<PostprocessRenderer> renderer);
+ explicit StencilWriterGuard(ref_ptr<PostprocessRenderer> renderer);
~StencilWriterGuard();
private:
ref_ptr<PostprocessRenderer> const m_renderer;
diff --git a/drape_frontend/render_group.cpp b/drape_frontend/render_group.cpp
index 8e8b58cb29..105ea13ce7 100755
--- a/drape_frontend/render_group.cpp
+++ b/drape_frontend/render_group.cpp
@@ -1,7 +1,8 @@
#include "drape_frontend/render_group.hpp"
-#include "drape_frontend/shader_def.hpp"
#include "drape_frontend/visual_params.hpp"
+#include "shaders/programs.hpp"
+
#include "drape/debug_rect_renderer.hpp"
#include "drape/vertex_array_buffer.hpp"
@@ -9,6 +10,7 @@
#include "base/stl_add.hpp"
+#include <algorithm>
#include <sstream>
#include <utility>
@@ -101,24 +103,23 @@ void RenderGroup::Render(ScreenBase const & screen)
// Set tile-based model-view matrix.
{
math::Matrix<float, 4, 4> mv = GetTileKey().GetTileBasedModelView(screen);
- m_uniforms.SetMatrix4x4Value("modelView", mv.m_data);
+ m_uniforms.SetMatrix4x4Value("u_modelView", mv.m_data);
}
- int const programIndex = m_state.GetProgramIndex();
- int const program3dIndex = m_state.GetProgram3dIndex();
+ auto const program = m_state.GetProgram<gpu::Program>();
+ auto const program3d = m_state.GetProgram3d<gpu::Program>();
+ // TODO: hide GLDepthTest under the state.
if (IsOverlay())
{
- if (programIndex == gpu::COLORED_SYMBOL_PROGRAM ||
- programIndex == gpu::COLORED_SYMBOL_BILLBOARD_PROGRAM)
+ if (program == gpu::Program::ColoredSymbol || program3d == gpu::Program::ColoredSymbolBillboard)
GLFunctions::glEnable(gl_const::GLDepthTest);
else
GLFunctions::glDisable(gl_const::GLDepthTest);
}
auto const & params = df::VisualParams::Instance().GetGlyphVisualParams();
- if (programIndex == gpu::TEXT_OUTLINED_PROGRAM ||
- program3dIndex == gpu::TEXT_OUTLINED_BILLBOARD_PROGRAM)
+ if (program == gpu::Program::TextOutlined || program3d == gpu::Program::TextOutlinedBillboard)
{
m_uniforms.SetFloatValue("u_contrastGamma", params.m_outlineContrast, params.m_outlineGamma);
m_uniforms.SetFloatValue("u_isOutlinePass", 1.0f);
@@ -133,8 +134,7 @@ void RenderGroup::Render(ScreenBase const & screen)
for(auto & renderBucket : m_renderBuckets)
renderBucket->Render(m_state.GetDrawAsLine());
}
- else if (programIndex == gpu::TEXT_PROGRAM ||
- program3dIndex == gpu::TEXT_BILLBOARD_PROGRAM)
+ else if (program == gpu::Program::Text || program3d == gpu::Program::TextBillboard)
{
m_uniforms.SetFloatValue("u_contrastGamma", params.m_contrast, params.m_gamma);
dp::ApplyUniforms(m_uniforms, shader);
@@ -187,7 +187,7 @@ bool RenderGroup::UpdateCanBeDeletedStatus(bool canBeDeleted, int currentZoom, r
if (!visibleBucket)
{
m_renderBuckets[i]->RemoveOverlayHandles(tree);
- swap(m_renderBuckets[i], m_renderBuckets.back());
+ std::swap(m_renderBuckets[i], m_renderBuckets.back());
m_renderBuckets.pop_back();
}
else
@@ -222,10 +222,12 @@ bool RenderGroupComparator::operator()(drape_ptr<RenderGroup> const & l, drape_p
UserMarkRenderGroup::UserMarkRenderGroup(dp::GLState const & state, TileKey const & tileKey)
: TBase(state, tileKey)
{
- if (state.GetProgramIndex() == gpu::BOOKMARK_ANIM_PROGRAM ||
- state.GetProgram3dIndex() == gpu::BOOKMARK_ANIM_BILLBOARD_PROGRAM)
+ auto const program = state.GetProgram<gpu::Program>();
+ auto const program3d = state.GetProgram3d<gpu::Program>();
+
+ if (program == gpu::Program::BookmarkAnim || program3d == gpu::Program::BookmarkAnimBillboard)
{
- m_animation = make_unique<OpacityAnimation>(0.25 /*duration*/, 0.0 /* minValue */, 1.0 /* maxValue*/);
+ m_animation = make_unique<OpacityAnimation>(0.25 /* duration */, 0.0 /* minValue */, 1.0 /* maxValue */);
m_mapping.AddRangePoint(0.6f, 1.3f);
m_mapping.AddRangePoint(0.85f, 0.8f);
m_mapping.AddRangePoint(1.0f, 1.0f);
@@ -246,7 +248,7 @@ void UserMarkRenderGroup::UpdateAnimation()
bool UserMarkRenderGroup::IsUserPoint() const
{
- return m_state.GetProgramIndex() != gpu::LINE_PROGRAM;
+ return m_state.GetProgram<gpu::Program>() != gpu::Program::Line;
}
std::string DebugPrint(RenderGroup const & group)
diff --git a/drape_frontend/render_group.hpp b/drape_frontend/render_group.hpp
index 5e27368f68..f0ade59f44 100755
--- a/drape_frontend/render_group.hpp
+++ b/drape_frontend/render_group.hpp
@@ -17,7 +17,6 @@ namespace dp { class OverlayTree; }
namespace df
{
-
class BaseRenderGroup
{
public:
diff --git a/drape_frontend/render_node.cpp b/drape_frontend/render_node.cpp
index cebf0ff10a..bb7f2a1032 100644
--- a/drape_frontend/render_node.cpp
+++ b/drape_frontend/render_node.cpp
@@ -1,37 +1,39 @@
-#include "render_node.hpp"
+#include "drape_frontend/render_node.hpp"
+
+#include "shaders/program_manager.hpp"
#include "drape/vertex_array_buffer.hpp"
-#include "drape/gpu_program_manager.hpp"
+
+#include <utility>
namespace df
{
RenderNode::RenderNode(dp::GLState const & state, drape_ptr<dp::VertexArrayBuffer> && buffer)
: m_state(state)
- , m_buffer(move(buffer))
- , m_isBuilded(false)
+ , m_buffer(std::move(buffer))
{}
-void RenderNode::Render(ref_ptr<dp::GpuProgramManager> mng, dp::UniformValuesStorage const & uniforms,
+void RenderNode::Render(ref_ptr<gpu::ProgramManager> mng, dp::UniformValuesStorage const & uniforms,
dp::IndicesRange const & range)
{
Apply(mng, uniforms);
m_buffer->RenderRange(m_state.GetDrawAsLine(), range);
}
-void RenderNode::Render(ref_ptr<dp::GpuProgramManager> mng, dp::UniformValuesStorage const & uniforms)
+void RenderNode::Render(ref_ptr<gpu::ProgramManager> mng, dp::UniformValuesStorage const & uniforms)
{
Apply(mng, uniforms);
m_buffer->Render(m_state.GetDrawAsLine());
}
-void RenderNode::Apply(ref_ptr<dp::GpuProgramManager> mng, dp::UniformValuesStorage const & uniforms)
+void RenderNode::Apply(ref_ptr<gpu::ProgramManager> mng, dp::UniformValuesStorage const & uniforms)
{
- ref_ptr<dp::GpuProgram> prg = mng->GetProgram(m_state.GetProgramIndex());
+ auto prg = mng->GetProgram(m_state.GetProgram<gpu::Program>());
prg->Bind();
- if (!m_isBuilded)
+ if (!m_isBuilt)
{
m_buffer->Build(prg);
- m_isBuilded = true;
+ m_isBuilt = true;
}
dp::ApplyState(m_state, prg);
diff --git a/drape_frontend/render_node.hpp b/drape_frontend/render_node.hpp
index 2405b29bef..a54a5f9b24 100644
--- a/drape_frontend/render_node.hpp
+++ b/drape_frontend/render_node.hpp
@@ -7,10 +7,14 @@
namespace dp
{
class VertexArrayBuffer;
-class GpuProgramManager;
struct IndicesRange;
} // namespace dp
+namespace gpu
+{
+class ProgramManager;
+} // namespace gpu
+
namespace df
{
class RenderNode
@@ -18,15 +22,15 @@ class RenderNode
public:
RenderNode(dp::GLState const & state, drape_ptr<dp::VertexArrayBuffer> && buffer);
- void Render(ref_ptr<dp::GpuProgramManager> mng, dp::UniformValuesStorage const & uniforms);
- void Render(ref_ptr<dp::GpuProgramManager> mng, dp::UniformValuesStorage const & uniforms,
+ void Render(ref_ptr<gpu::ProgramManager> mng, dp::UniformValuesStorage const & uniforms);
+ void Render(ref_ptr<gpu::ProgramManager> mng, dp::UniformValuesStorage const & uniforms,
dp::IndicesRange const & range);
private:
- void Apply(ref_ptr<dp::GpuProgramManager> mng, dp::UniformValuesStorage const & uniforms);
+ void Apply(ref_ptr<gpu::ProgramManager> mng, dp::UniformValuesStorage const & uniforms);
dp::GLState m_state;
drape_ptr<dp::VertexArrayBuffer> m_buffer;
- bool m_isBuilded;
+ bool m_isBuilt = false;
};
} // namespace df
diff --git a/drape_frontend/render_state.cpp b/drape_frontend/render_state.cpp
index 4fcacc3772..ca59e03dae 100644
--- a/drape_frontend/render_state.cpp
+++ b/drape_frontend/render_state.cpp
@@ -40,8 +40,8 @@ RenderState::DepthLayer GetDepthLayer(dp::GLState const & state)
return state.GetRenderState<RenderState>()->GetDepthLayer();
}
-dp::GLState CreateGLState(int gpuProgramIndex, RenderState::DepthLayer depthLayer)
+dp::GLState CreateGLState(gpu::Program program, RenderState::DepthLayer depthLayer)
{
- return dp::GLState(gpuProgramIndex, RenderStateFactory::Get(depthLayer));
+ return dp::GLState(program, RenderStateFactory::Get(depthLayer));
}
} // namespace df
diff --git a/drape_frontend/render_state.hpp b/drape_frontend/render_state.hpp
index 8952ae8e92..1d4580170c 100644
--- a/drape_frontend/render_state.hpp
+++ b/drape_frontend/render_state.hpp
@@ -1,5 +1,7 @@
#pragma once
+#include "shaders/programs.hpp"
+
#include "drape/glstate.hpp"
#include "drape/pointers.hpp"
@@ -44,5 +46,5 @@ public:
};
extern RenderState::DepthLayer GetDepthLayer(dp::GLState const & state);
-extern dp::GLState CreateGLState(int gpuProgramIndex, RenderState::DepthLayer depthLayer);
+extern dp::GLState CreateGLState(gpu::Program program, RenderState::DepthLayer depthLayer);
} // namespace df
diff --git a/drape_frontend/route_renderer.cpp b/drape_frontend/route_renderer.cpp
index 38e8f59849..c5dd663153 100644
--- a/drape_frontend/route_renderer.cpp
+++ b/drape_frontend/route_renderer.cpp
@@ -1,9 +1,10 @@
#include "drape_frontend/route_renderer.hpp"
#include "drape_frontend/message_subclasses.hpp"
-#include "drape_frontend/shader_def.hpp"
#include "drape_frontend/shape_view_params.hpp"
#include "drape_frontend/visual_params.hpp"
+#include "shaders/programs.hpp"
+
#include "drape/glsl_func.hpp"
#include "drape/utils/projection.hpp"
#include "drape/vertex_array_buffer.hpp"
@@ -212,10 +213,10 @@ std::vector<ArrowBorders> CalculateArrowBorders(ScreenBase const & screen, float
return newArrowBorders;
}
-void BuildBuckets(RouteRenderProperty const & renderProperty, ref_ptr<dp::GpuProgramManager> mng)
+void BuildBuckets(RouteRenderProperty const & renderProperty, ref_ptr<gpu::ProgramManager> mng)
{
for (auto const & bucket : renderProperty.m_buckets)
- bucket->GetBuffer()->Build(mng->GetProgram(renderProperty.m_state.GetProgramIndex()));
+ bucket->GetBuffer()->Build(mng->GetProgram(renderProperty.m_state.GetProgram<gpu::Program>()));
}
RouteRenderer::Subroutes::iterator FindSubroute(RouteRenderer::Subroutes & subroutes,
@@ -380,7 +381,7 @@ dp::Color RouteRenderer::GetMaskColor(RouteType routeType, double baseDistance,
void RouteRenderer::RenderSubroute(SubrouteInfo const & subrouteInfo, size_t subrouteDataIndex,
ScreenBase const & screen, bool trafficShown,
- ref_ptr<dp::GpuProgramManager> mng,
+ ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms)
{
ASSERT_LESS(subrouteDataIndex, subrouteInfo.m_subrouteData.size(), ());
@@ -410,7 +411,7 @@ void RouteRenderer::RenderSubroute(SubrouteInfo const & subrouteInfo, size_t sub
// Set up uniforms.
dp::UniformValuesStorage uniforms = commonUniforms;
math::Matrix<float, 4, 4> mv = screen.GetModelView(subrouteData->m_pivot, kShapeCoordScalar);
- uniforms.SetMatrix4x4Value("modelView", mv.m_data);
+ uniforms.SetMatrix4x4Value("u_modelView", mv.m_data);
glsl::vec4 const color = glsl::ToVec4(df::GetColorConstant(style.m_color));
uniforms.SetFloatValue("u_color", color.r, color.g, color.b, color.a);
@@ -438,7 +439,7 @@ void RouteRenderer::RenderSubroute(SubrouteInfo const & subrouteInfo, size_t sub
// Set up shaders and apply uniforms.
ref_ptr<dp::GpuProgram> prg = mng->GetProgram(style.m_pattern.m_isDashed ?
- gpu::ROUTE_DASH_PROGRAM : gpu::ROUTE_PROGRAM);
+ gpu::Program::RouteDash : gpu::Program::Route);
prg->Bind();
dp::ApplyState(state, prg);
dp::ApplyUniforms(uniforms, prg);
@@ -450,7 +451,7 @@ void RouteRenderer::RenderSubroute(SubrouteInfo const & subrouteInfo, size_t sub
void RouteRenderer::RenderSubrouteArrows(SubrouteInfo const & subrouteInfo,
ScreenBase const & screen,
- ref_ptr<dp::GpuProgramManager> mng,
+ ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms)
{
if (subrouteInfo.m_arrowsData == nullptr ||
@@ -467,7 +468,7 @@ void RouteRenderer::RenderSubrouteArrows(SubrouteInfo const & subrouteInfo,
dp::UniformValuesStorage uniforms = commonUniforms;
math::Matrix<float, 4, 4> mv = screen.GetModelView(subrouteInfo.m_arrowsData->m_pivot,
kShapeCoordScalar);
- uniforms.SetMatrix4x4Value("modelView", mv.m_data);
+ uniforms.SetMatrix4x4Value("u_modelView", mv.m_data);
auto const arrowHalfWidth = static_cast<float>(currentHalfWidth * kArrowHeightFactor);
uniforms.SetFloatValue("u_arrowHalfWidth", arrowHalfWidth);
uniforms.SetFloatValue("u_opacity", 1.0f);
@@ -477,7 +478,7 @@ void RouteRenderer::RenderSubrouteArrows(SubrouteInfo const & subrouteInfo,
true /* arrows */));
uniforms.SetFloatValue("u_maskColor", maskColor.r, maskColor.g, maskColor.b, maskColor.a);
- ref_ptr<dp::GpuProgram> prg = mng->GetProgram(gpu::ROUTE_ARROW_PROGRAM);
+ ref_ptr<dp::GpuProgram> prg = mng->GetProgram(gpu::Program::RouteArrow);
prg->Bind();
dp::ApplyState(state, prg);
dp::ApplyUniforms(uniforms, prg);
@@ -486,7 +487,7 @@ void RouteRenderer::RenderSubrouteArrows(SubrouteInfo const & subrouteInfo,
}
void RouteRenderer::RenderSubrouteMarkers(SubrouteInfo const & subrouteInfo, ScreenBase const & screen,
- ref_ptr<dp::GpuProgramManager> mng,
+ ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms)
{
if (subrouteInfo.m_markersData == nullptr ||
@@ -507,8 +508,8 @@ void RouteRenderer::RenderSubrouteMarkers(SubrouteInfo const & subrouteInfo, Scr
dp::UniformValuesStorage uniforms = commonUniforms;
math::Matrix<float, 4, 4> mv = screen.GetModelView(subrouteInfo.m_markersData->m_pivot,
kShapeCoordScalar);
- uniforms.SetMatrix4x4Value("modelView", mv.m_data);
- uniforms.SetFloatValue("u_routeParams", currentHalfWidth, dist);
+ uniforms.SetMatrix4x4Value("u_modelView", mv.m_data);
+ uniforms.SetFloatValue("u_routeParams", currentHalfWidth, dist, 0.0f, 0.0f);
uniforms.SetFloatValue("u_opacity", 1.0f);
uniforms.SetFloatValue("u_angleCosSin",
static_cast<float>(cos(screen.GetAngle())),
@@ -519,7 +520,7 @@ void RouteRenderer::RenderSubrouteMarkers(SubrouteInfo const & subrouteInfo, Scr
false /* arrows */));
uniforms.SetFloatValue("u_maskColor", maskColor.r, maskColor.g, maskColor.b, maskColor.a);
- ref_ptr<dp::GpuProgram> prg = mng->GetProgram(gpu::ROUTE_MARKER_PROGRAM);
+ ref_ptr<dp::GpuProgram> prg = mng->GetProgram(gpu::Program::RouteMarker);
prg->Bind();
dp::ApplyState(state, prg);
dp::ApplyUniforms(uniforms, prg);
@@ -527,7 +528,7 @@ void RouteRenderer::RenderSubrouteMarkers(SubrouteInfo const & subrouteInfo, Scr
bucket->Render(state.GetDrawAsLine());
}
-void RouteRenderer::RenderPreviewData(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> mng,
+void RouteRenderer::RenderPreviewData(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms)
{
if (m_waitForPreviewRenderData || m_previewSegments.empty() || m_previewRenderData.empty())
@@ -535,9 +536,9 @@ void RouteRenderer::RenderPreviewData(ScreenBase const & screen, ref_ptr<dp::Gpu
dp::UniformValuesStorage uniforms = commonUniforms;
math::Matrix<float, 4, 4> mv = screen.GetModelView(m_previewPivot, kShapeCoordScalar);
- uniforms.SetMatrix4x4Value("modelView", mv.m_data);
+ uniforms.SetMatrix4x4Value("u_modelView", mv.m_data);
uniforms.SetFloatValue("u_opacity", 1.0f);
- ref_ptr<dp::GpuProgram> program = mng->GetProgram(gpu::CIRCLE_POINT_PROGRAM);
+ ref_ptr<dp::GpuProgram> program = mng->GetProgram(gpu::Program::CirclePoint);
program->Bind();
dp::GLState const & state = m_previewRenderData.front()->m_state;
@@ -553,7 +554,7 @@ void RouteRenderer::RenderPreviewData(ScreenBase const & screen, ref_ptr<dp::Gpu
}
void RouteRenderer::RenderRoute(ScreenBase const & screen, bool trafficShown,
- ref_ptr<dp::GpuProgramManager> mng,
+ ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms)
{
for (auto const & subroute : m_subroutes)
@@ -574,7 +575,7 @@ void RouteRenderer::RenderRoute(ScreenBase const & screen, bool trafficShown,
}
void RouteRenderer::AddSubrouteData(drape_ptr<SubrouteData> && subrouteData,
- ref_ptr<dp::GpuProgramManager> mng)
+ ref_ptr<gpu::ProgramManager> mng)
{
auto const it = FindSubroute(m_subroutes, subrouteData->m_subrouteId);
if (it != m_subroutes.end())
@@ -623,7 +624,7 @@ void RouteRenderer::AddSubrouteData(drape_ptr<SubrouteData> && subrouteData,
}
void RouteRenderer::AddSubrouteArrowsData(drape_ptr<SubrouteArrowsData> && routeArrowsData,
- ref_ptr<dp::GpuProgramManager> mng)
+ ref_ptr<gpu::ProgramManager> mng)
{
auto const it = FindSubroute(m_subroutes, routeArrowsData->m_subrouteId);
if (it != m_subroutes.end())
@@ -634,7 +635,7 @@ void RouteRenderer::AddSubrouteArrowsData(drape_ptr<SubrouteArrowsData> && route
}
void RouteRenderer::AddSubrouteMarkersData(drape_ptr<SubrouteMarkersData> && subrouteMarkersData,
- ref_ptr<dp::GpuProgramManager> mng)
+ ref_ptr<gpu::ProgramManager> mng)
{
auto const it = FindSubroute(m_subroutes, subrouteMarkersData->m_subrouteId);
if (it != m_subroutes.end())
@@ -657,10 +658,10 @@ void RouteRenderer::RemoveSubrouteData(dp::DrapeID subrouteId)
}
void RouteRenderer::AddPreviewRenderData(drape_ptr<CirclesPackRenderData> && renderData,
- ref_ptr<dp::GpuProgramManager> mng)
+ ref_ptr<gpu::ProgramManager> mng)
{
drape_ptr<CirclesPackRenderData> data = std::move(renderData);
- ref_ptr<dp::GpuProgram> program = mng->GetProgram(gpu::CIRCLE_POINT_PROGRAM);
+ ref_ptr<dp::GpuProgram> program = mng->GetProgram(gpu::Program::CirclePoint);
program->Bind();
data->m_bucket->GetBuffer()->Build(program);
m_previewRenderData.push_back(std::move(data));
diff --git a/drape_frontend/route_renderer.hpp b/drape_frontend/route_renderer.hpp
index 8442bcba83..559fe41471 100644
--- a/drape_frontend/route_renderer.hpp
+++ b/drape_frontend/route_renderer.hpp
@@ -3,8 +3,9 @@
#include "drape_frontend/circles_pack_shape.hpp"
#include "drape_frontend/route_builder.hpp"
+#include "shaders/program_manager.hpp"
+
#include "drape/drape_global.hpp"
-#include "drape/gpu_program_manager.hpp"
#include "drape/pointers.hpp"
#include "geometry/screenbase.hpp"
@@ -55,22 +56,22 @@ public:
void UpdateRoute(ScreenBase const & screen, CacheRouteArrowsCallback const & callback);
- void RenderRoute(ScreenBase const & screen, bool trafficShown, ref_ptr<dp::GpuProgramManager> mng,
+ void RenderRoute(ScreenBase const & screen, bool trafficShown, ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms);
- void AddSubrouteData(drape_ptr<SubrouteData> && subrouteData, ref_ptr<dp::GpuProgramManager> mng);
+ void AddSubrouteData(drape_ptr<SubrouteData> && subrouteData, ref_ptr<gpu::ProgramManager> mng);
Subroutes const & GetSubroutes() const;
void RemoveSubrouteData(dp::DrapeID subrouteId);
void AddSubrouteArrowsData(drape_ptr<SubrouteArrowsData> && subrouteArrowsData,
- ref_ptr<dp::GpuProgramManager> mng);
+ ref_ptr<gpu::ProgramManager> mng);
void AddSubrouteMarkersData(drape_ptr<SubrouteMarkersData> && subrouteMarkersData,
- ref_ptr<dp::GpuProgramManager> mng);
+ ref_ptr<gpu::ProgramManager> mng);
void AddPreviewRenderData(drape_ptr<CirclesPackRenderData> && renderData,
- ref_ptr<dp::GpuProgramManager> mng);
+ ref_ptr<gpu::ProgramManager> mng);
void UpdatePreview(ScreenBase const & screen);
@@ -91,15 +92,15 @@ public:
private:
void RenderSubroute(SubrouteInfo const & subrouteInfo, size_t subrouteDataIndex,
- ScreenBase const & screen, bool trafficShown, ref_ptr<dp::GpuProgramManager> mng,
+ ScreenBase const & screen, bool trafficShown, ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms);
void RenderSubrouteArrows(SubrouteInfo const & subrouteInfo, ScreenBase const & screen,
- ref_ptr<dp::GpuProgramManager> mng,
+ ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms);
void RenderSubrouteMarkers(SubrouteInfo const & subrouteInfo, ScreenBase const & screen,
- ref_ptr<dp::GpuProgramManager> mng,
+ ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms);
- void RenderPreviewData(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> mng,
+ void RenderPreviewData(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms);
void ClearPreviewHandles();
CirclesPackHandle * GetPreviewHandle(size_t & index);
diff --git a/drape_frontend/route_shape.cpp b/drape_frontend/route_shape.cpp
index f6ebdd79ea..84199de1c2 100644
--- a/drape_frontend/route_shape.cpp
+++ b/drape_frontend/route_shape.cpp
@@ -1,10 +1,11 @@
#include "drape_frontend/route_shape.hpp"
#include "drape_frontend/line_shape_helper.hpp"
-#include "drape_frontend/shader_def.hpp"
#include "drape_frontend/shape_view_params.hpp"
#include "drape_frontend/tile_utils.hpp"
#include "drape_frontend/traffic_generator.hpp"
+#include "shaders/programs.hpp"
+
#include "drape/attribute_provider.hpp"
#include "drape/batcher.hpp"
#include "drape/glsl_func.hpp"
@@ -489,7 +490,7 @@ void RouteShape::CacheRouteArrows(ref_ptr<dp::TextureManager> mng, m2::PolylineD
TArrowGeometryBuffer joinsGeometry;
dp::TextureManager::SymbolRegion region;
GetArrowTextureRegion(mng, region);
- auto state = CreateGLState(gpu::ROUTE_ARROW_PROGRAM, RenderState::GeometryLayer);
+ auto state = CreateGLState(gpu::Program::RouteArrow, RenderState::GeometryLayer);
state.SetColorTexture(region.GetTexture());
// Generate arrow geometry.
@@ -566,7 +567,7 @@ drape_ptr<df::SubrouteData> RouteShape::CacheRoute(dp::DrapeID subrouteId, Subro
geometry, joinsGeometry);
auto state = CreateGLState(subroute->m_style[styleIndex].m_pattern.m_isDashed ?
- gpu::ROUTE_DASH_PROGRAM : gpu::ROUTE_PROGRAM, RenderState::GeometryLayer);
+ gpu::Program::RouteDash : gpu::Program::Route, RenderState::GeometryLayer);
state.SetColorTexture(textures->GetSymbolsTexture());
BatchGeometry(state, make_ref(geometry.data()), static_cast<uint32_t>(geometry.size()),
@@ -594,7 +595,7 @@ drape_ptr<df::SubrouteMarkersData> RouteShape::CacheMarkers(dp::DrapeID subroute
if (geometry.empty())
return nullptr;
- auto state = CreateGLState(gpu::ROUTE_MARKER_PROGRAM, RenderState::GeometryLayer);
+ auto state = CreateGLState(gpu::Program::RouteMarker, RenderState::GeometryLayer);
state.SetColorTexture(textures->GetSymbolsTexture());
// Batching.
diff --git a/drape_frontend/route_shape.hpp b/drape_frontend/route_shape.hpp
index e1c569119c..9a4a6dce9f 100644
--- a/drape_frontend/route_shape.hpp
+++ b/drape_frontend/route_shape.hpp
@@ -160,7 +160,7 @@ struct RouteRenderProperty
dp::GLState m_state;
std::vector<drape_ptr<dp::RenderBucket>> m_buckets;
RouteRenderProperty()
- : m_state(CreateGLState(0, RenderState::GeometryLayer))
+ : m_state(CreateGLState(gpu::Program::Route, RenderState::GeometryLayer))
{}
};
diff --git a/drape_frontend/screen_quad_renderer.cpp b/drape_frontend/screen_quad_renderer.cpp
index 70b790b762..654d9495a0 100644
--- a/drape_frontend/screen_quad_renderer.cpp
+++ b/drape_frontend/screen_quad_renderer.cpp
@@ -1,12 +1,12 @@
#include "drape_frontend/screen_quad_renderer.hpp"
#include "drape_frontend/render_state.hpp"
-#include "drape_frontend/shader_def.hpp"
+
+#include "shaders/program_manager.hpp"
#include "drape/data_buffer.hpp"
#include "drape/glconstants.hpp"
#include "drape/glextensions_list.hpp"
#include "drape/glfunctions.hpp"
-#include "drape/gpu_program_manager.hpp"
#include "drape/uniform_values_storage.hpp"
#include <vector>
@@ -18,7 +18,7 @@ namespace
class TextureRendererContext : public RendererContext
{
public:
- int GetGpuProgram() const override { return gpu::SCREEN_QUAD_PROGRAM; }
+ gpu::Program GetGpuProgram() const override { return gpu::Program::ScreenQuad; }
void PreRender(ref_ptr<dp::GpuProgram> prg) override
{
@@ -110,7 +110,7 @@ void ScreenQuadRenderer::Build(ref_ptr<dp::GpuProgram> prg)
GLFunctions::glBindBuffer(0, gl_const::GLArrayBuffer);
}
-void ScreenQuadRenderer::Render(ref_ptr<dp::GpuProgramManager> mng, ref_ptr<RendererContext> context)
+void ScreenQuadRenderer::Render(ref_ptr<gpu::ProgramManager> mng, ref_ptr<RendererContext> context)
{
ref_ptr<dp::GpuProgram> prg = mng->GetProgram(context->GetGpuProgram());
prg->Bind();
@@ -141,7 +141,7 @@ void ScreenQuadRenderer::Render(ref_ptr<dp::GpuProgramManager> mng, ref_ptr<Rend
GLFunctions::glBindVertexArray(0);
}
-void ScreenQuadRenderer::RenderTexture(ref_ptr<dp::GpuProgramManager> mng, uint32_t textureId,
+void ScreenQuadRenderer::RenderTexture(ref_ptr<gpu::ProgramManager> mng, uint32_t textureId,
float opacity)
{
ASSERT(dynamic_cast<TextureRendererContext *>(m_textureRendererContext.get()) != nullptr, ());
diff --git a/drape_frontend/screen_quad_renderer.hpp b/drape_frontend/screen_quad_renderer.hpp
index 512ed29d89..0b97586ae4 100644
--- a/drape_frontend/screen_quad_renderer.hpp
+++ b/drape_frontend/screen_quad_renderer.hpp
@@ -1,5 +1,7 @@
#pragma once
+#include "shaders/programs.hpp"
+
#include "drape/pointers.hpp"
#include "geometry/rect2d.hpp"
@@ -9,16 +11,20 @@
namespace dp
{
class GpuProgram;
-class GpuProgramManager;
} // namespace dp
+namespace gpu
+{
+class ProgramManager;
+} // namespace gpu
+
namespace df
{
class RendererContext
{
public:
- virtual ~RendererContext() {}
- virtual int GetGpuProgram() const = 0;
+ virtual ~RendererContext() = default;
+ virtual gpu::Program GetGpuProgram() const = 0;
virtual void PreRender(ref_ptr<dp::GpuProgram> prg) {}
virtual void PostRender() {}
protected:
@@ -39,8 +45,8 @@ public:
bool IsInitialized() const { return m_bufferId != 0; }
m2::RectF const & GetTextureRect() const { return m_textureRect; }
- void Render(ref_ptr<dp::GpuProgramManager> mng, ref_ptr<RendererContext> context);
- void RenderTexture(ref_ptr<dp::GpuProgramManager> mng, uint32_t textureId, float opacity);
+ void Render(ref_ptr<gpu::ProgramManager> mng, ref_ptr<RendererContext> context);
+ void RenderTexture(ref_ptr<gpu::ProgramManager> mng, uint32_t textureId, float opacity);
private:
void Build(ref_ptr<dp::GpuProgram> prg);
diff --git a/drape_frontend/selection_shape.cpp b/drape_frontend/selection_shape.cpp
index 035ca74707..394ec7aee9 100644
--- a/drape_frontend/selection_shape.cpp
+++ b/drape_frontend/selection_shape.cpp
@@ -1,17 +1,17 @@
#include "drape_frontend/selection_shape.hpp"
#include "drape_frontend/color_constants.hpp"
#include "drape_frontend/map_shape.hpp"
-#include "drape_frontend/shader_def.hpp"
#include "drape_frontend/shape_view_params.hpp"
#include "drape_frontend/tile_utils.hpp"
#include "drape_frontend/visual_params.hpp"
+#include "shaders/program_manager.hpp"
+
#include "drape/attribute_provider.hpp"
#include "drape/batcher.hpp"
#include "drape/binding_info.hpp"
#include "drape/glsl_func.hpp"
#include "drape/glsl_types.hpp"
-#include "drape/gpu_program_manager.hpp"
#include "drape/texture_manager.hpp"
#include "drape/uniform_values_storage.hpp"
@@ -29,8 +29,7 @@ struct Vertex
Vertex(glsl::vec2 const & normal, glsl::vec2 const & texCoord)
: m_normal(normal)
, m_texCoord(texCoord)
- {
- }
+ {}
glsl::vec2 m_normal;
glsl::vec2 m_texCoord;
@@ -55,7 +54,7 @@ dp::BindingInfo GetBindingInfo()
return info;
}
-} // namespace
+} // namespace
SelectionShape::SelectionShape(ref_ptr<dp::TextureManager> mng)
: m_position(m2::PointD::Zero())
@@ -63,19 +62,19 @@ SelectionShape::SelectionShape(ref_ptr<dp::TextureManager> mng)
, m_animation(false, 0.25)
, m_selectedObject(OBJECT_EMPTY)
{
- int const TriangleCount = 40;
- int const VertexCount = 3 * TriangleCount;
- float const etalonSector = math::twicePi / static_cast<double>(TriangleCount);
+ size_t constexpr kTriangleCount = 40;
+ size_t constexpr kVertexCount = 3 * kTriangleCount;
+ auto const etalonSector = static_cast<float>(math::twicePi / kTriangleCount);
dp::TextureManager::ColorRegion color;
mng->GetColorRegion(df::GetColorConstant(df::kSelectionColor), color);
glsl::vec2 colorCoord = glsl::ToVec2(color.GetTexRect().Center());
- buffer_vector<Vertex, TriangleCount> buffer;
+ buffer_vector<Vertex, kTriangleCount> buffer;
glsl::vec2 startNormal(0.0f, 1.0f);
- for (size_t i = 0; i < TriangleCount + 1; ++i)
+ for (size_t i = 0; i < kTriangleCount + 1; ++i)
{
glsl::vec2 normal = glsl::rotate(startNormal, i * etalonSector);
glsl::vec2 nextNormal = glsl::rotate(startNormal, (i + 1) * etalonSector);
@@ -85,20 +84,20 @@ SelectionShape::SelectionShape(ref_ptr<dp::TextureManager> mng)
buffer.emplace_back(nextNormal, colorCoord);
}
- auto state = CreateGLState(gpu::ACCURACY_PROGRAM, RenderState::OverlayLayer);
+ auto state = CreateGLState(gpu::Program::Accuracy, RenderState::OverlayLayer);
state.SetColorTexture(color.GetTexture());
{
- dp::Batcher batcher(TriangleCount * dp::Batcher::IndexPerTriangle, VertexCount);
+ dp::Batcher batcher(kTriangleCount * dp::Batcher::IndexPerTriangle, kVertexCount);
dp::SessionGuard guard(batcher, [this](dp::GLState const & state, drape_ptr<dp::RenderBucket> && b)
{
- drape_ptr<dp::RenderBucket> bucket = move(b);
+ drape_ptr<dp::RenderBucket> bucket = std::move(b);
ASSERT(bucket->GetOverlayHandlesCount() == 0, ());
m_renderNode = make_unique_dp<RenderNode>(state, bucket->MoveBuffer());
});
- dp::AttributeProvider provider(1 /*stream count*/, VertexCount);
- provider.InitStream(0 /*stream index*/, GetBindingInfo(), make_ref(buffer.data()));
+ dp::AttributeProvider provider(1 /* stream count */, kVertexCount);
+ provider.InitStream(0 /* stream index */, GetBindingInfo(), make_ref(buffer.data()));
batcher.InsertTriangleList(state, make_ref(&provider), nullptr);
}
@@ -141,7 +140,7 @@ bool SelectionShape::IsVisible(ScreenBase const & screen, m2::PointD & pxPos) co
return false;
}
-void SelectionShape::Render(ScreenBase const & screen, int zoomLevel, ref_ptr<dp::GpuProgramManager> mng,
+void SelectionShape::Render(ScreenBase const & screen, int zoomLevel, ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms)
{
ShowHideAnimation::EState state = m_animation.GetState();
@@ -151,7 +150,7 @@ void SelectionShape::Render(ScreenBase const & screen, int zoomLevel, ref_ptr<dp
dp::UniformValuesStorage uniforms = commonUniforms;
TileKey const key = GetTileKeyByPoint(m_position, ClipTileZoomByMaxDataZoom(zoomLevel));
math::Matrix<float, 4, 4> mv = key.GetTileBasedModelView(screen);
- uniforms.SetMatrix4x4Value("modelView", mv.m_data);
+ uniforms.SetMatrix4x4Value("u_modelView", mv.m_data);
m2::PointD const pos = MapShape::ConvertToLocal(m_position, key.GetGlobalRect().Center(), kShapeCoordScalar);
uniforms.SetFloatValue("u_position", pos.x, pos.y, -m_positionZ);
@@ -161,7 +160,7 @@ void SelectionShape::Render(ScreenBase const & screen, int zoomLevel, ref_ptr<dp
{
m2::PointD const pt1 = screen.GtoP(m_position);
m2::PointD const pt2(pt1.x + 1, pt1.y);
- float const scale = screen.PtoP3d(pt2).x - screen.PtoP3d(pt1).x;
+ auto const scale = static_cast<float>(screen.PtoP3d(pt2).x - screen.PtoP3d(pt1).x);
accuracy /= scale;
}
uniforms.SetFloatValue("u_accuracy", accuracy);
@@ -174,5 +173,4 @@ SelectionShape::ESelectedObject SelectionShape::GetSelectedObject() const
{
return m_selectedObject;
}
-
-} // namespace df
+} // namespace df
diff --git a/drape_frontend/selection_shape.hpp b/drape_frontend/selection_shape.hpp
index 5655033ae1..38e8514c93 100644
--- a/drape_frontend/selection_shape.hpp
+++ b/drape_frontend/selection_shape.hpp
@@ -9,16 +9,17 @@
namespace dp
{
-
-class GpuProgramManager;
class UniformValuesStorage;
class TextureManager;
+} // namespace dp
-}
+namespace gpu
+{
+class ProgramManager;
+} // namespace gpu
namespace df
{
-
class SelectionShape
{
public:
@@ -30,12 +31,12 @@ public:
OBJECT_MY_POSITION
};
- SelectionShape(ref_ptr<dp::TextureManager> mng);
+ explicit SelectionShape(ref_ptr<dp::TextureManager> mng);
void SetPosition(m2::PointD const & position) { m_position = position; }
void Show(ESelectedObject obj, m2::PointD const & position, double positionZ, bool isAnimate);
void Hide();
- void Render(ScreenBase const & screen, int zoomLevel, ref_ptr<dp::GpuProgramManager> mng,
+ void Render(ScreenBase const & screen, int zoomLevel, ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms);
bool IsVisible(ScreenBase const & screen, m2::PointD & pxPos) const;
@@ -44,9 +45,6 @@ public:
ESelectedObject GetSelectedObject() const;
private:
- double GetCurrentRadius() const;
-
-private:
m2::PointD m_position;
double m_positionZ;
double m_radius;
@@ -56,5 +54,4 @@ private:
drape_ptr<RenderNode> m_renderNode;
ValueMapping<float> m_mapping;
};
-
-} // namespace df
+} // namespace df
diff --git a/drape_frontend/text_shape.cpp b/drape_frontend/text_shape.cpp
index c190c92174..3de76e5263 100644
--- a/drape_frontend/text_shape.cpp
+++ b/drape_frontend/text_shape.cpp
@@ -1,10 +1,11 @@
#include "drape_frontend/text_shape.hpp"
#include "drape_frontend/render_state.hpp"
-#include "drape_frontend/shader_def.hpp"
#include "drape_frontend/text_handle.hpp"
#include "drape_frontend/text_layout.hpp"
#include "drape_frontend/visual_params.hpp"
+#include "shaders/programs.hpp"
+
#include "drape/utils/vertex_decl.hpp"
#include "drape/attribute_provider.hpp"
#include "drape/batcher.hpp"
@@ -313,8 +314,8 @@ void TextShape::DrawSubStringPlain(StraightTextLayout const & layout, dp::FontDe
layout.CacheStaticGeometry(color, staticBuffer);
bool const isNonSdfText = layout.GetFixedHeight() > 0;
- auto state = CreateGLState(isNonSdfText ? gpu::TEXT_FIXED_PROGRAM : gpu::TEXT_PROGRAM, m_params.m_depthLayer);
- state.SetProgram3dIndex(isNonSdfText ? gpu::TEXT_FIXED_BILLBOARD_PROGRAM : gpu::TEXT_BILLBOARD_PROGRAM);
+ auto state = CreateGLState(isNonSdfText ? gpu::Program::TextFixed : gpu::Program::Text, m_params.m_depthLayer);
+ state.SetProgram3d(isNonSdfText ? gpu::Program::TextFixedBillboard : gpu::Program::TextBillboard);
ASSERT(color.GetTexture() == outline.GetTexture(), ());
state.SetColorTexture(color.GetTexture());
@@ -377,8 +378,8 @@ void TextShape::DrawSubStringOutlined(StraightTextLayout const & layout, dp::Fon
layout.CacheDynamicGeometry(finalOffset, dynamicBuffer);
layout.CacheStaticGeometry(color, outline, staticBuffer);
- auto state = CreateGLState(gpu::TEXT_OUTLINED_PROGRAM, m_params.m_depthLayer);
- state.SetProgram3dIndex(gpu::TEXT_OUTLINED_BILLBOARD_PROGRAM);
+ auto state = CreateGLState(gpu::Program::TextOutlined, m_params.m_depthLayer);
+ state.SetProgram3d(gpu::Program::TextOutlinedBillboard);
ASSERT(color.GetTexture() == outline.GetTexture(), ());
state.SetColorTexture(color.GetTexture());
state.SetMaskTexture(layout.GetMaskTexture());
diff --git a/drape_frontend/traffic_generator.cpp b/drape_frontend/traffic_generator.cpp
index 8ab7b3a372..0f44da5a76 100644
--- a/drape_frontend/traffic_generator.cpp
+++ b/drape_frontend/traffic_generator.cpp
@@ -2,12 +2,13 @@
#include "drape_frontend/line_shape_helper.hpp"
#include "drape_frontend/map_shape.hpp"
-#include "drape_frontend/shader_def.hpp"
#include "drape_frontend/shape_view_params.hpp"
#include "drape_frontend/tile_utils.hpp"
#include "drape_frontend/traffic_renderer.hpp"
#include "drape_frontend/visual_params.hpp"
+#include "shaders/programs.hpp"
+
#include "drape/attribute_provider.hpp"
#include "drape/glsl_func.hpp"
#include "drape/texture_manager.hpp"
@@ -16,9 +17,7 @@
#include "base/logging.hpp"
-#include "std/algorithm.hpp"
-
-#include <functional>
+#include <algorithm>
using namespace std::placeholders;
@@ -27,7 +26,7 @@ namespace df
namespace
{
// Values of the following arrays are based on traffic-arrow texture.
-static array<float, static_cast<size_t>(traffic::SpeedGroup::Count)> kCoordVOffsets =
+static std::array<float, static_cast<size_t>(traffic::SpeedGroup::Count)> kCoordVOffsets =
{{
0.75f, // G0
0.75f, // G1
@@ -39,7 +38,7 @@ static array<float, static_cast<size_t>(traffic::SpeedGroup::Count)> kCoordVOffs
0.0f, // Unknown
}};
-static array<float, static_cast<size_t>(traffic::SpeedGroup::Count)> kMinCoordU =
+static std::array<float, static_cast<size_t>(traffic::SpeedGroup::Count)> kMinCoordU =
{{
0.15f, // G0
0.15f, // G1
@@ -60,7 +59,7 @@ dp::BindingInfo const & GetTrafficStaticBindingInfo()
filler.FillDecl<TrafficStaticVertex::TPosition>("a_position");
filler.FillDecl<TrafficStaticVertex::TNormal>("a_normal");
filler.FillDecl<TrafficStaticVertex::TTexCoord>("a_colorTexCoord");
- s_info.reset(new dp::BindingInfo(filler.m_info));
+ s_info = std::make_unique<dp::BindingInfo>(filler.m_info);
}
return *s_info;
}
@@ -73,21 +72,21 @@ dp::BindingInfo const & GetTrafficLineStaticBindingInfo()
dp::BindingFiller<TrafficLineStaticVertex> filler(2);
filler.FillDecl<TrafficLineStaticVertex::TPosition>("a_position");
filler.FillDecl<TrafficLineStaticVertex::TTexCoord>("a_colorTexCoord");
- s_info.reset(new dp::BindingInfo(filler.m_info));
+ s_info = std::make_unique<dp::BindingInfo>(filler.m_info);
}
return *s_info;
}
void SubmitStaticVertex(glsl::vec3 const & pivot, glsl::vec2 const & normal, float side,
float offsetFromStart, glsl::vec4 const & texCoord,
- vector<TrafficStaticVertex> & staticGeom)
+ std::vector<TrafficStaticVertex> & staticGeom)
{
staticGeom.emplace_back(pivot, TrafficStaticVertex::TNormal(normal, side, offsetFromStart), texCoord);
}
-void GenerateCapTriangles(glsl::vec3 const & pivot, vector<glsl::vec2> const & normals,
+void GenerateCapTriangles(glsl::vec3 const & pivot, std::vector<glsl::vec2> const & normals,
dp::TextureManager::ColorRegion const & colorRegion,
- vector<TrafficStaticVertex> & staticGeometry)
+ std::vector<TrafficStaticVertex> & staticGeometry)
{
float const kEps = 1e-5;
glsl::vec4 const uv = glsl::vec4(glsl::ToVec2(colorRegion.GetTexRect().Center()), 0.0f, 0.0f);
@@ -102,8 +101,7 @@ void GenerateCapTriangles(glsl::vec3 const & pivot, vector<glsl::vec2> const & n
glsl::length(normals[3 * j + 2]) < kEps ? 0.0f : 1.0f, 0.0f, uv, staticGeometry);
}
}
-
-} // namespace
+} // namespace
bool TrafficGenerator::m_simplifiedColorScheme = true;
@@ -132,18 +130,18 @@ void TrafficGenerator::FlushSegmentsGeometry(TileKey const & tileKey, TrafficSeg
ASSERT(m_colorsCacheValid, ());
auto const texture = m_colorsCache[static_cast<size_t>(traffic::SpeedGroup::G0)].GetTexture();
- auto state = CreateGLState(gpu::TRAFFIC_PROGRAM, RenderState::GeometryLayer);
+ auto state = CreateGLState(gpu::Program::Traffic, RenderState::GeometryLayer);
state.SetColorTexture(texture);
state.SetMaskTexture(textures->GetTrafficArrowTexture());
- auto lineState = CreateGLState(gpu::TRAFFIC_LINE_PROGRAM, RenderState::GeometryLayer);
+ auto lineState = CreateGLState(gpu::Program::TrafficLine, RenderState::GeometryLayer);
lineState.SetColorTexture(texture);
lineState.SetDrawAsLine(true);
- static vector<RoadClass> const kRoadClasses = {RoadClass::Class0, RoadClass::Class1,
- RoadClass::Class2};
+ static std::vector<RoadClass> const kRoadClasses = {RoadClass::Class0, RoadClass::Class1,
+ RoadClass::Class2};
static float const kDepths[] = {2.0f, 1.0f, 0.0f};
- static vector<int> const kGenerateCapsZoomLevel = {14, 14, 16};
+ static std::vector<int> const kGenerateCapsZoomLevel = {14, 14, 16};
for (auto geomIt = geom.begin(); geomIt != geom.end(); ++geomIt)
{
@@ -179,7 +177,7 @@ void TrafficGenerator::FlushSegmentsGeometry(TileKey const & tileKey, TrafficSeg
int width = 0;
if (TrafficRenderer::CanBeRenderedAsLine(g.m_roadClass, tileKey.m_zoomLevel, width))
{
- vector<TrafficLineStaticVertex> staticGeometry;
+ std::vector<TrafficLineStaticVertex> staticGeometry;
GenerateLineSegment(colorRegion, g.m_polyline, tileKey.GetGlobalRect().Center(), depth,
staticGeometry);
if (staticGeometry.empty())
@@ -194,7 +192,7 @@ void TrafficGenerator::FlushSegmentsGeometry(TileKey const & tileKey, TrafficSeg
}
else
{
- vector<TrafficStaticVertex> staticGeometry;
+ std::vector<TrafficStaticVertex> staticGeometry;
bool const generateCaps =
(tileKey.m_zoomLevel > kGenerateCapsZoomLevel[static_cast<uint32_t>(g.m_roadClass)]);
GenerateSegment(colorRegion, g.m_polyline, tileKey.GetGlobalRect().Center(),
@@ -243,19 +241,19 @@ void TrafficGenerator::FlushGeometry(TrafficBatcherKey const & key, dp::GLState
drape_ptr<dp::RenderBucket> && buffer)
{
TrafficRenderData renderData(state);
- renderData.m_bucket = move(buffer);
+ renderData.m_bucket = std::move(buffer);
renderData.m_mwmId = key.m_mwmId;
renderData.m_tileKey = key.m_tileKey;
renderData.m_roadClass = key.m_roadClass;
- m_flushRenderDataFn(move(renderData));
+ m_flushRenderDataFn(std::move(renderData));
}
void TrafficGenerator::GenerateSegment(dp::TextureManager::ColorRegion const & colorRegion,
m2::PolylineD const & polyline, m2::PointD const & tileCenter,
bool generateCaps, float depth, float vOffset, float minU,
- vector<TrafficStaticVertex> & staticGeometry)
+ std::vector<TrafficStaticVertex> & staticGeometry)
{
- vector<m2::PointD> const & path = polyline.GetPoints();
+ auto const & path = polyline.GetPoints();
ASSERT_GREATER(path.size(), 1, ());
size_t const kAverageSize = path.size() * 4;
@@ -308,7 +306,7 @@ void TrafficGenerator::GenerateSegment(dp::TextureManager::ColorRegion const & c
if (generateCaps && firstFilled)
{
int const kSegmentsCount = 4;
- vector<glsl::vec2> normals;
+ std::vector<glsl::vec2> normals;
normals.reserve(kAverageCapSize);
GenerateCapNormals(dp::RoundCap, firstLeftNormal, firstRightNormal, -firstTangent,
1.0f, true /* isStart */, normals, kSegmentsCount);
@@ -323,9 +321,9 @@ void TrafficGenerator::GenerateSegment(dp::TextureManager::ColorRegion const & c
void TrafficGenerator::GenerateLineSegment(dp::TextureManager::ColorRegion const & colorRegion,
m2::PolylineD const & polyline, m2::PointD const & tileCenter,
- float depth, vector<TrafficLineStaticVertex> & staticGeometry)
+ float depth, std::vector<TrafficLineStaticVertex> & staticGeometry)
{
- vector<m2::PointD> const & path = polyline.GetPoints();
+ auto const & path = polyline.GetPoints();
ASSERT_GREATER(path.size(), 1, ());
size_t const kAverageSize = path.size();
@@ -358,8 +356,8 @@ traffic::SpeedGroup TrafficGenerator::CheckColorsSimplification(traffic::SpeedGr
// static
df::ColorConstant TrafficGenerator::GetColorBySpeedGroup(traffic::SpeedGroup speedGroup, bool route)
{
- size_t constexpr kSpeedGroupsCount = static_cast<size_t>(traffic::SpeedGroup::Count);
- static array<df::ColorConstant, kSpeedGroupsCount> const kColorMap
+ auto constexpr kSpeedGroupsCount = static_cast<size_t>(traffic::SpeedGroup::Count);
+ static std::array<df::ColorConstant, kSpeedGroupsCount> const kColorMap
{{
"TrafficG0",
"TrafficG1",
@@ -371,7 +369,7 @@ df::ColorConstant TrafficGenerator::GetColorBySpeedGroup(traffic::SpeedGroup spe
"TrafficUnknown",
}};
- static array<df::ColorConstant, kSpeedGroupsCount> const kColorMapRoute
+ static std::array<df::ColorConstant, kSpeedGroupsCount> const kColorMapRoute
{{
"RouteTrafficG0",
"RouteTrafficG1",
@@ -383,14 +381,14 @@ df::ColorConstant TrafficGenerator::GetColorBySpeedGroup(traffic::SpeedGroup spe
"TrafficUnknown",
}};
- size_t const index = static_cast<size_t>(CheckColorsSimplification(speedGroup));
+ auto const index = static_cast<size_t>(CheckColorsSimplification(speedGroup));
ASSERT_LESS(index, kSpeedGroupsCount, ());
return route ? kColorMapRoute[index] : kColorMap[index];
}
void TrafficGenerator::FillColorsCache(ref_ptr<dp::TextureManager> textures)
{
- size_t constexpr kSpeedGroupsCount = static_cast<size_t>(traffic::SpeedGroup::Count);
+ auto constexpr kSpeedGroupsCount = static_cast<size_t>(traffic::SpeedGroup::Count);
if (!m_colorsCacheValid)
{
for (size_t i = 0; i < kSpeedGroupsCount; i++)
@@ -403,5 +401,4 @@ void TrafficGenerator::FillColorsCache(ref_ptr<dp::TextureManager> textures)
m_colorsCacheValid = true;
}
}
-
-} // namespace df
+} // namespace df
diff --git a/drape_frontend/traffic_generator.hpp b/drape_frontend/traffic_generator.hpp
index fd4ee9109c..4f10d6f37e 100644
--- a/drape_frontend/traffic_generator.hpp
+++ b/drape_frontend/traffic_generator.hpp
@@ -16,16 +16,14 @@
#include "geometry/polyline2d.hpp"
-#include "std/array.hpp"
-#include "std/map.hpp"
-#include "std/set.hpp"
-#include "std/string.hpp"
-#include "std/vector.hpp"
-#include "std/unordered_map.hpp"
+#include <array>
+#include <functional>
+#include <map>
+#include <unordered_map>
+#include <vector>
namespace df
{
-
enum class RoadClass : uint8_t
{
Class0,
@@ -74,9 +72,9 @@ struct TrafficSegmentGeometry
{}
};
-using TrafficSegmentsGeometry = map<MwmSet::MwmId, vector<pair<traffic::TrafficInfo::RoadSegmentId,
- TrafficSegmentGeometry>>>;
-using TrafficSegmentsColoring = map<MwmSet::MwmId, traffic::TrafficInfo::Coloring>;
+using TrafficSegmentsGeometry = std::map<MwmSet::MwmId, std::vector<std::pair<traffic::TrafficInfo::RoadSegmentId,
+ TrafficSegmentGeometry>>>;
+using TrafficSegmentsColoring = std::map<MwmSet::MwmId, traffic::TrafficInfo::Coloring>;
struct TrafficRenderData
{
@@ -86,7 +84,7 @@ struct TrafficRenderData
MwmSet::MwmId m_mwmId;
RoadClass m_roadClass;
- TrafficRenderData(dp::GLState const & state) : m_state(state) {}
+ explicit TrafficRenderData(dp::GLState const & state) : m_state(state) {}
};
struct TrafficStaticVertex
@@ -123,15 +121,15 @@ struct TrafficLineStaticVertex
TTexCoord m_colorTexCoord;
};
-using TrafficTexCoords = unordered_map<size_t, glsl::vec2>;
+using TrafficTexCoords = std::unordered_map<size_t, glsl::vec2>;
class TrafficGenerator final
{
public:
- using TFlushRenderDataFn = function<void (TrafficRenderData && renderData)>;
+ using TFlushRenderDataFn = std::function<void (TrafficRenderData && renderData)>;
explicit TrafficGenerator(TFlushRenderDataFn flushFn)
- : m_flushRenderDataFn(flushFn)
+ : m_flushRenderDataFn(std::move(flushFn))
, m_providerTriangles(1 /* stream count */, 0 /* vertices count*/)
, m_providerLines(1 /* stream count */, 0 /* vertices count*/)
{}
@@ -183,10 +181,10 @@ private:
void GenerateSegment(dp::TextureManager::ColorRegion const & colorRegion,
m2::PolylineD const & polyline, m2::PointD const & tileCenter,
bool generateCaps, float depth, float vOffset, float minU,
- vector<TrafficStaticVertex> & staticGeometry);
+ std::vector<TrafficStaticVertex> & staticGeometry);
void GenerateLineSegment(dp::TextureManager::ColorRegion const & colorRegion,
m2::PolylineD const & polyline, m2::PointD const & tileCenter, float depth,
- vector<TrafficLineStaticVertex> & staticGeometry);
+ std::vector<TrafficLineStaticVertex> & staticGeometry);
void FillColorsCache(ref_ptr<dp::TextureManager> textures);
void FlushGeometry(TrafficBatcherKey const & key, dp::GLState const & state,
@@ -194,7 +192,7 @@ private:
TrafficSegmentsColoring m_coloring;
- array<dp::TextureManager::ColorRegion, static_cast<size_t>(traffic::SpeedGroup::Count)> m_colorsCache;
+ std::array<dp::TextureManager::ColorRegion, static_cast<size_t>(traffic::SpeedGroup::Count)> m_colorsCache;
bool m_colorsCacheValid = false;
drape_ptr<BatchersPool<TrafficBatcherKey, TrafficBatcherKeyComparator>> m_batchersPool;
@@ -205,5 +203,4 @@ private:
static bool m_simplifiedColorScheme;
};
-
-} // namespace df
+} // namespace df
diff --git a/drape_frontend/traffic_renderer.cpp b/drape_frontend/traffic_renderer.cpp
index 9f865f2e0c..0f228871df 100644
--- a/drape_frontend/traffic_renderer.cpp
+++ b/drape_frontend/traffic_renderer.cpp
@@ -1,8 +1,9 @@
#include "drape_frontend/traffic_renderer.hpp"
#include "drape_frontend/color_constants.hpp"
-#include "drape_frontend/shader_def.hpp"
#include "drape_frontend/visual_params.hpp"
+#include "shaders/programs.hpp"
+
#include "drape/glsl_func.hpp"
#include "drape/support_manager.hpp"
#include "drape/vertex_array_buffer.hpp"
@@ -90,7 +91,7 @@ float CalculateHalfWidth(ScreenBase const & screen, RoadClass const & roadClass,
}
} // namespace
-void TrafficRenderer::AddRenderData(ref_ptr<dp::GpuProgramManager> mng, TrafficRenderData && renderData)
+void TrafficRenderer::AddRenderData(ref_ptr<gpu::ProgramManager> mng, TrafficRenderData && renderData)
{
// Remove obsolete render data.
TileKey const tileKey(renderData.m_tileKey);
@@ -103,7 +104,7 @@ void TrafficRenderer::AddRenderData(ref_ptr<dp::GpuProgramManager> mng, TrafficR
m_renderData.emplace_back(move(renderData));
TrafficRenderData & rd = m_renderData.back();
- ref_ptr<dp::GpuProgram> program = mng->GetProgram(rd.m_state.GetProgramIndex());
+ auto program = mng->GetProgram(rd.m_state.GetProgram<gpu::Program>());
program->Bind();
rd.m_bucket->GetBuffer()->Build(program);
}
@@ -131,7 +132,7 @@ void TrafficRenderer::OnGeometryReady(int currentZoomLevel)
}
void TrafficRenderer::RenderTraffic(ScreenBase const & screen, int zoomLevel, float opacity,
- ref_ptr<dp::GpuProgramManager> mng,
+ ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms)
{
if (m_renderData.empty() || zoomLevel < kRoadClass0ZoomLevel)
@@ -145,13 +146,13 @@ void TrafficRenderer::RenderTraffic(ScreenBase const & screen, int zoomLevel, fl
{
if (renderData.m_state.GetDrawAsLine())
{
- ref_ptr<dp::GpuProgram> program = mng->GetProgram(renderData.m_state.GetProgramIndex());
+ auto program = mng->GetProgram(renderData.m_state.GetProgram<gpu::Program>());
program->Bind();
dp::ApplyState(renderData.m_state, program);
dp::UniformValuesStorage uniforms = commonUniforms;
math::Matrix<float, 4, 4> const mv = renderData.m_tileKey.GetTileBasedModelView(screen);
- uniforms.SetMatrix4x4Value("modelView", mv.m_data);
+ uniforms.SetMatrix4x4Value("u_modelView", mv.m_data);
uniforms.SetFloatValue("u_opacity", opacity);
dp::ApplyUniforms(uniforms, program);
@@ -190,13 +191,13 @@ void TrafficRenderer::RenderTraffic(ScreenBase const & screen, int zoomLevel, fl
if (fabs(leftPixelHalfWidth) < kEps && fabs(rightPixelHalfWidth) < kEps)
continue;
- ref_ptr<dp::GpuProgram> program = mng->GetProgram(renderData.m_state.GetProgramIndex());
+ ref_ptr<dp::GpuProgram> program = mng->GetProgram(renderData.m_state.GetProgram<gpu::Program>());
program->Bind();
dp::ApplyState(renderData.m_state, program);
dp::UniformValuesStorage uniforms = commonUniforms;
math::Matrix<float, 4, 4> const mv = renderData.m_tileKey.GetTileBasedModelView(screen);
- uniforms.SetMatrix4x4Value("modelView", mv.m_data);
+ uniforms.SetMatrix4x4Value("u_modelView", mv.m_data);
uniforms.SetFloatValue("u_opacity", opacity);
uniforms.SetFloatValue("u_outline", outline);
uniforms.SetFloatValue("u_lightArrowColor", lightArrowColor.GetRedF(),
diff --git a/drape_frontend/traffic_renderer.hpp b/drape_frontend/traffic_renderer.hpp
index 16eb4a8377..08e200bb84 100644
--- a/drape_frontend/traffic_renderer.hpp
+++ b/drape_frontend/traffic_renderer.hpp
@@ -3,7 +3,8 @@
#include "drape_frontend/traffic_generator.hpp"
#include "drape_frontend/tile_utils.hpp"
-#include "drape/gpu_program_manager.hpp"
+#include "shaders/program_manager.hpp"
+
#include "drape/pointers.hpp"
#include "drape/uniform_values_storage.hpp"
@@ -19,11 +20,11 @@ class TrafficRenderer final
public:
TrafficRenderer() = default;
- void AddRenderData(ref_ptr<dp::GpuProgramManager> mng,
+ void AddRenderData(ref_ptr<gpu::ProgramManager> mng,
TrafficRenderData && renderData);
void RenderTraffic(ScreenBase const & screen, int zoomLevel, float opacity,
- ref_ptr<dp::GpuProgramManager> mng,
+ ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms);
bool HasRenderData() const { return !m_renderData.empty(); }
diff --git a/drape_frontend/transit_scheme_builder.cpp b/drape_frontend/transit_scheme_builder.cpp
index 19d71f05e5..f32e9bc057 100644
--- a/drape_frontend/transit_scheme_builder.cpp
+++ b/drape_frontend/transit_scheme_builder.cpp
@@ -5,12 +5,13 @@
#include "drape_frontend/line_shape_helper.hpp"
#include "drape_frontend/map_shape.hpp"
#include "drape_frontend/render_state.hpp"
-#include "drape_frontend/shader_def.hpp"
#include "drape_frontend/shape_view_params.hpp"
#include "drape_frontend/text_layout.hpp"
#include "drape_frontend/text_shape.hpp"
#include "drape_frontend/visual_params.hpp"
+#include "shaders/programs.hpp"
+
#include "drape/batcher.hpp"
#include "drape/glsl_func.hpp"
#include "drape/glsl_types.hpp"
@@ -21,8 +22,6 @@
using namespace std;
-#define TRANSIT_SCHEME_DEBUG_INFO
-
namespace df
{
std::vector<float> const kTransitLinesWidthInPixel =
@@ -574,9 +573,9 @@ void TransitSchemeBuilder::GenerateStops(MwmSet::MwmId const & mwmId, ref_ptr<dp
auto const flusher = [this, &mwmId, &scheme](dp::GLState const & state, drape_ptr<dp::RenderBucket> && b)
{
TransitRenderData renderData(state, m_recacheId, mwmId, scheme.m_pivot, std::move(b));
- if (state.GetProgramIndex() == gpu::TRANSIT_MARKER_PROGRAM)
+ if (state.GetProgram<gpu::Program>() == gpu::Program::TransitMarker)
m_flushMarkersRenderDataFn(std::move(renderData));
- else if (state.GetProgramIndex() == gpu::TEXT_OUTLINED_PROGRAM)
+ else if (state.GetProgram<gpu::Program>() == gpu::Program::TextOutlined)
m_flushTextRenderDataFn(std::move(renderData));
else
m_flushStubsRenderDataFn(std::move(renderData));
@@ -756,7 +755,7 @@ void TransitSchemeBuilder::GenerateMarker(m2::PointD const & pt, m2::PointD widt
dp::AttributeProvider provider(1 /* stream count */, static_cast<uint32_t>(geometry.size()));
provider.InitStream(0 /* stream index */, GetTransitStaticBindingInfo(), make_ref(geometry.data()));
- auto state = CreateGLState(gpu::TRANSIT_MARKER_PROGRAM, RenderState::TransitSchemeLayer);
+ auto state = CreateGLState(gpu::Program::TransitMarker, RenderState::TransitSchemeLayer);
batcher.InsertTriangleList(state, make_ref(&provider));
}
@@ -811,7 +810,7 @@ void TransitSchemeBuilder::GenerateLine(std::vector<m2::PointD> const & path, m2
dp::AttributeProvider provider(1 /* stream count */, static_cast<uint32_t>(geometry.size()));
provider.InitStream(0 /* stream index */, GetTransitStaticBindingInfo(), make_ref(geometry.data()));
- auto state = CreateGLState(gpu::TRANSIT_PROGRAM, RenderState::TransitSchemeLayer);
+ auto state = CreateGLState(gpu::Program::Transit, RenderState::TransitSchemeLayer);
batcher.InsertTriangleList(state, make_ref(&provider));
}
} // namespace df
diff --git a/drape_frontend/transit_scheme_renderer.cpp b/drape_frontend/transit_scheme_renderer.cpp
index 88f80c539a..10931d7c4e 100644
--- a/drape_frontend/transit_scheme_renderer.cpp
+++ b/drape_frontend/transit_scheme_renderer.cpp
@@ -1,10 +1,11 @@
#include "drape_frontend/transit_scheme_renderer.hpp"
#include "drape_frontend/postprocess_renderer.hpp"
-#include "drape_frontend/shader_def.hpp"
#include "drape_frontend/shape_view_params.hpp"
#include "drape_frontend/visual_params.hpp"
+#include "shaders/programs.hpp"
+
#include "drape/overlay_tree.hpp"
#include "drape/vertex_array_buffer.hpp"
@@ -76,31 +77,31 @@ void TransitSchemeRenderer::ClearRenderData(TRemovePredicate const & predicate,
renderData.end());
}
-void TransitSchemeRenderer::AddRenderData(ref_ptr<dp::GpuProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
+void TransitSchemeRenderer::AddRenderData(ref_ptr<gpu::ProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
TransitRenderData && renderData)
{
PrepareRenderData(mng, tree, m_renderData, std::move(renderData));
}
-void TransitSchemeRenderer::AddMarkersRenderData(ref_ptr<dp::GpuProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
+void TransitSchemeRenderer::AddMarkersRenderData(ref_ptr<gpu::ProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
TransitRenderData && renderData)
{
PrepareRenderData(mng, tree, m_markersRenderData, std::move(renderData));
}
-void TransitSchemeRenderer::AddTextRenderData(ref_ptr<dp::GpuProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
+void TransitSchemeRenderer::AddTextRenderData(ref_ptr<gpu::ProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
TransitRenderData && renderData)
{
PrepareRenderData(mng, tree, m_textRenderData, std::move(renderData));
}
-void TransitSchemeRenderer::AddStubsRenderData(ref_ptr<dp::GpuProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
+void TransitSchemeRenderer::AddStubsRenderData(ref_ptr<gpu::ProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
TransitRenderData && renderData)
{
PrepareRenderData(mng, tree, m_colorSymbolRenderData, std::move(renderData));
}
-void TransitSchemeRenderer::PrepareRenderData(ref_ptr<dp::GpuProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
+void TransitSchemeRenderer::PrepareRenderData(ref_ptr<gpu::ProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
std::vector<TransitRenderData> & currentRenderData,
TransitRenderData && newRenderData)
{
@@ -114,7 +115,7 @@ void TransitSchemeRenderer::PrepareRenderData(ref_ptr<dp::GpuProgramManager> mng
m_lastRecacheId = max(m_lastRecacheId, newRenderData.m_recacheId);
// Add new render data.
- ref_ptr<dp::GpuProgram> program = mng->GetProgram(newRenderData.m_state.GetProgramIndex());
+ auto program = mng->GetProgram(newRenderData.m_state.GetProgram<gpu::Program>());
program->Bind();
newRenderData.m_bucket->GetBuffer()->Build(program);
@@ -122,7 +123,7 @@ void TransitSchemeRenderer::PrepareRenderData(ref_ptr<dp::GpuProgramManager> mng
}
void TransitSchemeRenderer::RenderTransit(ScreenBase const & screen, int zoomLevel,
- ref_ptr<dp::GpuProgramManager> mng,
+ ref_ptr<gpu::ProgramManager> mng,
ref_ptr<PostprocessRenderer> postprocessRenderer,
dp::UniformValuesStorage const & commonUniforms)
{
@@ -164,19 +165,19 @@ void TransitSchemeRenderer::RemoveOverlays(ref_ptr<dp::OverlayTree> tree, std::v
data.m_bucket->RemoveOverlayHandles(tree);
}
-void TransitSchemeRenderer::RenderLines(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> mng,
+void TransitSchemeRenderer::RenderLines(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms, float pixelHalfWidth)
{
GLFunctions::glDisable(gl_const::GLDepthTest);
for (auto & renderData : m_renderData)
{
- ref_ptr<dp::GpuProgram> program = mng->GetProgram(renderData.m_state.GetProgramIndex());
+ ref_ptr<dp::GpuProgram> program = mng->GetProgram(renderData.m_state.GetProgram<gpu::Program>());
program->Bind();
dp::ApplyState(renderData.m_state, program);
dp::UniformValuesStorage uniforms = commonUniforms;
math::Matrix<float, 4, 4> mv = screen.GetModelView(renderData.m_pivot, kShapeCoordScalar);
- uniforms.SetMatrix4x4Value("modelView", mv.m_data);
+ uniforms.SetMatrix4x4Value("u_modelView", mv.m_data);
uniforms.SetFloatValue("u_lineHalfWidth", pixelHalfWidth);
dp::ApplyUniforms(uniforms, program);
@@ -185,19 +186,19 @@ void TransitSchemeRenderer::RenderLines(ScreenBase const & screen, ref_ptr<dp::G
}
}
-void TransitSchemeRenderer::RenderMarkers(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> mng,
+void TransitSchemeRenderer::RenderMarkers(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms, float pixelHalfWidth)
{
GLFunctions::glEnable(gl_const::GLDepthTest);
for (auto & renderData : m_markersRenderData)
{
- ref_ptr<dp::GpuProgram> program = mng->GetProgram(renderData.m_state.GetProgramIndex());
+ auto program = mng->GetProgram(renderData.m_state.GetProgram<gpu::Program>());
program->Bind();
dp::ApplyState(renderData.m_state, program);
dp::UniformValuesStorage uniforms = commonUniforms;
math::Matrix<float, 4, 4> mv = screen.GetModelView(renderData.m_pivot, kShapeCoordScalar);
- uniforms.SetMatrix4x4Value("modelView", mv.m_data);
+ uniforms.SetMatrix4x4Value("u_modelView", mv.m_data);
uniforms.SetFloatValue("u_params",
static_cast<float>(cos(screen.GetAngle())),
static_cast<float>(sin(screen.GetAngle())),
@@ -208,19 +209,19 @@ void TransitSchemeRenderer::RenderMarkers(ScreenBase const & screen, ref_ptr<dp:
}
}
-void TransitSchemeRenderer::RenderText(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> mng,
+void TransitSchemeRenderer::RenderText(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms)
{
auto const & params = df::VisualParams::Instance().GetGlyphVisualParams();
for (auto & renderData : m_textRenderData)
{
- ref_ptr<dp::GpuProgram> program = mng->GetProgram(renderData.m_state.GetProgramIndex());
+ ref_ptr<dp::GpuProgram> program = mng->GetProgram(renderData.m_state.GetProgram<gpu::Program>());
program->Bind();
dp::ApplyState(renderData.m_state, program);
dp::UniformValuesStorage uniforms = commonUniforms;
math::Matrix<float, 4, 4> mv = screen.GetModelView(renderData.m_pivot, kShapeCoordScalar);
- uniforms.SetMatrix4x4Value("modelView", mv.m_data);
+ uniforms.SetMatrix4x4Value("u_modelView", mv.m_data);
uniforms.SetFloatValue("u_opacity", 1.0);
uniforms.SetFloatValue("u_contrastGamma", params.m_outlineContrast, params.m_outlineGamma);
@@ -239,18 +240,18 @@ void TransitSchemeRenderer::RenderText(ScreenBase const & screen, ref_ptr<dp::Gp
}
}
-void TransitSchemeRenderer::RenderStubs(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> mng,
+void TransitSchemeRenderer::RenderStubs(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms)
{
for (auto & renderData : m_colorSymbolRenderData)
{
- ref_ptr<dp::GpuProgram> program = mng->GetProgram(renderData.m_state.GetProgramIndex());
+ auto program = mng->GetProgram(renderData.m_state.GetProgram<gpu::Program>());
program->Bind();
dp::ApplyState(renderData.m_state, program);
dp::UniformValuesStorage uniforms = commonUniforms;
math::Matrix<float, 4, 4> mv = screen.GetModelView(renderData.m_pivot, kShapeCoordScalar);
- uniforms.SetMatrix4x4Value("modelView", mv.m_data);
+ uniforms.SetMatrix4x4Value("u_modelView", mv.m_data);
uniforms.SetFloatValue("u_opacity", 1.0);
dp::ApplyUniforms(uniforms, program);
diff --git a/drape_frontend/transit_scheme_renderer.hpp b/drape_frontend/transit_scheme_renderer.hpp
index 345427b02e..556a3333f7 100644
--- a/drape_frontend/transit_scheme_renderer.hpp
+++ b/drape_frontend/transit_scheme_renderer.hpp
@@ -2,7 +2,8 @@
#include "drape_frontend/transit_scheme_builder.hpp"
-#include "drape/gpu_program_manager.hpp"
+#include "shaders/program_manager.hpp"
+
#include "drape/pointers.hpp"
#include "drape/uniform_values_storage.hpp"
@@ -18,19 +19,19 @@ class OverlayTree;
class TransitSchemeRenderer
{
public:
- void AddRenderData(ref_ptr<dp::GpuProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
+ void AddRenderData(ref_ptr<gpu::ProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
TransitRenderData && renderData);
- void AddMarkersRenderData(ref_ptr<dp::GpuProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
+ void AddMarkersRenderData(ref_ptr<gpu::ProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
TransitRenderData && renderData);
- void AddTextRenderData(ref_ptr<dp::GpuProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
+ void AddTextRenderData(ref_ptr<gpu::ProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
TransitRenderData && renderData);
- void AddStubsRenderData(ref_ptr<dp::GpuProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
+ void AddStubsRenderData(ref_ptr<gpu::ProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
TransitRenderData && renderData);
bool HasRenderData(int zoomLevel) const;
void RenderTransit(ScreenBase const & screen, int zoomLevel,
- ref_ptr<dp::GpuProgramManager> mng,
+ ref_ptr<gpu::ProgramManager> mng,
ref_ptr<PostprocessRenderer> postprocessRenderer,
dp::UniformValuesStorage const & commonUniforms);
@@ -42,7 +43,7 @@ public:
void Clear(MwmSet::MwmId const & mwmId, ref_ptr<dp::OverlayTree> tree);
private:
- void PrepareRenderData(ref_ptr<dp::GpuProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
+ void PrepareRenderData(ref_ptr<gpu::ProgramManager> mng, ref_ptr<dp::OverlayTree> tree,
std::vector<TransitRenderData> & currentRenderData,
TransitRenderData && newRenderData);
void ClearRenderData(MwmSet::MwmId const & mwmId, ref_ptr<dp::OverlayTree> tree,
@@ -56,13 +57,13 @@ private:
void CollectOverlays(ref_ptr<dp::OverlayTree> tree, ScreenBase const & modelView,
std::vector<TransitRenderData> & renderData);
- void RenderLines(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> mng,
+ void RenderLines(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms, float pixelHalfWidth);
- void RenderMarkers(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> mng,
+ void RenderMarkers(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms, float pixelHalfWidth);
- void RenderText(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> mng,
+ void RenderText(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms);
- void RenderStubs(ScreenBase const & screen, ref_ptr<dp::GpuProgramManager> mng,
+ void RenderStubs(ScreenBase const & screen, ref_ptr<gpu::ProgramManager> mng,
dp::UniformValuesStorage const & commonUniforms);
uint32_t m_lastRecacheId = 0;
diff --git a/drape_frontend/user_mark_shapes.cpp b/drape_frontend/user_mark_shapes.cpp
index 040b3306e8..044ad63bb4 100644
--- a/drape_frontend/user_mark_shapes.cpp
+++ b/drape_frontend/user_mark_shapes.cpp
@@ -4,12 +4,13 @@
#include "drape_frontend/line_shape.hpp"
#include "drape_frontend/map_shape.hpp"
#include "drape_frontend/poi_symbol_shape.hpp"
-#include "drape_frontend/shader_def.hpp"
#include "drape_frontend/shape_view_params.hpp"
#include "drape_frontend/text_shape.hpp"
#include "drape_frontend/tile_utils.hpp"
#include "drape_frontend/visual_params.hpp"
+#include "shaders/programs.hpp"
+
#include "drape/utils/vertex_decl.hpp"
#include "drape/attribute_provider.hpp"
#include "drape/batcher.hpp"
@@ -403,10 +404,10 @@ void CacheUserMarks(TileKey const & tileKey, ref_ptr<dp::TextureManager> texture
if (!buffer.empty())
{
- auto state = CreateGLState(isAnimated ? gpu::BOOKMARK_ANIM_PROGRAM
- : gpu::BOOKMARK_PROGRAM, depthLayer);
- state.SetProgram3dIndex(isAnimated ? gpu::BOOKMARK_ANIM_BILLBOARD_PROGRAM
- : gpu::BOOKMARK_BILLBOARD_PROGRAM);
+ auto state = CreateGLState(isAnimated ? gpu::Program::BookmarkAnim
+ : gpu::Program::Bookmark, depthLayer);
+ state.SetProgram3d(isAnimated ? gpu::Program::BookmarkAnimBillboard
+ : gpu::Program::BookmarkBillboard);
state.SetColorTexture(region.GetTexture());
state.SetTextureFilter(gl_const::GLNearest);
diff --git a/qt_tstfrm/test_main_loop.cpp b/qt_tstfrm/test_main_loop.cpp
index 961a4fff7a..2360cd1221 100644
--- a/qt_tstfrm/test_main_loop.cpp
+++ b/qt_tstfrm/test_main_loop.cpp
@@ -10,6 +10,7 @@
#include <cstring>
#include <memory>
+#include <vector>
namespace
{
@@ -33,32 +34,31 @@ private:
void RunTestLoop(char const * testName, RenderFunction && fn, bool autoExit)
{
- auto buf = new char[strlen(testName) + 1];
- MY_SCOPE_GUARD(argvFreeFun, [&buf](){ delete [] buf; });
- strcpy(buf, testName);
+ std::vector<char> buf(strlen(testName) + 1);
+ strcpy(buf.data(), testName);
+ char * raw = buf.data();
int argc = 1;
- QApplication app(argc, &buf);
+ QApplication app(argc, &raw);
if (autoExit)
QTimer::singleShot(3000, &app, SLOT(quit()));
- auto widget = new MyWidget(std::move(fn));
+ auto widget = std::make_unique<MyWidget>(std::move(fn));
widget->setWindowTitle(testName);
widget->show();
app.exec();
- delete widget;
}
void RunTestInOpenGLOffscreenEnvironment(char const * testName, bool apiOpenGLES3,
TestFunction const & fn)
{
- auto buf = new char[strlen(testName) + 1];
- MY_SCOPE_GUARD(argvFreeFun, [&buf](){ delete [] buf; });
- strcpy(buf, testName);
+ std::vector<char> buf(strlen(testName) + 1);
+ strcpy(buf.data(), testName);
+ char * raw = buf.data();
int argc = 1;
- QApplication app(argc, &buf);
+ QApplication app(argc, &raw);
QSurfaceFormat fmt;
fmt.setAlphaBufferSize(8);
diff --git a/shaders/CMakeLists.txt b/shaders/CMakeLists.txt
index 58523e11e4..da41002904 100644
--- a/shaders/CMakeLists.txt
+++ b/shaders/CMakeLists.txt
@@ -23,6 +23,8 @@ set(
gl_program_pool.hpp
gl_shaders.cpp
gl_shaders.hpp
+ program_manager.cpp
+ program_manager.hpp
program_params.cpp
program_params.hpp
program_pool.hpp
diff --git a/shaders/GL/shaders_lib.glsl b/shaders/GL/shaders_lib.glsl
index 0cfbe35f57..ee317acc18 100644
--- a/shaders/GL/shaders_lib.glsl
+++ b/shaders/GL/shaders_lib.glsl
@@ -1,7 +1,7 @@
// This is a library of functions which we are use in our shaders.
// Common (DO NOT modify this comment, it marks up block of common functions).
-// Scale factor in shape's coordinates transformation from tile's coorinate
+// Scale factor in shape's coordinates transformation from tile's coordinate
// system.
const float kShapeCoordScalar = 1000.0;
diff --git a/shaders/gl_program_info.hpp b/shaders/gl_program_info.hpp
index a1f905922d..18063d5a5d 100644
--- a/shaders/gl_program_info.hpp
+++ b/shaders/gl_program_info.hpp
@@ -11,19 +11,16 @@ struct GLProgramInfo
GLProgramInfo(std::string const & vertexShaderName,
std::string const & fragmentShaderName,
char const * const vertexSource,
- char const * const fragmentSource,
- uint8_t textureSlotsCount)
+ char const * const fragmentSource)
: m_vertexShaderName(vertexShaderName)
, m_fragmentShaderName(fragmentShaderName)
, m_vertexShaderSource(vertexSource)
, m_fragmentShaderSource(fragmentSource)
- , m_textureSlotsCount(textureSlotsCount)
{}
std::string const m_vertexShaderName;
std::string const m_fragmentShaderName;
char const * const m_vertexShaderSource = nullptr;
char const * const m_fragmentShaderSource = nullptr;
- uint8_t const m_textureSlotsCount = 0;
};
} // namespace gpu
diff --git a/shaders/gl_program_params.cpp b/shaders/gl_program_params.cpp
index 71852294f1..7b0c022638 100644
--- a/shaders/gl_program_params.cpp
+++ b/shaders/gl_program_params.cpp
@@ -13,7 +13,7 @@ namespace
struct UniformsGuard
{
template <typename ParamsType>
- explicit UniformsGuard(ref_ptr<dp::GpuProgram> program, ParamsType const &)
+ UniformsGuard(ref_ptr<dp::GpuProgram> program, ParamsType const &)
: m_program(program)
{
ASSERT_EQUAL(ParamsType::GetName(), ProgramParams::GetBoundParamsName(program),
diff --git a/shaders/gl_program_pool.cpp b/shaders/gl_program_pool.cpp
index 8816e6d72a..7b985c81a9 100644
--- a/shaders/gl_program_pool.cpp
+++ b/shaders/gl_program_pool.cpp
@@ -21,7 +21,7 @@ GLProgramPool::GLProgramPool(dp::ApiVersion apiVersion)
GLProgramPool::~GLProgramPool()
{
- ProgramParams::Uninit();
+ ProgramParams::Destroy();
}
drape_ptr<dp::GpuProgram> GLProgramPool::Get(Program program)
@@ -32,9 +32,8 @@ drape_ptr<dp::GpuProgram> GLProgramPool::Get(Program program)
auto fragmentShader = GetShader(programInfo.m_fragmentShaderName, programInfo.m_fragmentShaderSource,
dp::Shader::Type::FragmentShader);
- auto const textureSlotsCount = std::max(m_minTextureSlotsCount, programInfo.m_textureSlotsCount);
auto const name = DebugPrint(program);
- return make_unique_dp<dp::GpuProgram>(name, vertexShader, fragmentShader, textureSlotsCount);
+ return make_unique_dp<dp::GpuProgram>(name, vertexShader, fragmentShader);
}
void GLProgramPool::SetDefines(std::string const & defines)
@@ -42,11 +41,6 @@ void GLProgramPool::SetDefines(std::string const & defines)
m_defines = defines;
}
-void GLProgramPool::SetMinTextureSlotsCount(uint8_t slotsCount)
-{
- m_minTextureSlotsCount = slotsCount;
-}
-
ref_ptr<dp::Shader> GLProgramPool::GetShader(std::string const & name, std::string const & source,
dp::Shader::Type type)
{
diff --git a/shaders/gl_program_pool.hpp b/shaders/gl_program_pool.hpp
index 4160799f89..4768e153c4 100644
--- a/shaders/gl_program_pool.hpp
+++ b/shaders/gl_program_pool.hpp
@@ -20,8 +20,7 @@ public:
drape_ptr<dp::GpuProgram> Get(Program program) override;
- void SetDefines(std::string const & defines) override;
- void SetMinTextureSlotsCount(uint8_t slotsCount) override;
+ void SetDefines(std::string const & defines);
private:
ref_ptr<dp::Shader> GetShader(std::string const & name, std::string const & source,
@@ -33,6 +32,5 @@ private:
using Shaders = std::map<std::string, drape_ptr<dp::Shader>>;
Shaders m_shaders;
std::string m_defines;
- uint8_t m_minTextureSlotsCount = 0;
};
} // namespace gpu
diff --git a/shaders/gl_shaders_preprocessor.py b/shaders/gl_shaders_preprocessor.py
index 7d454637d4..25fcb89ad8 100644
--- a/shaders/gl_shaders_preprocessor.py
+++ b/shaders/gl_shaders_preprocessor.py
@@ -206,26 +206,6 @@ def write_gles3_shader(output_file, shader_file, shader_dir, shaders_library):
write_shader_body(output_file, shader_file, shader_dir, shaders_library, True)
-def calc_texture_slots(vertex_shader_file, fragment_shader_file, shader_dir):
- slots = set()
- for line in open(os.path.join(shader_dir, vertex_shader_file)):
- line = line.replace(" ", "")
- if line.find("uniformsampler") != -1:
- slots.add(line)
- is_inside_workaround = False;
- for line in open(os.path.join(shader_dir, fragment_shader_file)):
- line = line.replace(" ", "")
- if line.find("#ifdefSAMSUNG_GOOGLE_NEXUS") != -1:
- is_inside_workaround = True;
- continue;
- if is_inside_workaround and line.find("#endif"):
- is_inside_workaround = False;
- continue;
- if not is_inside_workaround and line.find("uniformsampler") != -1:
- slots.add(line)
- return len(slots)
-
-
def write_gpu_programs_map(file, programs_def, source_prefix):
for program in programs_def.keys():
vertex_shader = programs_def[program][0]
@@ -233,10 +213,9 @@ def write_gpu_programs_map(file, programs_def, source_prefix):
fragment_shader = programs_def[program][1]
fragment_source_name = source_prefix + format_shader_source_name(fragment_shader)
- texture_slots = calc_texture_slots(vertex_shader, fragment_shader, shader_dir)
- file.write(" GLProgramInfo(\"%s\", \"%s\", %s, %s, %d),\n" % (
- vertex_source_name, fragment_source_name, vertex_source_name, fragment_source_name, texture_slots))
+ file.write(" GLProgramInfo(\"%s\", \"%s\", %s, %s),\n" % (
+ vertex_source_name, fragment_source_name, vertex_source_name, fragment_source_name))
def write_implementation_file(programs_def, shader_index, shader_dir, impl_file, def_file, generation_dir,
diff --git a/shaders/program_manager.cpp b/shaders/program_manager.cpp
new file mode 100644
index 0000000000..3428a36b3a
--- /dev/null
+++ b/shaders/program_manager.cpp
@@ -0,0 +1,56 @@
+#include "shaders/program_manager.hpp"
+#include "shaders/gl_program_pool.hpp"
+
+#include "drape/glfunctions.hpp"
+#include "drape/support_manager.hpp"
+
+#include "base/logging.hpp"
+
+#include "std/target_os.hpp"
+
+#include <algorithm>
+
+namespace gpu
+{
+void ProgramManager::Init(dp::ApiVersion apiVersion)
+{
+ if (apiVersion == dp::ApiVersion::OpenGLES2 || apiVersion == dp::ApiVersion::OpenGLES3)
+ {
+ std::string globalDefines;
+
+ // This feature is not supported on some Android devices (especially on Android 4.x version).
+ // Since we can't predict on which devices it'll work fine, we have to turn off for all devices.
+#if !defined(OMIM_OS_ANDROID)
+ if (GLFunctions::glGetInteger(gl_const::GLMaxVertexTextures) > 0)
+ {
+ LOG(LINFO, ("VTF enabled"));
+ globalDefines.append("#define ENABLE_VTF\n"); // VTF == Vertex Texture Fetch
+ }
+#endif
+
+ if (dp::SupportManager::Instance().IsSamsungGoogleNexus())
+ globalDefines.append("#define SAMSUNG_GOOGLE_NEXUS\n");
+
+ if (apiVersion == dp::ApiVersion::OpenGLES3)
+ globalDefines.append("#define GLES3\n");
+
+ m_pool = make_unique_dp<GLProgramPool>(apiVersion);
+ ref_ptr<GLProgramPool> pool = make_ref(m_pool);
+ pool->SetDefines(globalDefines);
+ }
+ else
+ {
+ CHECK(false, ("Unsupported API version"));
+ }
+}
+
+ref_ptr<dp::GpuProgram> ProgramManager::GetProgram(Program program)
+{
+ auto & programPtr = m_programs[static_cast<size_t>(program)];
+ if (programPtr)
+ return make_ref(programPtr);
+
+ programPtr = m_pool->Get(program);
+ return make_ref(programPtr);
+}
+} // namespace gpu
diff --git a/shaders/program_manager.hpp b/shaders/program_manager.hpp
new file mode 100644
index 0000000000..4bc5d49d35
--- /dev/null
+++ b/shaders/program_manager.hpp
@@ -0,0 +1,33 @@
+#pragma once
+
+#include "shaders/program_pool.hpp"
+
+#include "drape/drape_global.hpp"
+#include "drape/gpu_program.hpp"
+#include "drape/pointers.hpp"
+
+#include "base/macros.hpp"
+
+#include <array>
+#include <string>
+
+namespace gpu
+{
+class ProgramManager
+{
+public:
+ ProgramManager() = default;
+
+ void Init(dp::ApiVersion apiVersion);
+
+ ref_ptr<dp::GpuProgram> GetProgram(Program program);
+
+private:
+ using Programs = std::array<drape_ptr<dp::GpuProgram>,
+ static_cast<size_t>(Program::ProgramsCount)>;
+ Programs m_programs;
+ drape_ptr<ProgramPool> m_pool;
+
+ DISALLOW_COPY_AND_MOVE(ProgramManager);
+};
+} // namespace gpu
diff --git a/shaders/program_params.cpp b/shaders/program_params.cpp
index 5f2b831f5f..33b4dcb29d 100644
--- a/shaders/program_params.cpp
+++ b/shaders/program_params.cpp
@@ -22,7 +22,7 @@ void ProgramParams::Init()
}
// static
-void ProgramParams::Uninit()
+void ProgramParams::Destroy()
{
m_boundParams.clear();
}
diff --git a/shaders/program_params.hpp b/shaders/program_params.hpp
index a79f7715ff..ccdfe604c4 100644
--- a/shaders/program_params.hpp
+++ b/shaders/program_params.hpp
@@ -17,7 +17,7 @@ class ProgramParams
{
public:
static void Init();
- static void Uninit();
+ static void Destroy();
static std::string GetBoundParamsName(ref_ptr<dp::GpuProgram> program);
private:
diff --git a/shaders/program_pool.hpp b/shaders/program_pool.hpp
index 7034bb7958..aefab82cb2 100644
--- a/shaders/program_pool.hpp
+++ b/shaders/program_pool.hpp
@@ -5,7 +5,6 @@
#include "drape/gpu_program.hpp"
#include "drape/pointers.hpp"
-#include <cstdint>
#include <string>
namespace gpu
@@ -15,8 +14,5 @@ class ProgramPool
public:
virtual ~ProgramPool() = default;
virtual drape_ptr<dp::GpuProgram> Get(Program program) = 0;
-
- virtual void SetDefines(std::string const & defines) {}
- virtual void SetMinTextureSlotsCount(uint8_t slotsCount) {}
};
} // namespace gpu
diff --git a/shaders/shaders_tests/CMakeLists.txt b/shaders/shaders_tests/CMakeLists.txt
index 1e42bde001..716cb0e3bd 100644
--- a/shaders/shaders_tests/CMakeLists.txt
+++ b/shaders/shaders_tests/CMakeLists.txt
@@ -1,11 +1,11 @@
project(shaders_tests)
execute_process(
- COMMAND rm -rf ${OMIM_ROOT}/data/shaders_compiler
+ COMMAND rm -rf ${CMAKE_BINARY_DIR}/shaders_compiler
)
execute_process(
- COMMAND cp -r ${OMIM_ROOT}/tools/shaders_compiler ${OMIM_ROOT}/data
+ COMMAND cp -r ${OMIM_ROOT}/tools/shaders_compiler ${CMAKE_BINARY_DIR}/shaders_compiler
)
set(
diff --git a/shaders/shaders_tests/gl_shaders_mobile_compile_test.cpp b/shaders/shaders_tests/gl_shaders_mobile_compile_test.cpp
index 1e1faf383b..433ba485ee 100644
--- a/shaders/shaders_tests/gl_shaders_mobile_compile_test.cpp
+++ b/shaders/shaders_tests/gl_shaders_mobile_compile_test.cpp
@@ -120,7 +120,7 @@ void TestShaders(dp::ApiVersion apiVersion, std::string const & defines,
std::string GetCompilerPath(std::string const & compilerName)
{
Platform & platform = GetPlatform();
- std::string compilerPath = my::JoinFoldersToPath({"./data", kCompilersDir}, compilerName);
+ std::string compilerPath = my::JoinFoldersToPath(kCompilersDir, compilerName);
if (platform.IsFileExistsByFullPath(compilerPath))
return compilerPath;
diff --git a/tools/autobuild/shader_preprocessor.py b/tools/autobuild/shader_preprocessor.py
deleted file mode 100644
index c110ce4176..0000000000
--- a/tools/autobuild/shader_preprocessor.py
+++ /dev/null
@@ -1,388 +0,0 @@
-import os
-import sys
-import hashlib
-
-LOWP_DEFINE = "LOW_P"
-LOWP_SEARCH = "lowp"
-MEDIUMP_DEFINE = "MEDIUM_P"
-MEDIUMP_SEARCH = "mediump"
-HIGHP_DEFINE = "HIGH_P"
-HIGHP_SEARCH = "highp"
-MAX_PREC_DEFINE = "MAXPREC_P"
-MAX_PREC_SEARCH = "MAXPREC"
-SHADER_VERSION_DEFINE = "SHADER_VERSION"
-VERTEX_SHADER_EXT = ".vsh.glsl"
-FRAG_SHADER_EXT = ".fsh.glsl"
-GLES3_PREFIX = "GLES3_"
-GLES3_SHADER_PREFIX = "gles3_"
-
-SHADERS_LIB_COMMON_PATTERN = "// Common"
-SHADERS_LIB_VS_PATTERN = "// VS"
-SHADERS_LIB_FS_PATTERN = "// FS"
-SHADERS_LIB_COMMON_INDEX = 0
-SHADERS_LIB_VS_INDEX = 1
-SHADERS_LIB_FS_INDEX = 2
-
-
-def format_shader_source_name(shader_file_name):
- shader_source_name = shader_file_name
- return shader_source_name.replace(".glsl", "").replace(".", "_").upper()
-
-
-def format_shader_index_name(shader_file_name):
- return format_shader_source_name(shader_file_name) + "_INDEX"
-
-
-def read_index_file(file_path):
- gpu_programs = dict()
- with open(file_path, 'r') as f:
- index = 0
- for line in f:
- line_parts = line.strip().split()
- if len(line_parts) != 3:
- print("Incorrect GPU program definition : " + line)
- exit(10)
-
- vertex_shader = next(f for f in line_parts if f.endswith(VERTEX_SHADER_EXT))
- fragment_shader = next(f for f in line_parts if f.endswith(FRAG_SHADER_EXT))
-
- if not vertex_shader:
- print("Vertex shader not found in GPU program definition : " + line)
- exit(11)
-
- if not fragment_shader:
- print("Fragment shader not found in GPU program definition : " + line)
- exit(12)
-
- if line_parts[0] in gpu_programs.keys():
- print("More than one difinition of %s gpu program" % line_parts[0])
- exit(13)
-
- gpu_programs[index] = (vertex_shader, fragment_shader, line_parts[0])
- index += 1
-
- return gpu_programs
-
-
-def read_shaders_lib_file(file_path):
- shaders_library = ['', '', '']
- with open(file_path, 'r') as f:
- shaders_lib_content = f.read()
- if len(shaders_lib_content) == 0:
- return shaders_library
-
- common_index = shaders_lib_content.find(SHADERS_LIB_COMMON_PATTERN)
- if common_index < 0:
- print("Common functions block is not found in " + file_path)
- exit(14)
- vs_index = shaders_lib_content.find(SHADERS_LIB_VS_PATTERN)
- if vs_index < 0:
- print("Vertex shaders functions block is not found in " + file_path)
- exit(15)
- fs_index = shaders_lib_content.find(SHADERS_LIB_FS_PATTERN)
- if fs_index < 0:
- print("Vertex shaders functions block is not found in " + file_path)
- exit(16)
- if not (common_index < vs_index < fs_index):
- print("Order of functions block is incorrect in " + file_path)
- exit(17)
-
- shaders_library[SHADERS_LIB_COMMON_INDEX] = shaders_lib_content[common_index:vs_index - 1]
- shaders_library[SHADERS_LIB_VS_INDEX] = shaders_lib_content[vs_index:fs_index - 1]
- shaders_library[SHADERS_LIB_FS_INDEX] = shaders_lib_content[fs_index:]
-
- return shaders_library
-
-
-def generate_shader_indexes(shaders):
- return dict((v, k) for k, v in enumerate(shaders))
-
-
-def definition_changed(new_header_content, def_file_path):
- if not os.path.isfile(def_file_path):
- return True
-
- def_content = open(def_file_path, 'r').read()
- old_md5 = hashlib.md5()
- old_md5.update(def_content)
-
- new_md5 = hashlib.md5()
- new_md5.update(new_header_content)
-
- return old_md5.digest() != new_md5.digest()
-
-
-def write_definition_file(program_index):
- result = ""
- result += "#pragma once\n\n"
- result += "#include \"drape/drape_global.hpp\"\n"
- result += "#include \"drape/gpu_program_info.hpp\"\n\n"
- result += "#include \"std/target_os.hpp\"\n\n"
- result += "#include <map>\n"
- result += "#include <string>\n"
- result += "#include <vector>\n\n"
- result += "namespace gpu\n"
- result += "{\n"
- result += "#if defined(OMIM_OS_DESKTOP) && !defined(COMPILER_TESTS)\n"
- result += " #define %s \"\" \n" % (LOWP_DEFINE)
- result += " #define %s \"\" \n" % (MEDIUMP_DEFINE)
- result += " #define %s \"\" \n" % (HIGHP_DEFINE)
- result += " #define %s \"\" \n" % (MAX_PREC_DEFINE)
- result += " #define %s \"#version 150 core \\n\"\n" % (SHADER_VERSION_DEFINE)
- result += "#else\n"
- result += " #define %s \"%s\"\n" % (LOWP_DEFINE, LOWP_SEARCH)
- result += " #define %s \"%s\"\n" % (MEDIUMP_DEFINE, MEDIUMP_SEARCH)
- result += " #define %s \"%s\"\n" % (HIGHP_DEFINE, HIGHP_SEARCH)
- result += " #define %s \"%s\"\n" % (MAX_PREC_DEFINE, MAX_PREC_SEARCH)
- result += " #define %s \"#version 300 es \\n\"\n" % (SHADER_VERSION_DEFINE)
- result += "#endif\n\n"
-
- for programName in program_index.keys():
- result += "extern int const %s;\n" % (program_index[programName][2])
-
- result += "\n"
- result += "#if !defined(COMPILER_TESTS)\n"
- result += "class ShaderMapper : public GpuProgramGetter\n"
- result += "{\n"
- result += "public:\n"
- result += " ShaderMapper(dp::ApiVersion apiVersion);\n"
- result += " GpuProgramInfo const & GetProgramInfo(int program) const override;\n"
- result += "private:\n"
- result += " std::map<int, gpu::GpuProgramInfo> m_mapping;\n"
- result += "};\n"
- result += "#endif\n\n"
- result += "#if defined(COMPILER_TESTS)\n"
- result += "using ShadersEnum = std::vector<std::pair<std::string, std::string>>;\n"
- result += "extern ShadersEnum GetVertexShaders(dp::ApiVersion apiVersion);\n"
- result += "extern ShadersEnum GetFragmentShaders(dp::ApiVersion apiVersion);\n"
- result += "#endif\n"
- result += "} // namespace gpu\n"
-
- return result
-
-
-def write_shader_gles_header(output_file):
- output_file.write(" #ifdef GL_ES \\n\\\n")
- output_file.write(" #ifdef GL_FRAGMENT_PRECISION_HIGH \\n\\\n")
- output_file.write(" #define MAXPREC \" HIGH_P \" \\n\\\n")
- output_file.write(" #else \\n\\\n")
- output_file.write(" #define MAXPREC \" MEDIUM_P \" \\n\\\n")
- output_file.write(" #endif \\n\\\n")
- output_file.write(" precision MAXPREC float; \\n\\\n")
- output_file.write(" #endif \\n\\\n")
-
-
-def get_shaders_lib_content(shader_file, shaders_library):
- lib_content = shaders_library[SHADERS_LIB_COMMON_INDEX]
- if shader_file.find(VERTEX_SHADER_EXT) >= 0:
- lib_content += shaders_library[SHADERS_LIB_VS_INDEX]
- elif shader_file.find(FRAG_SHADER_EXT) >= 0:
- lib_content += shaders_library[SHADERS_LIB_FS_INDEX]
- return lib_content
-
-
-def write_shader_line(output_file, line, convert_to_gles3, is_fragment_shader):
- if line.lstrip().startswith("//") or line == '\n' or len(line) == 0:
- return
- output_line = line.rstrip().replace(LOWP_SEARCH, "\" " + LOWP_DEFINE + " \"")
- output_line = output_line.replace(MEDIUMP_SEARCH, "\" " + MEDIUMP_DEFINE + " \"")
- output_line = output_line.replace(HIGHP_SEARCH, "\" " + HIGHP_DEFINE + " \"")
- if convert_to_gles3:
- output_line = output_line.replace("attribute", "in")
- if is_fragment_shader:
- output_line = output_line.replace("varying", "in")
- else:
- output_line = output_line.replace("varying", "out")
- output_line = output_line.replace("texture2D", "texture")
- output_line = output_line.replace("gl_FragColor", "v_FragColor")
- output_file.write(" %s \\n\\\n" % output_line)
-
-
-def write_shader_body(output_file, shader_file, shader_dir, shaders_library, convert_to_gles3):
- is_fragment_shader = shader_file.find(FRAG_SHADER_EXT) >= 0
- lib_content = get_shaders_lib_content(shader_file, shaders_library)
- for line in open(os.path.join(shader_dir, shader_file)):
- if line.lstrip().startswith("void main"):
- for lib_line in lib_content.splitlines():
- write_shader_line(output_file, lib_line, convert_to_gles3, is_fragment_shader)
- if convert_to_gles3 and is_fragment_shader:
- output_file.write(" out vec4 v_FragColor; \\n\\\n")
- write_shader_line(output_file, line, convert_to_gles3, is_fragment_shader)
- output_file.write("\";\n\n")
-
-
-def write_shader(output_file, shader_file, shader_dir, shaders_library):
- output_file.write("static char const %s[] = \" \\\n" % (format_shader_source_name(shader_file)))
- write_shader_gles_header(output_file)
- write_shader_body(output_file, shader_file, shader_dir, shaders_library, False)
-
-
-def write_gles3_shader(output_file, shader_file, shader_dir, shaders_library):
- output_file.write("static char const %s[] = \" \\\n" % (GLES3_PREFIX + format_shader_source_name(shader_file)))
- output_file.write(" \" " + SHADER_VERSION_DEFINE + " \" \\n\\\n")
- write_shader_gles_header(output_file)
- if os.path.exists(os.path.join(shader_dir, GLES3_SHADER_PREFIX + shader_file)):
- write_shader_body(output_file, GLES3_SHADER_PREFIX + shader_file, shader_dir, shaders_library, False)
- else:
- write_shader_body(output_file, shader_file, shader_dir, shaders_library, True)
-
-
-def calc_texture_slots(vertex_shader_file, fragment_shader_file, shader_dir):
- slots = set()
- for line in open(os.path.join(shader_dir, vertex_shader_file)):
- line = line.replace(" ", "")
- if line.find("uniformsampler") != -1:
- slots.add(line)
- is_inside_workaround = False;
- for line in open(os.path.join(shader_dir, fragment_shader_file)):
- line = line.replace(" ", "")
- if line.find("#ifdefSAMSUNG_GOOGLE_NEXUS") != -1:
- is_inside_workaround = True;
- continue;
- if is_inside_workaround and line.find("#endif"):
- is_inside_workaround = False;
- continue;
- if not is_inside_workaround and line.find("uniformsampler") != -1:
- slots.add(line)
- return len(slots)
-
-
-def write_shaders_index(output_file, shader_index):
- for shader in shader_index:
- output_file.write("#define %s %s\n" % (format_shader_index_name(shader), shader_index[shader]))
-
-
-def write_gpu_programs_map(file, programs_def, source_prefix):
- for program in programs_def.keys():
- vertex_shader = programs_def[program][0]
- vertex_index_name = format_shader_index_name(vertex_shader)
- vertex_source_name = source_prefix + format_shader_source_name(vertex_shader)
-
- fragment_shader = programs_def[program][1]
- fragment_index_name = format_shader_index_name(fragment_shader)
- fragment_source_name = source_prefix + format_shader_source_name(fragment_shader)
- texture_slots = calc_texture_slots(vertex_shader, fragment_shader, shader_dir)
-
- file.write(" gpuIndex.insert(std::make_pair(%s, GpuProgramInfo(%s, %s, %s, %s, %d)));\n" % (
- program, vertex_index_name, fragment_index_name, vertex_source_name, fragment_source_name, texture_slots))
-
-
-def write_shaders_enum(file, shader, enum_name, source_prefix):
- source_name = source_prefix + format_shader_source_name(shader)
- file.write(" %s.push_back(std::make_pair(\"%s\", std::string(%s)));\n" % (enum_name, source_name, source_name))
-
-
-def write_implementation_file(programs_def, shader_index, shader_dir, impl_file, def_file, generation_dir, shaders,
- shaders_library):
- vertex_shaders = [s for s in shaders if s.endswith(VERTEX_SHADER_EXT)]
- fragment_shaders = [s for s in shaders if s.endswith(FRAG_SHADER_EXT)]
- file = open(os.path.join(generation_dir, impl_file), 'w')
- file.write("#include \"%s\"\n\n" % (def_file))
- file.write("#include \"base/assert.hpp\"\n\n")
- file.write("#include <unordered_map>\n")
- file.write("#include <utility>\n\n")
-
- file.write("namespace gpu\n")
- file.write("{\n")
-
- for shader in shader_index.keys():
- write_shader(file, shader, shader_dir, shaders_library)
- write_gles3_shader(file, shader, shader_dir, shaders_library)
-
- write_shaders_index(file, shader_index)
- file.write("\n")
- for program in programs_def:
- file.write("int const %s = %s;\n" % (programs_def[program][2], program));
- file.write("\n")
- file.write("#if !defined(COMPILER_TESTS)\n")
- file.write("namespace\n")
- file.write("{\n")
- file.write("void InitGpuProgramsLib(dp::ApiVersion apiVersion, std::map<int, GpuProgramInfo> & gpuIndex)\n")
- file.write("{\n")
- file.write(" if (apiVersion == dp::ApiVersion::OpenGLES2)\n")
- file.write(" {\n")
- write_gpu_programs_map(file, programs_def, '')
- file.write(" }\n")
- file.write(" else if (apiVersion == dp::ApiVersion::OpenGLES3)\n")
- file.write(" {\n")
- write_gpu_programs_map(file, programs_def, GLES3_PREFIX)
- file.write(" }\n")
- file.write("}\n")
- file.write("} // namespace\n\n")
-
- file.write("ShaderMapper::ShaderMapper(dp::ApiVersion apiVersion)\n")
- file.write("{ gpu::InitGpuProgramsLib(apiVersion, m_mapping); }\n")
- file.write("GpuProgramInfo const & ShaderMapper::GetProgramInfo(int program) const\n")
- file.write("{\n")
- file.write(" auto it = m_mapping.find(program);\n")
- file.write(" ASSERT(it != m_mapping.end(), ());\n")
- file.write(" return it->second;\n")
- file.write("}\n")
- file.write("#endif\n\n")
-
- file.write("#if defined(COMPILER_TESTS)\n")
- file.write("ShadersEnum GetVertexShaders(dp::ApiVersion apiVersion)\n")
- file.write("{\n")
- file.write(" ShadersEnum vertexEnum;\n")
- file.write(" if (apiVersion == dp::ApiVersion::OpenGLES2)\n")
- file.write(" {\n")
- for s in vertex_shaders:
- write_shaders_enum(file, s, 'vertexEnum', '')
- file.write(" }\n")
- file.write(" else if (apiVersion == dp::ApiVersion::OpenGLES3)\n")
- file.write(" {\n")
- for s in vertex_shaders:
- write_shaders_enum(file, s, 'vertexEnum', GLES3_PREFIX)
- file.write(" }\n")
- file.write(" return vertexEnum;\n")
- file.write("}\n")
-
- file.write("ShadersEnum GetFragmentShaders(dp::ApiVersion apiVersion)\n")
- file.write("{\n")
- file.write(" ShadersEnum fragmentEnum;\n")
- file.write(" if (apiVersion == dp::ApiVersion::OpenGLES2)\n")
- file.write(" {\n")
- for s in fragment_shaders:
- write_shaders_enum(file, s, 'fragmentEnum', '')
- file.write(" }\n")
- file.write(" else if (apiVersion == dp::ApiVersion::OpenGLES3)\n")
- file.write(" {\n")
- for s in fragment_shaders:
- write_shaders_enum(file, s, 'fragmentEnum', GLES3_PREFIX)
- file.write(" }\n")
- file.write(" return fragmentEnum;\n")
- file.write("}\n")
- file.write("#endif\n")
-
- file.write("} // namespace gpu\n")
- file.close()
-
-
-if __name__ == '__main__':
- if len(sys.argv) < 6:
- print("Usage : " + sys.argv[0] + " <shader_dir> <index_file> <shaders_lib> <generation_dir> <generated_file>")
- exit(1)
-
- shader_dir = sys.argv[1]
- index_file_name = sys.argv[2]
- shaders_lib_file = sys.argv[3]
- generation_dir = sys.argv[4]
- defines_file = sys.argv[5] + ".hpp"
- impl_file = sys.argv[5] + ".cpp"
-
- shaders = [file for file in os.listdir(shader_dir) if
- os.path.isfile(os.path.join(shader_dir, file)) and (
- file.endswith(VERTEX_SHADER_EXT) or file.endswith(FRAG_SHADER_EXT))]
- shaderIndex = generate_shader_indexes(shaders)
-
- programDefinition = read_index_file(os.path.join(shader_dir, index_file_name))
-
- shaders_library = read_shaders_lib_file(os.path.join(shader_dir, shaders_lib_file))
-
- headerFile = write_definition_file(programDefinition)
- if definition_changed(headerFile, os.path.join(generation_dir, defines_file)):
- f = open(os.path.join(generation_dir, defines_file), 'w')
- f.write(headerFile)
- f.close()
- write_implementation_file(programDefinition, shaderIndex, shader_dir, impl_file, defines_file, generation_dir,
- shaders, shaders_library)
diff --git a/xcode/drape/drape.xcodeproj/project.pbxproj b/xcode/drape/drape.xcodeproj/project.pbxproj
index 890e723ef3..80c4eea895 100644
--- a/xcode/drape/drape.xcodeproj/project.pbxproj
+++ b/xcode/drape/drape.xcodeproj/project.pbxproj
@@ -20,7 +20,6 @@
457B536620358F7E00E4E752 /* drape_routine.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 457B536320358F7D00E4E752 /* drape_routine.hpp */; };
457B536720358F7E00E4E752 /* glyph_generator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 457B536420358F7D00E4E752 /* glyph_generator.cpp */; };
457B536820358F7E00E4E752 /* glyph_generator.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 457B536520358F7E00E4E752 /* glyph_generator.hpp */; };
- 45FA6D141EB3690B00AE67BD /* gpu_program_info.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 45FA6D131EB3690B00AE67BD /* gpu_program_info.hpp */; };
670947231BDF9A4F005014C0 /* data_buffer_impl.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 670947151BDF9A4F005014C0 /* data_buffer_impl.hpp */; };
670947251BDF9A4F005014C0 /* bidi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 670947171BDF9A4F005014C0 /* bidi.cpp */; };
670947261BDF9A4F005014C0 /* bidi.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 670947181BDF9A4F005014C0 /* bidi.hpp */; };
@@ -67,8 +66,6 @@
6729A5831A69213A007D5872 /* glstate.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6729A51F1A69213A007D5872 /* glstate.hpp */; };
6729A5861A69213A007D5872 /* gpu_buffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6729A5221A69213A007D5872 /* gpu_buffer.cpp */; };
6729A5871A69213A007D5872 /* gpu_buffer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6729A5231A69213A007D5872 /* gpu_buffer.hpp */; };
- 6729A5881A69213A007D5872 /* gpu_program_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6729A5241A69213A007D5872 /* gpu_program_manager.cpp */; };
- 6729A5891A69213A007D5872 /* gpu_program_manager.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6729A5251A69213A007D5872 /* gpu_program_manager.hpp */; };
6729A58A1A69213A007D5872 /* gpu_program.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6729A5261A69213A007D5872 /* gpu_program.cpp */; };
6729A58B1A69213A007D5872 /* gpu_program.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 6729A5271A69213A007D5872 /* gpu_program.hpp */; };
6729A58C1A69213A007D5872 /* index_buffer_mutator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6729A5281A69213A007D5872 /* index_buffer_mutator.cpp */; };
@@ -130,7 +127,6 @@
457B536320358F7D00E4E752 /* drape_routine.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = drape_routine.hpp; sourceTree = "<group>"; };
457B536420358F7D00E4E752 /* glyph_generator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = glyph_generator.cpp; sourceTree = "<group>"; };
457B536520358F7E00E4E752 /* glyph_generator.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = glyph_generator.hpp; sourceTree = "<group>"; };
- 45FA6D131EB3690B00AE67BD /* gpu_program_info.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = gpu_program_info.hpp; sourceTree = "<group>"; };
670947151BDF9A4F005014C0 /* data_buffer_impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = data_buffer_impl.hpp; sourceTree = "<group>"; };
670947171BDF9A4F005014C0 /* bidi.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bidi.cpp; sourceTree = "<group>"; };
670947181BDF9A4F005014C0 /* bidi.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = bidi.hpp; sourceTree = "<group>"; };
@@ -178,8 +174,6 @@
6729A51F1A69213A007D5872 /* glstate.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = glstate.hpp; sourceTree = "<group>"; };
6729A5221A69213A007D5872 /* gpu_buffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gpu_buffer.cpp; sourceTree = "<group>"; };
6729A5231A69213A007D5872 /* gpu_buffer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = gpu_buffer.hpp; sourceTree = "<group>"; };
- 6729A5241A69213A007D5872 /* gpu_program_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gpu_program_manager.cpp; sourceTree = "<group>"; };
- 6729A5251A69213A007D5872 /* gpu_program_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = gpu_program_manager.hpp; sourceTree = "<group>"; };
6729A5261A69213A007D5872 /* gpu_program.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gpu_program.cpp; sourceTree = "<group>"; };
6729A5271A69213A007D5872 /* gpu_program.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = gpu_program.hpp; sourceTree = "<group>"; };
6729A5281A69213A007D5872 /* index_buffer_mutator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = index_buffer_mutator.cpp; sourceTree = "<group>"; };
@@ -306,9 +300,6 @@
6709471A1BDF9A4F005014C0 /* glyph_manager.hpp */,
6729A5221A69213A007D5872 /* gpu_buffer.cpp */,
6729A5231A69213A007D5872 /* gpu_buffer.hpp */,
- 45FA6D131EB3690B00AE67BD /* gpu_program_info.hpp */,
- 6729A5241A69213A007D5872 /* gpu_program_manager.cpp */,
- 6729A5251A69213A007D5872 /* gpu_program_manager.hpp */,
6729A5261A69213A007D5872 /* gpu_program.cpp */,
6729A5271A69213A007D5872 /* gpu_program.hpp */,
6709471B1BDF9A4F005014C0 /* hw_texture_ios.hpp */,
@@ -397,7 +388,6 @@
6729A5701A69213A007D5872 /* color.hpp in Headers */,
6729A5801A69213A007D5872 /* glsl_func.hpp in Headers */,
6729A5761A69213A007D5872 /* dynamic_texture.hpp in Headers */,
- 45FA6D141EB3690B00AE67BD /* gpu_program_info.hpp in Headers */,
6729A5681A69213A007D5872 /* batcher_helpers.hpp in Headers */,
6729A5931A69213A007D5872 /* oglcontextfactory.hpp in Headers */,
6729A56A1A69213A007D5872 /* batcher.hpp in Headers */,
@@ -432,7 +422,6 @@
6709472C1BDF9A4F005014C0 /* hw_texture.hpp in Headers */,
6729A5911A69213A007D5872 /* oglcontext.hpp in Headers */,
457B536620358F7E00E4E752 /* drape_routine.hpp in Headers */,
- 6729A5891A69213A007D5872 /* gpu_program_manager.hpp in Headers */,
6729A5AB1A69213A007D5872 /* texture.hpp in Headers */,
6729A57F1A69213A007D5872 /* glIncludes.hpp in Headers */,
4513BF0E1EC2F0760066565C /* viewport.hpp in Headers */,
@@ -516,7 +505,6 @@
34C624C91DABDB2000510300 /* static_texture.cpp in Sources */,
4513BF0B1EC2F0760066565C /* framebuffer.cpp in Sources */,
6729A5981A69213A007D5872 /* pointers.cpp in Sources */,
- 6729A5881A69213A007D5872 /* gpu_program_manager.cpp in Sources */,
6729A5A41A69213A007D5872 /* symbols_texture.cpp in Sources */,
675D21991BFB876E00717E4F /* projection.cpp in Sources */,
6729A56D1A69213A007D5872 /* buffer_base.cpp in Sources */,
diff --git a/xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj b/xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj
index d05fcc7187..7a7b269fac 100644
--- a/xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj
+++ b/xcode/drape_frontend/drape_frontend.xcodeproj/project.pbxproj
@@ -59,8 +59,6 @@
45B4B8CC1CF5C16B00A54761 /* screen_animations.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 45B4B8C81CF5C16B00A54761 /* screen_animations.hpp */; };
45B4B8CD1CF5C16B00A54761 /* screen_operations.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 45B4B8C91CF5C16B00A54761 /* screen_operations.cpp */; };
45B4B8CE1CF5C16B00A54761 /* screen_operations.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 45B4B8CA1CF5C16B00A54761 /* screen_operations.hpp */; };
- 45BB025D1EB8BE5200FE5C0C /* shader_def.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 45BB025B1EB8BE5200FE5C0C /* shader_def.cpp */; };
- 45BB025E1EB8BE5200FE5C0C /* shader_def.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 45BB025C1EB8BE5200FE5C0C /* shader_def.hpp */; };
56BF56DA1C7608C0006DD7CB /* choose_position_mark.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56BF56D81C7608C0006DD7CB /* choose_position_mark.cpp */; };
56BF56DB1C7608C0006DD7CB /* choose_position_mark.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 56BF56D91C7608C0006DD7CB /* choose_position_mark.hpp */; };
56D545661C74A44900E3719C /* overlay_batcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 56D545641C74A44900E3719C /* overlay_batcher.cpp */; };
@@ -330,8 +328,6 @@
45BB02581EB8BE2B00FE5C0C /* traffic.vsh.glsl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = traffic.vsh.glsl; path = shaders/traffic.vsh.glsl; sourceTree = "<group>"; };
45BB02591EB8BE2B00FE5C0C /* user_mark_billboard.vsh.glsl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = user_mark_billboard.vsh.glsl; path = shaders/user_mark_billboard.vsh.glsl; sourceTree = "<group>"; };
45BB025A1EB8BE2B00FE5C0C /* user_mark.vsh.glsl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = user_mark.vsh.glsl; path = shaders/user_mark.vsh.glsl; sourceTree = "<group>"; };
- 45BB025B1EB8BE5200FE5C0C /* shader_def.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shader_def.cpp; sourceTree = "<group>"; };
- 45BB025C1EB8BE5200FE5C0C /* shader_def.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = shader_def.hpp; sourceTree = "<group>"; };
56BF56D81C7608C0006DD7CB /* choose_position_mark.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = choose_position_mark.cpp; sourceTree = "<group>"; };
56BF56D91C7608C0006DD7CB /* choose_position_mark.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = choose_position_mark.hpp; sourceTree = "<group>"; };
56D545641C74A44900E3719C /* overlay_batcher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = overlay_batcher.cpp; sourceTree = "<group>"; };
@@ -603,8 +599,6 @@
BB7D67CF1F34A62C002FD122 /* custom_features_context.hpp */,
456B3F971ED464FE009B3D1F /* postprocess_renderer.cpp */,
456B3F981ED464FE009B3D1F /* postprocess_renderer.hpp */,
- 45BB025B1EB8BE5200FE5C0C /* shader_def.cpp */,
- 45BB025C1EB8BE5200FE5C0C /* shader_def.hpp */,
45BB02221EB8BE1400FE5C0C /* shaders */,
672D24981E892768004BB7B1 /* overlays_tracker.cpp */,
672D24991E892768004BB7B1 /* overlays_tracker.hpp */,
@@ -878,7 +872,6 @@
452FE5C41EB2004F00EE470C /* screen_quad_renderer.hpp in Headers */,
452C9EDB1CEDCF3200A55E57 /* interpolators.hpp in Headers */,
670948171BDF9C39005014C0 /* interpolation_holder.hpp in Headers */,
- 45BB025E1EB8BE5200FE5C0C /* shader_def.hpp in Headers */,
670947FD1BDF9BF5005014C0 /* base_renderer.hpp in Headers */,
BB59CED820BF6E46008A9ADF /* transit_scheme_builder.hpp in Headers */,
670947D51BDF9BE1005014C0 /* tile_utils.hpp in Headers */,
@@ -932,7 +925,6 @@
isa = PBXNativeTarget;
buildConfigurationList = 6709473E1BDF9B82005014C0 /* Build configuration list for PBXNativeTarget "drape_frontend" */;
buildPhases = (
- 3451C6681EF3E86A00C718BB /* ShellScript */,
670947361BDF9B82005014C0 /* Sources */,
670947371BDF9B82005014C0 /* Frameworks */,
670947381BDF9B82005014C0 /* Headers */,
@@ -977,22 +969,6 @@
};
/* End PBXProject section */
-/* Begin PBXShellScriptBuildPhase section */
- 3451C6681EF3E86A00C718BB /* ShellScript */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "python ${SRCROOT}/../../tools/autobuild/shader_preprocessor.py ${SRCROOT}/../../drape_frontend/shaders shader_index.txt shaders_lib.glsl ${SRCROOT}/../../drape_frontend shader_def";
- };
-/* End PBXShellScriptBuildPhase section */
-
/* Begin PBXSourcesBuildPhase section */
670947361BDF9B82005014C0 /* Sources */ = {
isa = PBXSourcesBuildPhase;
@@ -1047,7 +1023,6 @@
670947A91BDF9BE1005014C0 /* path_symbol_shape.cpp in Sources */,
670947FA1BDF9BF5005014C0 /* backend_renderer.cpp in Sources */,
45A3781E20B324E6005FBDBB /* watermark.cpp in Sources */,
- 45BB025D1EB8BE5200FE5C0C /* shader_def.cpp in Sources */,
670948451BDF9C48005014C0 /* gui_text.cpp in Sources */,
EB2B78031EEDD439002697B6 /* read_metaline_task.cpp in Sources */,
670948141BDF9C39005014C0 /* base_interpolator.cpp in Sources */,
diff --git a/xcode/shaders/shaders.xcodeproj/project.pbxproj b/xcode/shaders/shaders.xcodeproj/project.pbxproj
index 73141370b8..9f7e0b9b25 100644
--- a/xcode/shaders/shaders.xcodeproj/project.pbxproj
+++ b/xcode/shaders/shaders.xcodeproj/project.pbxproj
@@ -7,7 +7,8 @@
objects = {
/* Begin PBXBuildFile section */
- 4563158720E2630E0076E9DB /* macos in Resources */ = {isa = PBXBuildFile; fileRef = 4563158620E2630D0076E9DB /* macos */; };
+ 4561ADF520E378CB0096BC12 /* program_manager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4561ADF320E378CB0096BC12 /* program_manager.cpp */; };
+ 4561ADF920E37A6F0096BC12 /* shaders_compiler in Resources */ = {isa = PBXBuildFile; fileRef = 4561ADF820E37A6F0096BC12 /* shaders_compiler */; };
4566608A20E256240085E8C1 /* program_params.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4566608020E256230085E8C1 /* program_params.cpp */; };
4566608B20E256240085E8C1 /* gl_shaders.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4566608220E256230085E8C1 /* gl_shaders.cpp */; };
4566608C20E256240085E8C1 /* gl_program_params.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4566608420E256230085E8C1 /* gl_program_params.cpp */; };
@@ -42,7 +43,9 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
- 4563158620E2630D0076E9DB /* macos */ = {isa = PBXFileReference; lastKnownFileType = folder; name = macos; path = ../../data/shaders_compiler/macos; sourceTree = "<group>"; };
+ 4561ADF320E378CB0096BC12 /* program_manager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = program_manager.cpp; sourceTree = "<group>"; };
+ 4561ADF420E378CB0096BC12 /* program_manager.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = program_manager.hpp; sourceTree = "<group>"; };
+ 4561ADF820E37A6F0096BC12 /* shaders_compiler */ = {isa = PBXFileReference; lastKnownFileType = folder; name = shaders_compiler; path = ../../tools/shaders_compiler; sourceTree = "<group>"; };
4566606E20E254060085E8C1 /* libshaders.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libshaders.a; sourceTree = BUILT_PRODUCTS_DIR; };
4566607B20E254A60085E8C1 /* common-debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = "common-debug.xcconfig"; path = "../common-debug.xcconfig"; sourceTree = "<group>"; };
4566607C20E254A60085E8C1 /* common-release.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = "common-release.xcconfig"; path = "../common-release.xcconfig"; sourceTree = "<group>"; };
@@ -206,6 +209,8 @@
4566608520E256230085E8C1 /* gl_program_pool.hpp */,
4566608220E256230085E8C1 /* gl_shaders.cpp */,
4566608820E256230085E8C1 /* gl_shaders.hpp */,
+ 4561ADF320E378CB0096BC12 /* program_manager.cpp */,
+ 4561ADF420E378CB0096BC12 /* program_manager.hpp */,
4566608020E256230085E8C1 /* program_params.cpp */,
4566608920E256240085E8C1 /* program_params.hpp */,
4566608120E256230085E8C1 /* program_pool.hpp */,
@@ -325,7 +330,7 @@
4566610B20E261020085E8C1 /* Resources */ = {
isa = PBXGroup;
children = (
- 4563158620E2630D0076E9DB /* macos */,
+ 4561ADF820E37A6F0096BC12 /* shaders_compiler */,
);
name = Resources;
sourceTree = "<group>";
@@ -409,7 +414,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 4563158720E2630E0076E9DB /* macos in Resources */,
+ 4561ADF920E37A6F0096BC12 /* shaders_compiler in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -438,6 +443,7 @@
files = (
4566608A20E256240085E8C1 /* program_params.cpp in Sources */,
4566608B20E256240085E8C1 /* gl_shaders.cpp in Sources */,
+ 4561ADF520E378CB0096BC12 /* program_manager.cpp in Sources */,
4566608C20E256240085E8C1 /* gl_program_params.cpp in Sources */,
4566608D20E256240085E8C1 /* gl_program_pool.cpp in Sources */,
);