summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/painter_circle.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer/painter_circle.cpp')
-rw-r--r--src/mbgl/renderer/painter_circle.cpp70
1 files changed, 35 insertions, 35 deletions
diff --git a/src/mbgl/renderer/painter_circle.cpp b/src/mbgl/renderer/painter_circle.cpp
index 462ed59ebf..9db7272dab 100644
--- a/src/mbgl/renderer/painter_circle.cpp
+++ b/src/mbgl/renderer/painter_circle.cpp
@@ -2,11 +2,11 @@
#include <mbgl/renderer/paint_parameters.hpp>
#include <mbgl/renderer/circle_bucket.hpp>
#include <mbgl/renderer/render_tile.hpp>
-
#include <mbgl/style/layers/circle_layer.hpp>
#include <mbgl/style/layers/circle_layer_impl.hpp>
-
#include <mbgl/shader/shaders.hpp>
+#include <mbgl/shader/circle_uniforms.hpp>
+#include <mbgl/gl/context.hpp>
namespace mbgl {
@@ -16,42 +16,42 @@ void Painter::renderCircle(PaintParameters& parameters,
CircleBucket& bucket,
const CircleLayer& layer,
const RenderTile& tile) {
- // Abort early.
- if (pass == RenderPass::Opaque) return;
-
- context.stencilTest = frame.mapMode == MapMode::Still;
- context.depthFunc = gl::DepthTestFunction::LessEqual;
- context.depthTest = true;
- context.depthMask = false;
- setDepthSublayer(0);
-
- const CirclePaintProperties& properties = layer.impl->paint;
- auto& circleShader = parameters.shaders.circle;
-
- context.program = circleShader.getID();
-
- circleShader.u_matrix = tile.translatedMatrix(properties.circleTranslate,
- properties.circleTranslateAnchor,
- state);
-
- if (properties.circlePitchScale == CirclePitchScaleType::Map) {
- circleShader.u_extrude_scale = {{
- pixelsToGLUnits[0] * state.getAltitude(),
- pixelsToGLUnits[1] * state.getAltitude()
- }};
- circleShader.u_scale_with_map = true;
- } else {
- circleShader.u_extrude_scale = pixelsToGLUnits;
- circleShader.u_scale_with_map = false;
+ if (pass == RenderPass::Opaque) {
+ return;
}
- circleShader.u_devicepixelratio = frame.pixelRatio;
- circleShader.u_color = properties.circleColor;
- circleShader.u_radius = properties.circleRadius;
- circleShader.u_blur = properties.circleBlur;
- circleShader.u_opacity = properties.circleOpacity;
+ const CirclePaintProperties& properties = layer.impl->paint;
- bucket.drawCircles(circleShader, context, paintMode());
+ context.draw({
+ depthModeForSublayer(0, gl::DepthMode::ReadOnly),
+ frame.mapMode == MapMode::Still
+ ? stencilModeForClipping(tile.clip)
+ : gl::StencilMode::disabled(),
+ colorModeForRenderPass(),
+ parameters.shaders.circle,
+ CircleUniforms::values(
+ tile.translatedMatrix(properties.circleTranslate.value,
+ properties.circleTranslateAnchor.value,
+ state),
+ properties.circleOpacity.value,
+ properties.circleColor.value,
+ properties.circleRadius.value,
+ properties.circleBlur.value,
+ properties.circlePitchScale.value == CirclePitchScaleType::Map,
+ properties.circlePitchScale.value == CirclePitchScaleType::Map
+ ? std::array<float, 2> {{
+ pixelsToGLUnits[0] * state.getAltitude(),
+ pixelsToGLUnits[1] * state.getAltitude()
+ }}
+ : pixelsToGLUnits,
+ frame.pixelRatio
+ ),
+ gl::Segmented<gl::Triangles>(
+ *bucket.vertexBuffer,
+ *bucket.indexBuffer,
+ bucket.segments
+ )
+ });
}
} // namespace mbgl