diff options
Diffstat (limited to 'src/mbgl/programs/program.hpp')
-rw-r--r-- | src/mbgl/programs/program.hpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/mbgl/programs/program.hpp b/src/mbgl/programs/program.hpp new file mode 100644 index 0000000000..9f154b051a --- /dev/null +++ b/src/mbgl/programs/program.hpp @@ -0,0 +1,31 @@ +#pragma once + +#include <mbgl/gl/program.hpp> + +#include <cassert> + +namespace mbgl { + +enum class ProgramDefines : bool { + None = false, + Overdraw = true, +}; + +template <class Shaders, class As, class Us> +class Program : public gl::Program<As, Us> { +public: + Program(gl::Context& context, ProgramDefines defines) + : gl::Program<As, Us>(context, Shaders::vertexSource, fragmentSource(defines)) + {} + + 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"); + } + return fragment; + } +}; + +} // namespace mbgl |