#include #include #include #include #include using namespace mbgl; void Painter::drawClippingMasks(const std::set> &sources) { gl::group group("clipping masks"); useProgram(plainShader->program); glDisable(GL_DEPTH_TEST); depthMask(false); glColorMask(false, false, false, false); glDepthRange(1.0f, 1.0f); glStencilMask(0xFF); coveringPlainArray.bind(*plainShader, tileStencilBuffer, BUFFER_OFFSET(0)); for (const std::shared_ptr &source : sources) { source->source->drawClippingMasks(*this); } glEnable(GL_DEPTH_TEST); glColorMask(true, true, true, true); depthMask(true); glStencilMask(0x0); } void Painter::drawClippingMask(const mat4& matrix, const ClipID &clip) { plainShader->setMatrix(matrix); GLint id = static_cast(clip.mask.to_ulong()); GLuint mask = clipMask[clip.length]; glStencilFunc(GL_ALWAYS, id, mask); glDrawArrays(GL_TRIANGLES, 0, (GLsizei)tileStencilBuffer.index()); }