diff --git a/drape/drape_common.pri b/drape/drape_common.pri index 18647e8966..5a07533500 100644 --- a/drape/drape_common.pri +++ b/drape/drape_common.pri @@ -1,3 +1,6 @@ +CMDRES = $$system(python ../tools/autobuild/shader_preprocessor.py $$PWD/shaders shader_index.txt shader_def) +message($$CMDRES) + SOURCES += \ $$DRAPE_DIR/data_buffer.cpp \ $$DRAPE_DIR/binding_info.cpp \ @@ -14,6 +17,7 @@ SOURCES += \ $$DRAPE_DIR/glstate.cpp \ $$DRAPE_DIR/glbuffer.cpp \ $$DRAPE_DIR/utils/list_generator.cpp \ + $$DRAPE_DIR/shader_def.cpp \ HEADERS += \ $$DRAPE_DIR/data_buffer.hpp \ @@ -34,3 +38,4 @@ HEADERS += \ $$DRAPE_DIR/glfunctions.hpp \ $$DRAPE_DIR/glbuffer.hpp \ $$DRAPE_DIR/utils/list_generator.hpp \ + $$DRAPE_DIR/shader_def.hpp \ diff --git a/drape/gpu_program_manager.cpp b/drape/gpu_program_manager.cpp index ee63716746..cfe40a103c 100644 --- a/drape/gpu_program_manager.cpp +++ b/drape/gpu_program_manager.cpp @@ -1,57 +1,26 @@ #include "gpu_program_manager.hpp" #include "../base/assert.hpp" +#include "shader_def.hpp" + namespace { - const string SimpleVertexShader = - "attribute vec2 position;\ - attribute float depth;\ - attribute vec4 color; \ - uniform mat4 modelViewMatrix;\ - uniform mat4 projectionMatrix;\ - varying vec4 vColor; \ - void main()\ - {\ - gl_Position = vec4(position.xy, depth, 1.0) * modelViewMatrix * projectionMatrix;\ - vColor = color;\ - }"; - - const string SimpleFragmentShader = - "varying vec4 vColor;\ - void main()\ - {\ - gl_FragColor = vColor;\ - }"; - - struct ShadersInfo - { - int32_t VertexShaderIndex; - int32_t FragmentShaderIndex; - string VertexShaderSource; - string FragmentShaderSource; - }; - class ShaderMapper { public: ShaderMapper() { - ShadersInfo info; - info.VertexShaderIndex = 1; - info.FragmentShaderIndex = 2; - info.FragmentShaderSource = SimpleFragmentShader; - info.VertexShaderSource = SimpleVertexShader; - m_mapping[1] = info; + gpu::InitGpuProgramsLib(m_mapping); } - const ShadersInfo & GetShaders(int program) + const gpu::ProgramInfo & GetShaders(int program) { ASSERT(m_mapping.find(program) != m_mapping.end(), ()); return m_mapping[program]; } private: - map m_mapping; + map m_mapping; }; static ShaderMapper s_mapper; @@ -81,13 +50,13 @@ ReferencePoiner GpuProgramManager::GetProgram(int index) if (it != m_programs.end()) return it->second.GetWeakPointer(); - ShadersInfo const & shaders = s_mapper.GetShaders(index); - ReferencePoiner vertexShader = GetShader(shaders.VertexShaderIndex, - shaders.VertexShaderSource, - ShaderReference::VertexShader); - ReferencePoiner fragmentShader = GetShader(shaders.FragmentShaderIndex, - shaders.FragmentShaderSource, - ShaderReference::FragmentShader); + gpu::ProgramInfo const & programInfo = s_mapper.GetShaders(index); + ReferencePoiner vertexShader = GetShader(programInfo.m_vertexIndex, + programInfo.m_vertexSource, + ShaderReference::VertexShader); + ReferencePoiner fragmentShader = GetShader(programInfo.m_fragmentIndex, + programInfo.m_fragmentSource, + ShaderReference::FragmentShader); OwnedPointer p(new GpuProgram(vertexShader, fragmentShader)); m_programs.insert(std::make_pair(index, p));