#include #include #include #include #include #include #include #include #include #include #include namespace mbgl { using namespace style; void Painter::renderFillExtrusion(PaintParameters& parameters, FillExtrusionBucket& bucket, const RenderFillExtrusionLayer& layer, const RenderTile& tile) { const FillExtrusionPaintProperties::Evaluated& properties = layer.evaluated; if (pass == RenderPass::Opaque) { return; } if (!properties.get().from.empty()) { optional imagePosA = spriteAtlas->getPattern(properties.get().from); optional imagePosB = spriteAtlas->getPattern(properties.get().to); if (!imagePosA || !imagePosB) { return; } spriteAtlas->bind(true, context, 0); parameters.programs.fillExtrusionPattern.draw( context, gl::Triangles(), depthModeForSublayer(0, gl::DepthMode::ReadWrite), gl::StencilMode::disabled(), colorModeForRenderPass(), FillExtrusionPatternUniforms::values( tile.translatedClipMatrix(properties.get(), properties.get(), state), *imagePosA, *imagePosB, properties.get(), tile.id, state, -std::pow(2, tile.id.canonical.z) / util::tileSize / 8.0f, evaluatedLight ), *bucket.vertexBuffer, *bucket.indexBuffer, bucket.triangleSegments, bucket.paintPropertyBinders.at(layer.getID()), properties, state.getZoom()); } else { parameters.programs.fillExtrusion.draw( context, gl::Triangles(), depthModeForSublayer(0, gl::DepthMode::ReadWrite), gl::StencilMode::disabled(), colorModeForRenderPass(), FillExtrusionUniforms::values( tile.translatedClipMatrix(properties.get(), properties.get(), state), state, evaluatedLight ), *bucket.vertexBuffer, *bucket.indexBuffer, bucket.triangleSegments, bucket.paintPropertyBinders.at(layer.getID()), properties, state.getZoom()); }; } } // namespace mbgl