diff --git a/include/mbgl/shaders/mtl/circle.hpp b/include/mbgl/shaders/mtl/circle.hpp index fc049990c..2fbcf303b 100644 --- a/include/mbgl/shaders/mtl/circle.hpp +++ b/include/mbgl/shaders/mtl/circle.hpp @@ -22,7 +22,7 @@ struct ShaderSource { struct VertexStage { short2 position [[attribute(0)]]; - float2 color [[attribute(1)]]; + float4 color [[attribute(1)]]; float2 radius [[attribute(2)]]; float2 blur [[attribute(3)]]; float2 opacity [[attribute(4)]]; @@ -98,7 +98,7 @@ FragmentStage vertex vertexMain(thread const VertexStage vertx [[stage_in]], device const CirclePermutationUBO& permutation [[buffer(12)]], device const ExpressionInputsUBO& expr [[buffer(13)]]) { - const auto color = colorFor(permutation.color, props.color, vertx.color, expr); + const auto color = colorFor(permutation.color, props.color, vertx.color, interp.color_t, expr); const auto radius = valueFor(permutation.radius, props.radius, vertx.radius, interp.radius_t, expr); const auto blur = valueFor(permutation.blur, props.blur, vertx.blur, interp.blur_t, expr); const auto opacity = valueFor(permutation.opacity, props.opacity, vertx.opacity, interp.opacity_t, expr); @@ -107,7 +107,7 @@ FragmentStage vertex vertexMain(thread const VertexStage vertx [[stage_in]], const auto stroke_opacity = valueFor(permutation.stroke_opacity, props.stroke_opacity, vertx.stroke_opacity, interp.stroke_opacity_t, expr); // unencode the extrusion vector that we snuck into the a_pos vector - const float2 extrude = fmod(float2(vertx.position), 2.0) * 2.0 - 1.0; + const float2 extrude = glMod(float2(vertx.position), 2.0) * 2.0 - 1.0; const float2 scaled_extrude = extrude * drawable.extrude_scale; // multiply a_pos by 0.5, since we had it * 2 in order to sneak in extrusion data diff --git a/src/mbgl/renderer/layers/render_circle_layer.cpp b/src/mbgl/renderer/layers/render_circle_layer.cpp index b36b99702..dc154c23a 100644 --- a/src/mbgl/renderer/layers/render_circle_layer.cpp +++ b/src/mbgl/renderer/layers/render_circle_layer.cpp @@ -87,6 +87,12 @@ void RenderCircleLayer::evaluate(const PropertyEvaluationParameters& parameters) #if MLN_DRAWABLE_RENDERER if (layerGroup) { auto newTweaker = std::make_shared(getID(), evaluatedProperties); + + // propertiesAsUniforms isn't recalculated every update, so carry it over + if (layerTweaker) { + newTweaker->setPropertiesAsUniforms(layerTweaker->getPropertiesAsUniforms()); + } + replaceTweaker(layerTweaker, std::move(newTweaker), {layerGroup}); } #endif // MLN_DRAWABLE_RENDERER diff --git a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp index bf1c0452c..5f01444e9 100644 --- a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp @@ -77,6 +77,12 @@ void RenderFillExtrusionLayer::evaluate(const PropertyEvaluationParameters& para #if MLN_DRAWABLE_RENDERER if (layerGroup) { auto newTweaker = std::make_shared(getID(), evaluatedProperties); + + // propertiesAsUniforms isn't recalculated every update, so carry it over + if (layerTweaker) { + newTweaker->setPropertiesAsUniforms(layerTweaker->getPropertiesAsUniforms()); + } + replaceTweaker(layerTweaker, std::move(newTweaker), {layerGroup}); } #endif // MLN_DRAWABLE_RENDERER diff --git a/src/mbgl/renderer/layers/render_heatmap_layer.cpp b/src/mbgl/renderer/layers/render_heatmap_layer.cpp index 449a03bbe..cdfce80b0 100644 --- a/src/mbgl/renderer/layers/render_heatmap_layer.cpp +++ b/src/mbgl/renderer/layers/render_heatmap_layer.cpp @@ -71,6 +71,12 @@ void RenderHeatmapLayer::evaluate(const PropertyEvaluationParameters& parameters if (renderTarget) { if (auto tileLayerGroup = renderTarget->getLayerGroup(0)) { auto newTweaker = std::make_shared(getID(), evaluatedProperties); + + // propertiesAsUniforms isn't recalculated every update, so carry it over + if (layerTweaker) { + newTweaker->setPropertiesAsUniforms(layerTweaker->getPropertiesAsUniforms()); + } + replaceTweaker(layerTweaker, std::move(newTweaker), {std::move(tileLayerGroup)}); } } diff --git a/src/mbgl/shaders/mtl/circle.cpp b/src/mbgl/shaders/mtl/circle.cpp index cdf6c06cf..e472e4d84 100644 --- a/src/mbgl/shaders/mtl/circle.cpp +++ b/src/mbgl/shaders/mtl/circle.cpp @@ -5,7 +5,7 @@ namespace shaders { const std::array ShaderSource::attributes = { AttributeInfo{0, gfx::AttributeDataType::Short2, 1, "a_pos"}, - AttributeInfo{1, gfx::AttributeDataType::Float2, 1, "a_color"}, + AttributeInfo{1, gfx::AttributeDataType::Float4, 1, "a_color"}, AttributeInfo{2, gfx::AttributeDataType::Float2, 1, "a_radius"}, AttributeInfo{3, gfx::AttributeDataType::Float2, 1, "a_blur"}, AttributeInfo{4, gfx::AttributeDataType::Float2, 1, "a_opacity"},