diff options
Diffstat (limited to 'src/mbgl/renderer/painters/painter_clipping.cpp')
-rw-r--r-- | src/mbgl/renderer/painters/painter_clipping.cpp | 37 |
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 |