Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Commit

Permalink
[core] cleanup ProgramParameters
Browse files Browse the repository at this point in the history
  • Loading branch information
kkaefer authored and jfirebaugh committed Jun 6, 2017
1 parent cd4bd95 commit 977b55d
Show file tree
Hide file tree
Showing 7 changed files with 46 additions and 33 deletions.
1 change: 1 addition & 0 deletions cmake/core-files.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,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
Expand Down
4 changes: 2 additions & 2 deletions src/mbgl/gl/program.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,11 @@ class Program {
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));
Expand Down
32 changes: 32 additions & 0 deletions src/mbgl/programs/program_parameters.cpp
Original file line number Diff line number Diff line change
@@ -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
15 changes: 7 additions & 8 deletions src/mbgl/programs/program_parameters.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,15 @@ namespace mbgl {

class ProgramParameters {
public:
ProgramParameters(float pixelRatio_ = 1.0,
bool overdraw_ = false,
std::string cacheDir_ = "")
: pixelRatio(pixelRatio_), overdraw(overdraw_), cacheDir(std::move(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

4 changes: 2 additions & 2 deletions src/mbgl/programs/programs.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ class Programs {
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;
Expand Down
22 changes: 2 additions & 20 deletions src/mbgl/shaders/shaders.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
1 change: 0 additions & 1 deletion src/mbgl/shaders/shaders.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 977b55d

Please sign in to comment.