diff options
Diffstat (limited to 'src/mbgl/programs/program.hpp')
-rw-r--r-- | src/mbgl/programs/program.hpp | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/src/mbgl/programs/program.hpp b/src/mbgl/programs/program.hpp index fa41d43e5c..c912de13fe 100644 --- a/src/mbgl/programs/program.hpp +++ b/src/mbgl/programs/program.hpp @@ -1,33 +1,38 @@ #pragma once #include <mbgl/gl/program.hpp> +#include <mbgl/programs/program_parameters.hpp> #include <cassert> namespace mbgl { -enum class ProgramDefines : bool { - None = false, - Overdraw = true, -}; - template <class Shaders, class Primitive, class Attributes, class Uniforms> class Program : public gl::Program<Primitive, Attributes, Uniforms> { public: using ParentType = gl::Program<Primitive, Attributes, Uniforms>; - Program(gl::Context& context, ProgramDefines defines) - : ParentType(context, Shaders::vertexSource, fragmentSource(defines)) + Program(gl::Context& context, const ProgramParameters& programParameters) + : ParentType(context, vertexSource(programParameters), fragmentSource(programParameters)) {} + + static std::string pixelRatioDefine(const ProgramParameters& parameters) { + return std::string("#define DEVICE_PIXEL_RATIO ") + std::to_string(parameters.pixelRatio) + "\n"; + } - static std::string fragmentSource(ProgramDefines defines) { - std::string fragment = Shaders::fragmentSource; - if (defines == ProgramDefines::Overdraw) { - assert(fragment.find("#ifdef OVERDRAW_INSPECTOR") != std::string::npos); - fragment.replace(fragment.find_first_of('\n'), 1, "\n#define OVERDRAW_INSPECTOR\n"); + static std::string fragmentSource(const ProgramParameters& parameters) { + std::string source = pixelRatioDefine(parameters) + Shaders::fragmentSource; + if (parameters.overdraw) { + assert(source.find("#ifdef OVERDRAW_INSPECTOR") != std::string::npos); + source.replace(source.find_first_of('\n'), 1, "\n#define OVERDRAW_INSPECTOR\n"); } - return fragment; + return source; } + + static std::string vertexSource(const ProgramParameters& parameters) { + return pixelRatioDefine(parameters) + Shaders::vertexSource; + } + }; } // namespace mbgl |