summaryrefslogtreecommitdiff
path: root/src/renderer
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2014-08-29 15:31:02 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2014-09-03 18:12:40 -0700
commit586cb9144af29e1a384de1c3d5162e916954098e (patch)
treec4faf6f6da07043a315bb78adf6df87eb62d7768 /src/renderer
parent71c31cee2499d44fcd590136d15c5da7fbfb65ec (diff)
downloadqtlocation-mapboxgl-586cb9144af29e1a384de1c3d5162e916954098e.tar.gz
Make renderLine more similar to JS
Diffstat (limited to 'src/renderer')
-rw-r--r--src/renderer/painter_line.cpp32
1 files changed, 14 insertions, 18 deletions
diff --git a/src/renderer/painter_line.cpp b/src/renderer/painter_line.cpp
index df2fb88193..33bf279ca0 100644
--- a/src/renderer/painter_line.cpp
+++ b/src/renderer/painter_line.cpp
@@ -15,9 +15,9 @@ void Painter::renderLine(LineBucket& bucket, std::shared_ptr<StyleLayer> layer_d
const LineProperties &properties = layer_desc->getProperties<LineProperties>();
+ float antialiasing = 1 / map.getState().getPixelRatio();
float width = properties.width;
float offset = properties.offset / 2;
- float antialiasing = 1 / map.getState().getPixelRatio();
float blur = properties.blur + antialiasing;
// These are the radii of the line. We are limiting it to 16, which will result
@@ -34,6 +34,7 @@ void Painter::renderLine(LineBucket& bucket, std::shared_ptr<StyleLayer> layer_d
float dash_length = properties.dash_array[0];
float dash_gap = properties.dash_array[1];
+ float ratio = map.getState().getPixelRatio();
mat4 vtxMatrix = translatedMatrix(matrix, properties.translate, id, properties.translateAnchor);
depthRange(strata, 1.0f);
@@ -67,29 +68,23 @@ void Painter::renderLine(LineBucket& bucket, std::shared_ptr<StyleLayer> layer_d
if (properties.image.size() && sprite) {
SpriteAtlas &spriteAtlas = *map.getSpriteAtlas();
Rect<uint16_t> imagePos = spriteAtlas.getImage(properties.image, *sprite);
-
+
float factor = 8.0 / std::pow(2, map.getState().getIntegerZoom() - id.z);
-
float fade = std::fmod(map.getState().getZoom(), 1.0);
std::array<float, 2> imageSize = {{
imagePos.w * factor,
imagePos.h * factor
- }
- };
-
- std::array<float, 2> offset = {{
- (float)std::fmod(id.x * 4096, imageSize[0]),
- (float)std::fmod(id.y * 4096, imageSize[1])
- }
- };
+ }};
+
useProgram(linepatternShader->program);
+
linepatternShader->setMatrix(vtxMatrix);
linepatternShader->setExtrudeMatrix(extrudeMatrix);
- lineShader->setDashArray({{ dash_length, dash_gap }});
linepatternShader->setLineWidth({{ outset, inset }});
- linepatternShader->setRatio(map.getState().getPixelRatio());
-
+ linepatternShader->setRatio(ratio);
+ linepatternShader->setBlur(blur);
+
linepatternShader->setPatternSize(imageSize);
linepatternShader->setPatternTopLeft({{
float(imagePos.x) / spriteAtlas.getWidth(),
@@ -99,8 +94,6 @@ void Painter::renderLine(LineBucket& bucket, std::shared_ptr<StyleLayer> layer_d
float(imagePos.x + imagePos.w) / spriteAtlas.getWidth(),
float(imagePos.y + imagePos.h) / spriteAtlas.getHeight(),
}});
- linepatternShader->setOffset(offset);
- linepatternShader->setGamma(map.getState().getPixelRatio());
linepatternShader->setFade(fade);
spriteAtlas.bind(true);
@@ -110,13 +103,16 @@ void Painter::renderLine(LineBucket& bucket, std::shared_ptr<StyleLayer> layer_d
} else {
useProgram(lineShader->program);
+
lineShader->setMatrix(vtxMatrix);
lineShader->setExtrudeMatrix(extrudeMatrix);
- lineShader->setDashArray({{ dash_length, dash_gap }});
lineShader->setLineWidth({{ outset, inset }});
- lineShader->setRatio(map.getState().getPixelRatio());
+ lineShader->setRatio(ratio);
lineShader->setBlur(blur);
+
lineShader->setColor(color);
+ lineShader->setDashArray({{ dash_length, dash_gap }});
+
bucket.drawLines(*lineShader);
}
}