[core] cleanup ProgramParameters
This commit is contained in:
@@ -150,6 +150,7 @@ set(MBGL_CORE_FILES
|
||||
src/mbgl/programs/line_program.cpp
|
||||
src/mbgl/programs/line_program.hpp
|
||||
src/mbgl/programs/program.hpp
|
||||
src/mbgl/programs/program_parameters.cpp
|
||||
src/mbgl/programs/program_parameters.hpp
|
||||
src/mbgl/programs/programs.hpp
|
||||
src/mbgl/programs/raster_program.cpp
|
||||
|
||||
@@ -55,11 +55,11 @@ public:
|
||||
shaders::vertexSource(programParameters, vertexSource_);
|
||||
const std::string fragmentSource =
|
||||
shaders::fragmentSource(programParameters, fragmentSource_);
|
||||
const std::string cachePath =
|
||||
shaders::programCachePath(programParameters, name);
|
||||
const std::string identifier =
|
||||
shaders::programIdentifier(vertexSource, fragmentSource_);
|
||||
|
||||
const std::string cachePath = programParameters.cachePath(name);
|
||||
|
||||
try {
|
||||
if (auto cachedBinaryProgram = util::readFile(cachePath)) {
|
||||
const BinaryProgram binaryProgram(std::move(*cachedBinaryProgram));
|
||||
|
||||
32
src/mbgl/programs/program_parameters.cpp
Normal file
32
src/mbgl/programs/program_parameters.cpp
Normal file
@@ -0,0 +1,32 @@
|
||||
#include <mbgl/programs/program_parameters.hpp>
|
||||
|
||||
#include <iomanip>
|
||||
#include <sstream>
|
||||
|
||||
namespace mbgl {
|
||||
|
||||
ProgramParameters::ProgramParameters(const float pixelRatio,
|
||||
const bool overdraw,
|
||||
std::string cacheDir_)
|
||||
: defines([&] {
|
||||
std::ostringstream ss;
|
||||
ss.imbue(std::locale("C"));
|
||||
ss.setf(std::ios_base::showpoint);
|
||||
ss << "#define DEVICE_PIXEL_RATIO " << pixelRatio << std::endl;
|
||||
if (overdraw) {
|
||||
ss << "#define OVERDRAW_INSPECTOR" << std::endl;
|
||||
}
|
||||
return ss.str();
|
||||
}()),
|
||||
hash(std::hash<std::string>()(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();
|
||||
}
|
||||
|
||||
} // namespace mbgl
|
||||
@@ -6,16 +6,15 @@ namespace mbgl {
|
||||
|
||||
class ProgramParameters {
|
||||
public:
|
||||
ProgramParameters(float pixelRatio_ = 1.0,
|
||||
bool overdraw_ = false,
|
||||
const std::string& cacheDir_ = "")
|
||||
: pixelRatio(pixelRatio_), overdraw(overdraw_), cacheDir(cacheDir_) {
|
||||
}
|
||||
ProgramParameters(float pixelRatio, bool overdraw, std::string cacheDir);
|
||||
|
||||
const float pixelRatio;
|
||||
const bool overdraw;
|
||||
const std::string defines;
|
||||
|
||||
std::string cachePath(const char* name) const;
|
||||
|
||||
private:
|
||||
const std::size_t hash;
|
||||
const std::string cacheDir;
|
||||
};
|
||||
|
||||
} // namespace mbgl
|
||||
|
||||
|
||||
@@ -31,8 +31,8 @@ public:
|
||||
symbolIcon(context, programParameters),
|
||||
symbolIconSDF(context, programParameters),
|
||||
symbolGlyph(context, programParameters),
|
||||
debug(context, ProgramParameters(programParameters.pixelRatio, false, programParameters.cacheDir)),
|
||||
collisionBox(context, ProgramParameters(programParameters.pixelRatio, false, programParameters.cacheDir)) {
|
||||
debug(context, programParameters),
|
||||
collisionBox(context, programParameters) {
|
||||
}
|
||||
|
||||
CircleProgram circle;
|
||||
|
||||
@@ -9,30 +9,12 @@
|
||||
namespace mbgl {
|
||||
namespace shaders {
|
||||
|
||||
static std::string pixelRatioDefine(const ProgramParameters& parameters) {
|
||||
std::ostringstream pixelRatioSS;
|
||||
pixelRatioSS.imbue(std::locale("C"));
|
||||
pixelRatioSS.setf(std::ios_base::showpoint);
|
||||
pixelRatioSS << parameters.pixelRatio;
|
||||
return std::string("#define DEVICE_PIXEL_RATIO ") + pixelRatioSS.str() + "\n";
|
||||
}
|
||||
|
||||
std::string fragmentSource(const ProgramParameters& parameters, const char* fragmentSource) {
|
||||
std::string source = pixelRatioDefine(parameters) + fragmentPrelude + 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 source;
|
||||
return parameters.defines + fragmentPrelude + fragmentSource;
|
||||
}
|
||||
|
||||
std::string vertexSource(const ProgramParameters& parameters, const char* vertexSource) {
|
||||
return pixelRatioDefine(parameters) + vertexPrelude + vertexSource;
|
||||
}
|
||||
|
||||
std::string programCachePath(const ProgramParameters& parameters, const char* name) {
|
||||
return parameters.cacheDir + "/com.mapbox.gl.shader." + name +
|
||||
(parameters.overdraw ? ".overdraw.pbf" : ".pbf");
|
||||
return parameters.defines + vertexPrelude + vertexSource;
|
||||
}
|
||||
|
||||
std::string programIdentifier(const std::string& vertexSource, const std::string& fragmentSource) {
|
||||
|
||||
@@ -10,7 +10,6 @@ namespace shaders {
|
||||
|
||||
std::string fragmentSource(const ProgramParameters&, const char* fragmentSource);
|
||||
std::string vertexSource(const ProgramParameters&, const char* vertexSource);
|
||||
std::string programCachePath(const ProgramParameters&, const char* name);
|
||||
std::string programIdentifier(const std::string& vertexSource, const std::string& fragmentSource);
|
||||
|
||||
} // namespace shaders
|
||||
|
||||
Reference in New Issue
Block a user