From f02c572618bdca669c61cd3cb51a8b85e0fc6657 Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Thu, 8 May 2014 14:25:36 -0700 Subject: [PATCH 01/12] clear xcode caches if they appear older than a day - refs #174 --- Makefile | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index c16c3f87c..c1310d155 100644 --- a/Makefile +++ b/Makefile @@ -51,18 +51,21 @@ run-linux: linux ##### Xcode projects ########################################################### +clear_xcode_cache: + @if [[ -d ~/Library/Developer/Xcode/DerivedData/ ]]; then echo 'clearing files in xcode cache older than one day'; find ~/Library/Developer/Xcode/DerivedData/* -mtime +1 | xargs rm -rf; fi + # build Mac OS X project for Xcode -xproj: config.gypi macosx/llmr-app.gyp +xproj: config.gypi macosx/llmr-app.gyp clear_xcode_cache deps/run_gyp macosx/llmr-app.gyp --depth=. --generator-output=./build -f xcode open ./build/macosx/llmr-app.xcodeproj # build iOS project for Xcode -iproj: config.gypi ios/llmr-app.gyp +iproj: config.gypi ios/llmr-app.gyp clear_xcode_cache deps/run_gyp ios/llmr-app.gyp --depth=. --generator-output=./build -f xcode open ./build/ios/llmr-app.xcodeproj # build Linux project for Xcode (Runs on Mac OS X too, but without platform-specific code) -lproj: config.gypi linux/llmr-app.gyp +lproj: config.gypi linux/llmr-app.gyp clear_xcode_cache deps/run_gyp linux/llmr-app.gyp --depth=. --generator-output=./build -f xcode open ./build/linux/llmr-app.xcodeproj From 53decedf85b847d41f067c3a2194c65eb4ccc1db Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Fri, 9 May 2014 14:08:58 -0700 Subject: [PATCH 02/12] more selective cache clear --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c1310d155..fd4d7d02b 100644 --- a/Makefile +++ b/Makefile @@ -52,7 +52,7 @@ run-linux: linux ##### Xcode projects ########################################################### clear_xcode_cache: - @if [[ -d ~/Library/Developer/Xcode/DerivedData/ ]]; then echo 'clearing files in xcode cache older than one day'; find ~/Library/Developer/Xcode/DerivedData/* -mtime +1 | xargs rm -rf; fi + @if [[ -d ~/Library/Developer/Xcode/DerivedData/ ]]; then echo 'clearing files in ~/Library/Developer/Xcode/DerivedData/ older than one day'; find ~/Library/Developer/Xcode/DerivedData/llmr-app-* -mtime +1 | xargs rm -rf; fi # build Mac OS X project for Xcode xproj: config.gypi macosx/llmr-app.gyp clear_xcode_cache From 6668b9b303f01eb73cc044abf26e9b3e017463c1 Mon Sep 17 00:00:00 2001 From: "Justin R. Miller" Date: Tue, 13 May 2014 11:01:32 -0700 Subject: [PATCH 03/12] keep view controller self-contained for state save/restore --- ios/MBXAppDelegate.m | 13 +------------ ios/MBXViewController.mm | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/ios/MBXAppDelegate.m b/ios/MBXAppDelegate.m index aa048ca67..0fbcc6e81 100644 --- a/ios/MBXAppDelegate.m +++ b/ios/MBXAppDelegate.m @@ -21,15 +21,4 @@ return YES; } -- (void)applicationDidEnterBackground:(UIApplication *)application -{ - [(MBXViewController *)self.window.rootViewController saveState]; -} - -- (void)applicationWillEnterForeground:(UIApplication *)application -{ - [(MBXViewController *)self.window.rootViewController restoreState]; -} - - -@end \ No newline at end of file +@end diff --git a/ios/MBXViewController.mm b/ios/MBXViewController.mm index a8e710f31..9c4b5d2fe 100644 --- a/ios/MBXViewController.mm +++ b/ios/MBXViewController.mm @@ -36,6 +36,19 @@ MBXViewController *viewController = nullptr; #pragma mark - Setup +- (id)init +{ + self = [super init]; + + if (self) + { + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveState) name:UIApplicationDidEnterBackgroundNotification object:nil]; + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(restoreState) name:UIApplicationWillEnterForegroundNotification object:nil]; + } + + return self; +} + - (void)loadView { [super loadView]; @@ -252,6 +265,8 @@ MBXViewController *viewController = nullptr; - (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; + if (settings) { // Save settings From 5c894884296a43caa21821eec8317af612a58047 Mon Sep 17 00:00:00 2001 From: "Justin R. Miller" Date: Tue, 13 May 2014 11:05:18 -0700 Subject: [PATCH 04/12] hide more API --- ios/MBXViewController.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/ios/MBXViewController.h b/ios/MBXViewController.h index 64021c2de..924d3af60 100644 --- a/ios/MBXViewController.h +++ b/ios/MBXViewController.h @@ -2,7 +2,4 @@ @interface MBXViewController : UIViewController -- (void)saveState; -- (void)restoreState; - @end From 854de240553e3b0cea428339acb38c5a6c5f8f9d Mon Sep 17 00:00:00 2001 From: Dane Springmeyer Date: Tue, 13 May 2014 12:12:12 -0700 Subject: [PATCH 05/12] push improvement for smart cache clearing from @wsnook --- Makefile | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index c83d2e694..c11b64160 100644 --- a/Makefile +++ b/Makefile @@ -53,6 +53,17 @@ run-linux: linux ##### Xcode projects ########################################################### +clear_xcode_cache: + @CUSTOM_DD=`defaults read com.apple.dt.Xcode IDECustomDerivedDataLocation 2>/dev/null`; \ + if [[ $$CUSTOM_DD ]]; then \ + echo clearing files in $$CUSTOM_DD older than one day; \ + find $$CUSTOM_DD/llmr-app-* -mtime +1 | xargs rm -rf; \ + fi; \ + if [[ -d ~/Library/Developer/Xcode/DerivedData/ ]] && [[ ! $$CUSTOM_DD ]]; then \ + echo 'clearing files in ~/Library/Developer/Xcode/DerivedData/llmr-app-* older than one day'; \ + find ~/Library/Developer/Xcode/DerivedData/llmr-app-* -mtime +1 | xargs rm -rf; \ + fi + clear_xcode_cache: @if [[ -d ~/Library/Developer/Xcode/DerivedData/ ]]; then echo 'clearing files in ~/Library/Developer/Xcode/DerivedData/ older than one day'; find ~/Library/Developer/Xcode/DerivedData/llmr-app-* -mtime +1 | xargs rm -rf; fi @@ -74,13 +85,12 @@ lproj: config.gypi linux/llmr-app.gyp clear_xcode_cache node ##### Maintenace operations #################################################### -clean: +clean: clear_xcode_cache -rm -rf ./build/Release -rm -rf ./build/Debug -rm -f include/llmr/shader/shaders.hpp -rm -f include/llmr/style/resources.hpp -rm -f src/style/resources.cpp - -rm -rf ~/Library/Developer/Xcode/DerivedData/llmr* distclean: clean -rm -rf ./build From 3a7914261e0e6fd81302ca16b127b722586dcf94 Mon Sep 17 00:00:00 2001 From: "Justin R. Miller" Date: Tue, 13 May 2014 12:28:54 -0700 Subject: [PATCH 06/12] fix erroneous abort of raster rendering --- src/map/map.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/map/map.cpp b/src/map/map.cpp index 1d797baaf..9d1537538 100644 --- a/src/map/map.cpp +++ b/src/map/map.cpp @@ -528,7 +528,7 @@ void Map::renderLayer(const LayerDescription& layer_desc, RenderPass pass) { break; case BucketType::Raster: if (pass == Translucent) return; - if (is_invisible(style.computed.lines, layer_desc)) return; + if (is_invisible(style.computed.rasters, layer_desc)) return; break; default: break; From 7447b03ee7729a5394602d2c36626e11e298ac9a Mon Sep 17 00:00:00 2001 From: "Justin R. Miller" Date: Tue, 13 May 2014 12:35:24 -0700 Subject: [PATCH 07/12] remove accidental duplicate target --- Makefile | 3 --- 1 file changed, 3 deletions(-) diff --git a/Makefile b/Makefile index c11b64160..83c77da71 100644 --- a/Makefile +++ b/Makefile @@ -64,9 +64,6 @@ clear_xcode_cache: find ~/Library/Developer/Xcode/DerivedData/llmr-app-* -mtime +1 | xargs rm -rf; \ fi -clear_xcode_cache: - @if [[ -d ~/Library/Developer/Xcode/DerivedData/ ]]; then echo 'clearing files in ~/Library/Developer/Xcode/DerivedData/ older than one day'; find ~/Library/Developer/Xcode/DerivedData/llmr-app-* -mtime +1 | xargs rm -rf; fi - # build Mac OS X project for Xcode xproj: config.gypi macosx/llmr-app.gyp clear_xcode_cache node deps/run_gyp macosx/llmr-app.gyp --depth=. --generator-output=./build -f xcode From 05a330f347e16dc310e3dd3fbdb3b27007c18fb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Tue, 13 May 2014 16:48:23 +0200 Subject: [PATCH 08/12] make translate property zoom independent if you want a zoom-dependent translation, you can use a function refs #189 --- include/llmr/renderer/painter.hpp | 2 +- src/renderer/painter.cpp | 17 +++++++---------- src/renderer/painter_fill.cpp | 4 ++-- src/renderer/painter_line.cpp | 6 +++--- src/renderer/painter_point.cpp | 6 +++--- src/renderer/painter_text.cpp | 6 +++--- 6 files changed, 19 insertions(+), 22 deletions(-) diff --git a/include/llmr/renderer/painter.hpp b/include/llmr/renderer/painter.hpp index d236ead44..5dbc97143 100644 --- a/include/llmr/renderer/painter.hpp +++ b/include/llmr/renderer/painter.hpp @@ -88,7 +88,7 @@ public: bool needsAnimation() const; private: void setupShaders(); - void translateLayer(std::array translation, bool reverse = false); + void translateLayer(std::array translation, const Tile::ID &id, bool reverse = false); void prepareTile(const Tile& tile); void useProgram(uint32_t program); diff --git a/src/renderer/painter.cpp b/src/renderer/painter.cpp index 6adbc71c4..6d85af4be 100644 --- a/src/renderer/painter.cpp +++ b/src/renderer/painter.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -170,17 +171,13 @@ void Painter::renderTileLayer(const Tile& tile, const LayerDescription &layer_de } } -void Painter::translateLayer(std::array translation, bool reverse) { +void Painter::translateLayer(const std::array translation, const Tile::ID &id, bool reverse) { if (translation[0] || translation[1]) { - if (reverse) { - translation[0] *= -1; - translation[1] *= -1; - } - matrix::translate(matrix, - matrix, - translation[0] / map.getState().getPixelRatio(), - translation[1] / map.getState().getPixelRatio(), - 0); + const int direction = reverse ? -1 : 1; + // TODO: Get rid of the 8 (scaling from 4096 to tile size) + const double factor = direction * ((double)(1 << id.z)) / map.getState().getScale() / + map.getState().getPixelRatio() * (4096.0 / util::tileSize); + matrix::translate(matrix, matrix, translation[0] * factor, translation[1] * factor, 0); } } diff --git a/src/renderer/painter_fill.cpp b/src/renderer/painter_fill.cpp index 921947857..442f627a5 100644 --- a/src/renderer/painter_fill.cpp +++ b/src/renderer/painter_fill.cpp @@ -35,7 +35,7 @@ void Painter::renderFill(FillBucket& bucket, const std::string& layer_name, cons stroke_color = fill_color; } - translateLayer(properties.translate); + translateLayer(properties.translate, id); // Because we're drawing top-to-bottom, and we update the stencil mask // below, we have to draw the outline first (!) @@ -139,5 +139,5 @@ void Painter::renderFill(FillBucket& bucket, const std::string& layer_name, cons bucket.drawVertices(*outlineShader); } - translateLayer(properties.translate, true); + translateLayer(properties.translate, id, true); } diff --git a/src/renderer/painter_line.cpp b/src/renderer/painter_line.cpp index 1998e5584..ccd916c52 100644 --- a/src/renderer/painter_line.cpp +++ b/src/renderer/painter_line.cpp @@ -4,7 +4,7 @@ using namespace llmr; -void Painter::renderLine(LineBucket& bucket, const std::string& layer_name, const Tile::ID& /*id*/) { +void Painter::renderLine(LineBucket& bucket, const std::string& layer_name, const Tile::ID& id) { // Abort early. if (pass == Opaque) return; if (!bucket.hasData()) return; @@ -33,7 +33,7 @@ void Painter::renderLine(LineBucket& bucket, const std::string& layer_name, cons float dash_length = properties.dash_array[0]; float dash_gap = properties.dash_array[1]; - translateLayer(properties.translate); + translateLayer(properties.translate, id); glDepthRange(strata, 1.0f); @@ -88,5 +88,5 @@ void Painter::renderLine(LineBucket& bucket, const std::string& layer_name, cons bucket.drawLines(*lineShader); } - translateLayer(properties.translate, true); + translateLayer(properties.translate, id, true); } diff --git a/src/renderer/painter_point.cpp b/src/renderer/painter_point.cpp index d54c66be9..2bb2da672 100644 --- a/src/renderer/painter_point.cpp +++ b/src/renderer/painter_point.cpp @@ -5,7 +5,7 @@ using namespace llmr; -void Painter::renderPoint(PointBucket& bucket, const std::string& layer_name, const Tile::ID& /*id&*/) { +void Painter::renderPoint(PointBucket& bucket, const std::string& layer_name, const Tile::ID& id) { // Abort early. if (!bucket.hasData()) return; if (pass == Opaque) return; @@ -17,7 +17,7 @@ void Painter::renderPoint(PointBucket& bucket, const std::string& layer_name, co const PointProperties& properties = point_properties_it->second; if (!properties.enabled) return; - translateLayer(properties.translate); + translateLayer(properties.translate, id); Color color = properties.color; color[0] *= properties.opacity; @@ -76,5 +76,5 @@ void Painter::renderPoint(PointBucket& bucket, const std::string& layer_name, co bucket.drawPoints(*pointShader); } - translateLayer(properties.translate, true); + translateLayer(properties.translate, id, true); } diff --git a/src/renderer/painter_text.cpp b/src/renderer/painter_text.cpp index 092b74b09..7d2a2d2ae 100644 --- a/src/renderer/painter_text.cpp +++ b/src/renderer/painter_text.cpp @@ -4,7 +4,7 @@ using namespace llmr; -void Painter::renderText(TextBucket& bucket, const std::string& layer_name, const Tile::ID& /*id*/) { +void Painter::renderText(TextBucket& bucket, const std::string& layer_name, const Tile::ID& id) { // Abort early. if (pass == Opaque) return; if (!bucket.hasData()) return; @@ -16,7 +16,7 @@ void Painter::renderText(TextBucket& bucket, const std::string& layer_name, cons const TextProperties& properties = text_properties_it->second; if (!properties.enabled) return; - translateLayer(properties.translate); + translateLayer(properties.translate, id); mat4 exMatrix; matrix::copy(exMatrix, projMatrix); @@ -110,5 +110,5 @@ void Painter::renderText(TextBucket& bucket, const std::string& layer_name, cons glDepthRange(strata + strata_epsilon, 1.0f); bucket.drawGlyphs(*textShader); - translateLayer(properties.translate, true); + translateLayer(properties.translate, id, true); } From d97e8899ae2be618d5ad0f325a471428f8ebe8fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Tue, 13 May 2014 18:41:22 +0200 Subject: [PATCH 09/12] add translate-anchor property --- include/llmr/style/properties.hpp | 7 +++++++ src/style/style.cpp | 1 + src/style/style_parser.cpp | 16 ++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/include/llmr/style/properties.hpp b/include/llmr/style/properties.hpp index 9a6d6d86d..22d5cf9cc 100644 --- a/include/llmr/style/properties.hpp +++ b/include/llmr/style/properties.hpp @@ -31,6 +31,11 @@ enum class Property { Linear = 4 }; +enum class TranslateAnchor : uint8_t { + Map = 1, + Viewport = 2 +}; + namespace functions { float null(float z, const std::vector&); @@ -121,6 +126,7 @@ struct FillProperties { struct TextClass { FunctionProperty enabled = true; std::array translate = {{ 0, 0 }}; + TranslateAnchor translateAnchor = TranslateAnchor::Map; Color color = {{ 0, 0, 0, 1 }}; Color halo = {{ 1, 1, 1, 0.75 }}; FunctionProperty haloRadius = 0.25f; @@ -133,6 +139,7 @@ struct TextClass { struct TextProperties { bool enabled = true; std::array translate = {{ 0, 0 }}; + TranslateAnchor translateAnchor = TranslateAnchor::Map; Color color = {{ 0, 0, 0, 1 }}; Color halo = {{ 1, 1, 1, 0.75 }}; float haloRadius = 0.25f; diff --git a/src/style/style.cpp b/src/style/style.cpp index a49311030..ecb86108e 100644 --- a/src/style/style.cpp +++ b/src/style/style.cpp @@ -97,6 +97,7 @@ void Style::cascade(float z) { text.enabled = layer.enabled.evaluate(z); text.translate = {{ layer.translate[0].evaluate(z), layer.translate[1].evaluate(z) }}; + text.translateAnchor = layer.translateAnchor; text.color = layer.color; text.size = layer.size.evaluate(z); text.halo = layer.halo; diff --git a/src/style/style_parser.cpp b/src/style/style_parser.cpp index 081dedce1..9860f56c6 100644 --- a/src/style/style_parser.cpp +++ b/src/style/style_parser.cpp @@ -523,6 +523,18 @@ PointClass StyleParser::parsePointClass(JSVal value) { return klass; } +TranslateAnchor parseTranslateAnchor(JSVal anchor) { + if (anchor.IsString()) { + std::string a { anchor.GetString(), anchor.GetStringLength() }; + if (a == "viewport") { + return TranslateAnchor::Viewport; + } else { + return TranslateAnchor::Map; + } + } else { + throw Style::exception("translate anchor must be a string"); + } +} TextClass StyleParser::parseTextClass(JSVal value) { TextClass klass; @@ -536,6 +548,10 @@ TextClass StyleParser::parseTextClass(JSVal value) { klass.translate = std::array {{ values[0], values[1] }}; } + if (value.HasMember("translate-anchor")) { + klass.translateAnchor = parseTranslateAnchor(value["translate-anchor"]); + } + if (value.HasMember("color")) { klass.color = parseColor(value["color"]); } From 32b21b050fe66c688d9b21f86197b8ac4cfaefdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Tue, 13 May 2014 18:41:37 +0200 Subject: [PATCH 10/12] do not define variables until they're needed --- src/util/mat4.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/util/mat4.cpp b/src/util/mat4.cpp index 44bd3edd7..e86c9e35e 100644 --- a/src/util/mat4.cpp +++ b/src/util/mat4.cpp @@ -87,16 +87,16 @@ void matrix::copy(mat4& out, const mat4& a) { } void matrix::translate(mat4& out, const mat4& a, float x, float y, float z) { - float a00, a01, a02, a03, - a10, a11, a12, a13, - a20, a21, a22, a23; - if (a == out) { out[12] = a[0] * x + a[4] * y + a[8] * z + a[12]; out[13] = a[1] * x + a[5] * y + a[9] * z + a[13]; out[14] = a[2] * x + a[6] * y + a[10] * z + a[14]; out[15] = a[3] * x + a[7] * y + a[11] * z + a[15]; } else { + float a00, a01, a02, a03, + a10, a11, a12, a13, + a20, a21, a22, a23; + a00 = a[0]; a01 = a[1]; a02 = a[2]; a03 = a[3]; a10 = a[4]; a11 = a[5]; a12 = a[6]; a13 = a[7]; a20 = a[8]; a21 = a[9]; a22 = a[10]; a23 = a[11]; From 351453871995fcac42fdbb02aa281e3ca9cf26f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Tue, 13 May 2014 19:02:22 +0200 Subject: [PATCH 11/12] make text layers respect the translate-anchor you can now specify "translate-anchor": "viewport" to have the text translated in screen coordinates rather than relative to the tile. The default value remains "translate-anchor": "map" refs #189 --- include/llmr/renderer/painter.hpp | 4 +++- src/renderer/painter.cpp | 28 +++++++++++++++++++++++++++- src/renderer/painter_text.cpp | 8 +++----- 3 files changed, 33 insertions(+), 7 deletions(-) diff --git a/include/llmr/renderer/painter.hpp b/include/llmr/renderer/painter.hpp index 5dbc97143..2aa0353ca 100644 --- a/include/llmr/renderer/painter.hpp +++ b/include/llmr/renderer/painter.hpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -88,7 +89,8 @@ public: bool needsAnimation() const; private: void setupShaders(); - void translateLayer(std::array translation, const Tile::ID &id, bool reverse = false); + void translateLayer(const std::array &translation, const Tile::ID &id, bool reverse = false); + mat4 translatedMatrix(const std::array &translation, const Tile::ID &id, TranslateAnchor anchor = TranslateAnchor::Map); void prepareTile(const Tile& tile); void useProgram(uint32_t program); diff --git a/src/renderer/painter.cpp b/src/renderer/painter.cpp index 6d85af4be..2d9606b6f 100644 --- a/src/renderer/painter.cpp +++ b/src/renderer/painter.cpp @@ -171,7 +171,7 @@ void Painter::renderTileLayer(const Tile& tile, const LayerDescription &layer_de } } -void Painter::translateLayer(const std::array translation, const Tile::ID &id, bool reverse) { +void Painter::translateLayer(const std::array &translation, const Tile::ID &id, bool reverse) { if (translation[0] || translation[1]) { const int direction = reverse ? -1 : 1; // TODO: Get rid of the 8 (scaling from 4096 to tile size) @@ -181,6 +181,32 @@ void Painter::translateLayer(const std::array translation, const Tile: } } +mat4 Painter::translatedMatrix(const std::array &translation, const Tile::ID &id, TranslateAnchor anchor) { + if (translation[0] == 0 && translation[1] == 0) { + return matrix; + } else { + // TODO: Get rid of the 8 (scaling from 4096 to tile size) + const double factor = ((double)(1 << id.z)) / map.getState().getScale() / + map.getState().getPixelRatio() * (4096.0 / util::tileSize); + + mat4 result; + if (anchor == TranslateAnchor::Viewport) { + const double sin_a = sin(-map.getState().getAngle()); + const double cos_a = cos(-map.getState().getAngle()); + matrix::translate(result, matrix, + factor * (translation[0] * cos_a - translation[1] * sin_a), + factor * (translation[0] * sin_a + translation[1] * cos_a), + 0); + } else { + matrix::translate(result, matrix, + factor * translation[0], + factor * translation[1], + 0); + } + return result; + } +} + void Painter::renderMatte() { gl::group group("matte"); glDisable(GL_DEPTH_TEST); diff --git a/src/renderer/painter_text.cpp b/src/renderer/painter_text.cpp index 7d2a2d2ae..a17f162e9 100644 --- a/src/renderer/painter_text.cpp +++ b/src/renderer/painter_text.cpp @@ -16,8 +16,6 @@ void Painter::renderText(TextBucket& bucket, const std::string& layer_name, cons const TextProperties& properties = text_properties_it->second; if (!properties.enabled) return; - translateLayer(properties.translate, id); - mat4 exMatrix; matrix::copy(exMatrix, projMatrix); if (bucket.geom_desc.path == TextPathType::Curve) { @@ -33,8 +31,10 @@ void Painter::renderText(TextBucket& bucket, const std::string& layer_name, cons float fontSize = fmin(properties.size, bucket.geom_desc.font_size); matrix::scale(exMatrix, exMatrix, fontSize / 24.0f, fontSize / 24.0f, 1.0f); + const mat4 vtxMatrix = translatedMatrix(properties.translate, id, properties.translateAnchor); + useProgram(textShader->program); - textShader->setMatrix(matrix); + textShader->setMatrix(vtxMatrix); textShader->setExtrudeMatrix(exMatrix); map.getGlyphAtlas().bind(); @@ -109,6 +109,4 @@ void Painter::renderText(TextBucket& bucket, const std::string& layer_name, cons textShader->setBuffer((256.0f - 64.0f) / 256.0f); glDepthRange(strata + strata_epsilon, 1.0f); bucket.drawGlyphs(*textShader); - - translateLayer(properties.translate, id, true); } From 164aef8b26de0ab371b03e806150c1f426e30c42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Wed, 14 May 2014 13:01:07 +0200 Subject: [PATCH 12/12] add hipchat notifications for build status --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index ead94415a..796d2f2c5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,3 +26,6 @@ script: - make llmr - make linux - make run-tests + +notifications: +- hipchat: WB52YkcbCGMbNcStsGeaoRO7cyBSK4wX2ZHo2Y4b@GL