Files
MapLibreParticleLab/src/mbgl/programs/program_parameters.cpp
Tim Sylvester 82ec59a2b0 Metal setup merge (#1616)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Alex Cristici <alex.cristici@gmail.com>
Co-authored-by: mwilsnd <mwilsnd@gmail.com>
Co-authored-by: Stefan Karschti <stefan.karschti@gmail.com>
Co-authored-by: Bart Louwers <bart@emeel.net>
Co-authored-by: Alex Cristici <alex@skoon.energy>
Co-authored-by: Bart Louwers <bart.louwers@gmail.com>
Co-authored-by: Wei Chen <alanchenboy@gmail.com>
Co-authored-by: Siarhei Fedartsou <siarhei.fedartsou@gmail.com>
Co-authored-by: tdcosta100 <tdcosta100@gmail.com>
2023-09-13 18:35:20 +00:00

74 lines
2.5 KiB
C++

#include <mbgl/programs/program_parameters.hpp>
#include <mbgl/util/string.hpp>
#include <string_view>
#include <stdexcept>
namespace mbgl {
ProgramParameters::ProgramParameters(const float pixelRatio, const bool overdraw)
: defines(2) {
defines["DEVICE_PIXEL_RATIO"] = util::toString(pixelRatio, true);
if (overdraw) {
defines["OVERDRAW_INSPECTOR"] = std::string();
}
}
ProgramParameters ProgramParameters::withShaderSource(const ProgramSource& source) const noexcept {
assert(gfx::Backend::Type::TYPE_MAX != source.backend);
ProgramParameters params = *this;
params.userSources[static_cast<size_t>(source.backend)] = source;
return params;
}
ProgramParameters ProgramParameters::withDefaultSource(const ProgramSource& source) const noexcept {
assert(gfx::Backend::Type::TYPE_MAX != source.backend);
ProgramParameters params = *this;
params.defaultSources[static_cast<size_t>(source.backend)] = source;
return params;
}
const std::string& ProgramParameters::getDefinesString() const {
if (definesStr.empty() && !defines.empty()) {
definesStr.assign(defines.size() * 32, '\0');
definesStr.clear();
for (const auto& pair : defines) {
definesStr.append("#define ").append(pair.first);
if (!pair.second.empty()) {
definesStr.append(" ").append(pair.second);
}
definesStr.append("\n");
}
}
return definesStr;
}
const std::string& ProgramParameters::vertexSource(gfx::Backend::Type backend) const {
assert(gfx::Backend::Type::TYPE_MAX != backend);
if (userSources[static_cast<size_t>(backend)].vertex.length() > 0) {
return userSources[static_cast<size_t>(backend)].vertex;
} else if (defaultSources[static_cast<size_t>(backend)].vertex.length() > 0) {
return defaultSources[static_cast<size_t>(backend)].vertex;
} else {
throw std::runtime_error("No vertex shader source provided for selected backend!");
}
}
const std::string& ProgramParameters::fragmentSource(gfx::Backend::Type backend) const {
assert(gfx::Backend::Type::TYPE_MAX != backend);
if (userSources[static_cast<size_t>(backend)].fragment.length() > 0) {
return userSources[static_cast<size_t>(backend)].fragment;
} else if (defaultSources[static_cast<size_t>(backend)].fragment.length() > 0) {
return defaultSources[static_cast<size_t>(backend)].fragment;
} else {
throw std::runtime_error("No fragment shader source provided for selected backend!");
}
}
} // namespace mbgl