#include #include #include #include #include #include #include #include #include namespace mbgl { using namespace style; void Painter::renderCircle(PaintParameters& parameters, CircleBucket& bucket, const RenderCircleLayer& layer, const RenderTile& tile) { if (pass == RenderPass::Opaque) { return; } const CirclePaintProperties::PossiblyEvaluated& properties = layer.evaluated; const bool scaleWithMap = properties.get() == CirclePitchScaleType::Map; const bool pitchWithMap = properties.get() == AlignmentType::Map; parameters.programs.circle.get(properties).draw( context, gl::Triangles(), depthModeForSublayer(0, gl::DepthMode::ReadOnly), frame.mapMode == MapMode::Still ? stencilModeForClipping(tile.clip) : gl::StencilMode::disabled(), colorModeForRenderPass(), CircleProgram::UniformValues { uniforms::u_matrix::Value{ tile.translatedMatrix(properties.get(), properties.get(), state) }, uniforms::u_scale_with_map::Value{ scaleWithMap }, uniforms::u_extrude_scale::Value{ pitchWithMap ? std::array {{ tile.id.pixelsToTileUnits(1, state.getZoom()), tile.id.pixelsToTileUnits(1, state.getZoom()) }} : pixelsToGLUnits }, uniforms::u_camera_to_center_distance::Value{ state.getCameraToCenterDistance() }, uniforms::u_pitch_with_map::Value{ pitchWithMap } }, *bucket.vertexBuffer, *bucket.indexBuffer, bucket.segments, bucket.paintPropertyBinders.at(layer.getID()), properties, state.getZoom() ); } } // namespace mbgl