#include #include #include #include #include #include #include #include namespace mbgl { using namespace style; void Painter::renderBackground(PaintParameters& parameters, const RenderBackgroundLayer& layer) { // Note that for bottommost layers without a pattern, the background color is drawn with // glClear rather than this method. const BackgroundPaintProperties::PossiblyEvaluated& background = layer.evaluated; style::FillPaintProperties::PossiblyEvaluated properties; properties.get() = background.get(); properties.get() = { background.get() }; properties.get() = { background.get() }; const FillProgram::PaintPropertyBinders paintAttibuteData(properties, 0); if (!background.get().to.empty()) { optional imagePosA = imageManager->getPattern(background.get().from); optional imagePosB = imageManager->getPattern(background.get().to); if (!imagePosA || !imagePosB) return; imageManager->bind(context, 0); for (const auto& tileID : util::tileCover(state, state.getIntegerZoom())) { parameters.programs.fillPattern.get(properties).draw( context, gl::Triangles(), depthModeForSublayer(0, gl::DepthMode::ReadOnly), gl::StencilMode::disabled(), colorModeForRenderPass(), FillPatternUniforms::values( matrixForTile(tileID), context.viewport.getCurrentValue().size, imageManager->getPixelSize(), *imagePosA, *imagePosB, background.get(), tileID, state ), tileVertexBuffer, quadTriangleIndexBuffer, tileTriangleSegments, paintAttibuteData, properties, state.getZoom(), layer.getID() ); } } else { for (const auto& tileID : util::tileCover(state, state.getIntegerZoom())) { parameters.programs.fill.get(properties).draw( context, gl::Triangles(), depthModeForSublayer(0, gl::DepthMode::ReadOnly), gl::StencilMode::disabled(), colorModeForRenderPass(), FillProgram::UniformValues { uniforms::u_matrix::Value{ matrixForTile(tileID) }, uniforms::u_world::Value{ context.viewport.getCurrentValue().size }, }, tileVertexBuffer, quadTriangleIndexBuffer, tileTriangleSegments, paintAttibuteData, properties, state.getZoom(), layer.getID() ); } } } } // namespace mbgl