summaryrefslogtreecommitdiff
path: root/src/mbgl/renderer/painters/painter_clipping.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/renderer/painters/painter_clipping.cpp')
-rw-r--r--src/mbgl/renderer/painters/painter_clipping.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/mbgl/renderer/painters/painter_clipping.cpp b/src/mbgl/renderer/painters/painter_clipping.cpp
new file mode 100644
index 0000000000..0d3b5f1504
--- /dev/null
+++ b/src/mbgl/renderer/painters/painter_clipping.cpp
@@ -0,0 +1,37 @@
+#include <mbgl/renderer/painter.hpp>
+#include <mbgl/programs/programs.hpp>
+#include <mbgl/programs/fill_program.hpp>
+#include <mbgl/util/clip_id.hpp>
+
+namespace mbgl {
+
+void Painter::renderClippingMask(const UnwrappedTileID& tileID, const ClipID& clip) {
+ static const style::FillPaintProperties::Evaluated properties {};
+ static const FillProgram::PaintPropertyBinders paintAttibuteData(properties, 0);
+ programs->fill.draw(
+ context,
+ gl::Triangles(),
+ gl::DepthMode::disabled(),
+ gl::StencilMode {
+ gl::StencilMode::Always(),
+ static_cast<int32_t>(clip.reference.to_ulong()),
+ 0b11111111,
+ gl::StencilMode::Keep,
+ gl::StencilMode::Keep,
+ gl::StencilMode::Replace
+ },
+ gl::ColorMode::disabled(),
+ FillProgram::UniformValues {
+ uniforms::u_matrix::Value{ matrixForTile(tileID) },
+ uniforms::u_world::Value{ context.viewport.getCurrentValue().size },
+ },
+ tileVertexBuffer,
+ quadTriangleIndexBuffer,
+ tileTriangleSegments,
+ paintAttibuteData,
+ properties,
+ state.getZoom()
+ );
+}
+
+} // namespace mbgl