diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2016-10-28 18:17:33 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2016-11-08 08:09:29 -0800 |
commit | 66bdbc3b969083b9d647abdf72784be64a125949 (patch) | |
tree | 9f2f1c6eb3d0569926420459c2c9afda50c66fd0 /src/mbgl/programs/program.hpp | |
parent | 36210fe4e9c68a52dedc90548d90e77cf39a2228 (diff) | |
download | qtlocation-mapboxgl-66bdbc3b969083b9d647abdf72784be64a125949.tar.gz |
[core] Introduce gl::Program template
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 |