From 9d276f3b0f0e5f1b5089a6cd727927361e6634ac Mon Sep 17 00:00:00 2001 From: John Firebaugh Date: Mon, 5 Jun 2017 12:15:27 -0700 Subject: [core] Dynamic program compilation for data-driven properties --- src/mbgl/programs/program_parameters.cpp | 30 +++++++++++++++++++++++------- 1 file changed, 23 insertions(+), 7 deletions(-) (limited to 'src/mbgl/programs/program_parameters.cpp') diff --git a/src/mbgl/programs/program_parameters.cpp b/src/mbgl/programs/program_parameters.cpp index f9f680ac1e..e76ec4be71 100644 --- a/src/mbgl/programs/program_parameters.cpp +++ b/src/mbgl/programs/program_parameters.cpp @@ -7,7 +7,7 @@ namespace mbgl { ProgramParameters::ProgramParameters(const float pixelRatio, const bool overdraw, - std::string cacheDir_) + optional cacheDir_) : defines([&] { std::ostringstream ss; ss.imbue(std::locale("C")); @@ -18,15 +18,31 @@ ProgramParameters::ProgramParameters(const float pixelRatio, } return ss.str(); }()), - hash(std::hash()(defines)), cacheDir(std::move(cacheDir_)) { } -std::string ProgramParameters::cachePath(const char* name) const { - std::ostringstream ss; - ss << cacheDir << "/com.mapbox.gl.shader." << name << "." << std::setfill('0') - << std::setw(sizeof(size_t) * 2) << std::hex << hash << ".pbf"; - return ss.str(); +const std::string& ProgramParameters::getDefines() const { + return defines; +} + +optional ProgramParameters::cachePath(const char* name) const { + if (!cacheDir) { + return {}; + } else { + std::ostringstream ss; + ss << *cacheDir << "/com.mapbox.gl.shader." << name << "." << std::setfill('0') + << std::setw(sizeof(size_t) * 2) << std::hex << std::hash()(defines) << ".pbf"; + return ss.str(); + } +} + +ProgramParameters ProgramParameters::withAdditionalDefines(const std::vector& additionalDefines) const { + ProgramParameters result(*this); + for (const auto& define : additionalDefines) { + result.defines += define; + result.defines += "\n"; + } + return result; } } // namespace mbgl -- cgit v1.2.1