implement functions for line-image
This commit is contained in:
@@ -427,6 +427,7 @@ void Painter::renderBackground(util::ptr<StyleLayer> layer_desc) {
|
||||
-scale * state.getHeight() / 2);
|
||||
|
||||
patternShader->u_patternmatrix_a = matrixA;
|
||||
patternShader->u_patternmatrix_b = matrixB;
|
||||
|
||||
backgroundBuffer.bind();
|
||||
patternShader->bind(0);
|
||||
|
||||
@@ -112,19 +112,11 @@ void Painter::renderLine(LineBucket& bucket, util::ptr<StyleLayer> layer_desc, c
|
||||
|
||||
bucket.drawLineSDF(*linesdfShader);
|
||||
|
||||
} else if (properties.image.size()) {
|
||||
SpriteAtlasPosition imagePos = spriteAtlas.getPosition(properties.image, true);
|
||||
} else if (properties.image.low.size()) {
|
||||
SpriteAtlasPosition imagePosA = spriteAtlas.getPosition(properties.image.low, true);
|
||||
SpriteAtlasPosition imagePosB = spriteAtlas.getPosition(properties.image.high, true);
|
||||
|
||||
float factor = 8.0 / std::pow(2, state.getIntegerZoom() - id.z);
|
||||
float fade;
|
||||
if (state.getZoom() > lastIntegerZoom) {
|
||||
// zooming in
|
||||
fade = fraction + (1.0f - fraction) * t;
|
||||
factor *= 2.0;
|
||||
} else {
|
||||
// zooming out
|
||||
fade = fraction - fraction * t;
|
||||
}
|
||||
|
||||
useProgram(linepatternShader->program);
|
||||
|
||||
@@ -134,10 +126,13 @@ void Painter::renderLine(LineBucket& bucket, util::ptr<StyleLayer> layer_desc, c
|
||||
linepatternShader->u_ratio = ratio;
|
||||
linepatternShader->u_blur = blur;
|
||||
|
||||
linepatternShader->u_pattern_size = {{imagePos.size[0] * factor, imagePos.size[1]}};
|
||||
linepatternShader->u_pattern_tl = imagePos.tl;
|
||||
linepatternShader->u_pattern_br = imagePos.br;
|
||||
linepatternShader->u_fade = fade;
|
||||
linepatternShader->u_pattern_size_a = {{imagePosA.size[0] * factor * properties.image.lowScale, imagePosA.size[1]}};
|
||||
linepatternShader->u_pattern_tl_a = imagePosA.tl;
|
||||
linepatternShader->u_pattern_br_a = imagePosA.br;
|
||||
linepatternShader->u_pattern_size_b = {{imagePosB.size[0] * factor * properties.image.highScale, imagePosB.size[1]}};
|
||||
linepatternShader->u_pattern_tl_b = imagePosB.tl;
|
||||
linepatternShader->u_pattern_br_b = imagePosB.br;
|
||||
linepatternShader->u_fade = properties.image.t;
|
||||
linepatternShader->u_opacity = properties.opacity;
|
||||
|
||||
MBGL_CHECK_ERROR(glActiveTexture(GL_TEXTURE0));
|
||||
|
||||
@@ -2,9 +2,12 @@ uniform vec2 u_linewidth;
|
||||
uniform float u_point;
|
||||
uniform float u_blur;
|
||||
|
||||
uniform vec2 u_pattern_size;
|
||||
uniform vec2 u_pattern_tl;
|
||||
uniform vec2 u_pattern_br;
|
||||
uniform vec2 u_pattern_size_a;
|
||||
uniform vec2 u_pattern_tl_a;
|
||||
uniform vec2 u_pattern_br_a;
|
||||
uniform vec2 u_pattern_size_b;
|
||||
uniform vec2 u_pattern_tl_b;
|
||||
uniform vec2 u_pattern_br_b;
|
||||
uniform float u_fade;
|
||||
uniform float u_opacity;
|
||||
|
||||
@@ -24,13 +27,14 @@ void main() {
|
||||
// (v_linewidth.s)
|
||||
float alpha = clamp(min(dist - (u_linewidth.t - u_blur), u_linewidth.s - dist) / u_blur, 0.0, 1.0);
|
||||
|
||||
float x = mod(v_linesofar / u_pattern_size.x, 1.0);
|
||||
float y = 0.5 + (v_normal.y * u_linewidth.s / u_pattern_size.y);
|
||||
vec2 pos = mix(u_pattern_tl, u_pattern_br, vec2(x, y));
|
||||
float x2 = mod(x * 2.0, 1.0);
|
||||
vec2 pos2 = mix(u_pattern_tl, u_pattern_br, vec2(x2, y));
|
||||
float x_a = mod(v_linesofar / u_pattern_size_a.x, 1.0);
|
||||
float y_a = 0.5 + (v_normal.y * u_linewidth.s / u_pattern_size_a.y);
|
||||
vec2 pos_a = mix(u_pattern_tl_a, u_pattern_br_a, vec2(x_a, y_a));
|
||||
float x_b = mod(v_linesofar / u_pattern_size_b.x, 1.0);
|
||||
float y_b = 0.5 + (v_normal.y * u_linewidth.s / u_pattern_size_b.y);
|
||||
vec2 pos_b = mix(u_pattern_tl_b, u_pattern_br_b, vec2(x_b, y_b));
|
||||
|
||||
vec4 color = texture2D(u_image, pos) * (1.0 - u_fade) + u_fade * texture2D(u_image, pos2);
|
||||
vec4 color = mix(texture2D(u_image, pos_a), texture2D(u_image, pos_b), u_fade);
|
||||
|
||||
alpha *= u_opacity;
|
||||
|
||||
|
||||
@@ -15,9 +15,12 @@ public:
|
||||
UniformMatrix<4> u_matrix = {"u_matrix", *this};
|
||||
UniformMatrix<4> u_exmatrix = {"u_exmatrix", *this};
|
||||
Uniform<std::array<float, 2>> u_linewidth = {"u_linewidth", *this};
|
||||
Uniform<std::array<float, 2>> u_pattern_size = {"u_pattern_size", *this};
|
||||
Uniform<std::array<float, 2>> u_pattern_tl = {"u_pattern_tl", *this};
|
||||
Uniform<std::array<float, 2>> u_pattern_br = {"u_pattern_br", *this};
|
||||
Uniform<std::array<float, 2>> u_pattern_size_a = {"u_pattern_size_a", *this};
|
||||
Uniform<std::array<float, 2>> u_pattern_tl_a = {"u_pattern_tl_a", *this};
|
||||
Uniform<std::array<float, 2>> u_pattern_br_a = {"u_pattern_br_a", *this};
|
||||
Uniform<std::array<float, 2>> u_pattern_size_b = {"u_pattern_size_b", *this};
|
||||
Uniform<std::array<float, 2>> u_pattern_tl_b = {"u_pattern_tl_b", *this};
|
||||
Uniform<std::array<float, 2>> u_pattern_br_b = {"u_pattern_br_b", *this};
|
||||
Uniform<float> u_ratio = {"u_ratio", *this};
|
||||
Uniform<float> u_point = {"u_point", *this};
|
||||
Uniform<float> u_blur = {"u_blur", *this};
|
||||
|
||||
@@ -653,7 +653,7 @@ void StyleParser::parsePaint(JSVal value, ClassProperties &klass) {
|
||||
parseOptionalProperty<Function<float>>("line-blur", Key::LineBlur, klass, value);
|
||||
parseOptionalProperty<PropertyTransition>("line-blur-transition", Key::LineBlur, klass, value);
|
||||
parseOptionalProperty<Function<std::vector<float>>>("line-dasharray", Key::LineDashArray, klass, value);
|
||||
parseOptionalProperty<std::string>("line-image", Key::LineImage, klass, value);
|
||||
parseOptionalProperty<FadedStopsFunction<Faded<std::string>>>("line-image", Key::LineImage, klass, value);
|
||||
|
||||
parseOptionalProperty<Function<float>>("icon-opacity", Key::IconOpacity, klass, value);
|
||||
parseOptionalProperty<PropertyTransition>("icon-opacity-transition", Key::IconOpacity, klass, value);
|
||||
|
||||
@@ -39,7 +39,7 @@ struct LineProperties {
|
||||
float blur = 0;
|
||||
std::vector<float> dash_array;
|
||||
float dash_line_width = 1;
|
||||
std::string image;
|
||||
Faded<std::string> image;
|
||||
|
||||
inline bool isVisible() const {
|
||||
return opacity > 0 && color[3] > 0 && width > 0;
|
||||
|
||||
Reference in New Issue
Block a user