diff options
Diffstat (limited to 'src/mbgl/renderer/layers')
-rw-r--r-- | src/mbgl/renderer/layers/render_background_layer.cpp | 54 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_background_layer.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_circle_layer.cpp | 27 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_circle_layer.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_custom_layer.cpp | 15 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_custom_layer.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp | 71 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_fill_layer.cpp | 49 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_fill_layer.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_line_layer.cpp | 45 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_line_layer.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_raster_layer.cpp | 28 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_raster_layer.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_symbol_layer.cpp | 68 | ||||
-rw-r--r-- | src/mbgl/renderer/layers/render_symbol_layer.hpp | 2 |
16 files changed, 186 insertions, 187 deletions
diff --git a/src/mbgl/renderer/layers/render_background_layer.cpp b/src/mbgl/renderer/layers/render_background_layer.cpp index cbf8d2f074..9fddba3f74 100644 --- a/src/mbgl/renderer/layers/render_background_layer.cpp +++ b/src/mbgl/renderer/layers/render_background_layer.cpp @@ -1,9 +1,9 @@ #include <mbgl/renderer/layers/render_background_layer.hpp> #include <mbgl/style/layers/background_layer_impl.hpp> #include <mbgl/renderer/bucket.hpp> -#include <mbgl/renderer/painter.hpp> #include <mbgl/renderer/paint_parameters.hpp> #include <mbgl/renderer/image_manager.hpp> +#include <mbgl/renderer/render_static_data.hpp> #include <mbgl/programs/programs.hpp> #include <mbgl/programs/fill_program.hpp> #include <mbgl/util/tile_cover.hpp> @@ -42,7 +42,7 @@ bool RenderBackgroundLayer::hasTransition() const { return unevaluated.hasTransition(); } -void RenderBackgroundLayer::render(Painter& painter, PaintParameters& parameters, RenderSource*) { +void RenderBackgroundLayer::render(PaintParameters& parameters, RenderSource*) { // Note that for bottommost layers without a pattern, the background color is drawn with // glClear rather than this method. @@ -54,58 +54,58 @@ void RenderBackgroundLayer::render(Painter& painter, PaintParameters& parameters const FillProgram::PaintPropertyBinders paintAttibuteData(properties, 0); if (!evaluated.get<BackgroundPattern>().to.empty()) { - optional<ImagePosition> imagePosA = painter.imageManager->getPattern(evaluated.get<BackgroundPattern>().from); - optional<ImagePosition> imagePosB = painter.imageManager->getPattern(evaluated.get<BackgroundPattern>().to); + optional<ImagePosition> imagePosA = parameters.imageManager.getPattern(evaluated.get<BackgroundPattern>().from); + optional<ImagePosition> imagePosB = parameters.imageManager.getPattern(evaluated.get<BackgroundPattern>().to); if (!imagePosA || !imagePosB) return; - painter.imageManager->bind(painter.context, 0); + parameters.imageManager.bind(parameters.context, 0); - for (const auto& tileID : util::tileCover(painter.state, painter.state.getIntegerZoom())) { + for (const auto& tileID : util::tileCover(parameters.state, parameters.state.getIntegerZoom())) { parameters.programs.fillPattern.get(properties).draw( - painter.context, + parameters.context, gl::Triangles(), - painter.depthModeForSublayer(0, gl::DepthMode::ReadOnly), + parameters.depthModeForSublayer(0, gl::DepthMode::ReadOnly), gl::StencilMode::disabled(), - painter.colorModeForRenderPass(), + parameters.colorModeForRenderPass(), FillPatternUniforms::values( - painter.matrixForTile(tileID), - painter.context.viewport.getCurrentValue().size, - painter.imageManager->getPixelSize(), + parameters.matrixForTile(tileID), + parameters.context.viewport.getCurrentValue().size, + parameters.imageManager.getPixelSize(), *imagePosA, *imagePosB, evaluated.get<BackgroundPattern>(), tileID, - painter.state + parameters.state ), - painter.tileVertexBuffer, - painter.quadTriangleIndexBuffer, - painter.tileTriangleSegments, + parameters.staticData.tileVertexBuffer, + parameters.staticData.quadTriangleIndexBuffer, + parameters.staticData.tileTriangleSegments, paintAttibuteData, properties, - painter.state.getZoom(), + parameters.state.getZoom(), getID() ); } } else { - for (const auto& tileID : util::tileCover(painter.state, painter.state.getIntegerZoom())) { + for (const auto& tileID : util::tileCover(parameters.state, parameters.state.getIntegerZoom())) { parameters.programs.fill.get(properties).draw( - painter.context, + parameters.context, gl::Triangles(), - painter.depthModeForSublayer(0, gl::DepthMode::ReadOnly), + parameters.depthModeForSublayer(0, gl::DepthMode::ReadOnly), gl::StencilMode::disabled(), - painter.colorModeForRenderPass(), + parameters.colorModeForRenderPass(), FillProgram::UniformValues { - uniforms::u_matrix::Value{ painter.matrixForTile(tileID) }, - uniforms::u_world::Value{ painter.context.viewport.getCurrentValue().size }, + uniforms::u_matrix::Value{ parameters.matrixForTile(tileID) }, + uniforms::u_world::Value{ parameters.context.viewport.getCurrentValue().size }, }, - painter.tileVertexBuffer, - painter.quadTriangleIndexBuffer, - painter.tileTriangleSegments, + parameters.staticData.tileVertexBuffer, + parameters.staticData.quadTriangleIndexBuffer, + parameters.staticData.tileTriangleSegments, paintAttibuteData, properties, - painter.state.getZoom(), + parameters.state.getZoom(), getID() ); } diff --git a/src/mbgl/renderer/layers/render_background_layer.hpp b/src/mbgl/renderer/layers/render_background_layer.hpp index a7b15ab178..a619670ee4 100644 --- a/src/mbgl/renderer/layers/render_background_layer.hpp +++ b/src/mbgl/renderer/layers/render_background_layer.hpp @@ -14,7 +14,7 @@ public: void transition(const TransitionParameters&) override; void evaluate(const PropertyEvaluationParameters&) override; bool hasTransition() const override; - void render(Painter&, PaintParameters&, RenderSource*) override; + void render(PaintParameters&, RenderSource*) override; std::unique_ptr<Bucket> createBucket(const BucketParameters&, const std::vector<const RenderLayer*>&) const override; diff --git a/src/mbgl/renderer/layers/render_circle_layer.cpp b/src/mbgl/renderer/layers/render_circle_layer.cpp index 22e515e603..e7b022f3ee 100644 --- a/src/mbgl/renderer/layers/render_circle_layer.cpp +++ b/src/mbgl/renderer/layers/render_circle_layer.cpp @@ -1,6 +1,5 @@ #include <mbgl/renderer/layers/render_circle_layer.hpp> #include <mbgl/renderer/buckets/circle_bucket.hpp> -#include <mbgl/renderer/painter.hpp> #include <mbgl/renderer/render_tile.hpp> #include <mbgl/renderer/paint_parameters.hpp> #include <mbgl/programs/programs.hpp> @@ -48,8 +47,8 @@ bool RenderCircleLayer::hasTransition() const { return unevaluated.hasTransition(); } -void RenderCircleLayer::render(Painter& painter, PaintParameters& parameters, RenderSource*) { - if (painter.pass == RenderPass::Opaque) { +void RenderCircleLayer::render(PaintParameters& parameters, RenderSource*) { + if (parameters.pass == RenderPass::Opaque) { return; } @@ -61,26 +60,26 @@ void RenderCircleLayer::render(Painter& painter, PaintParameters& parameters, Re CircleBucket& bucket = *reinterpret_cast<CircleBucket*>(tile.tile.getBucket(*baseImpl)); parameters.programs.circle.get(evaluated).draw( - painter.context, + parameters.context, gl::Triangles(), - painter.depthModeForSublayer(0, gl::DepthMode::ReadOnly), - painter.frame.mapMode == MapMode::Still - ? painter.stencilModeForClipping(tile.clip) + parameters.depthModeForSublayer(0, gl::DepthMode::ReadOnly), + parameters.mapMode == MapMode::Still + ? parameters.stencilModeForClipping(tile.clip) : gl::StencilMode::disabled(), - painter.colorModeForRenderPass(), + parameters.colorModeForRenderPass(), CircleProgram::UniformValues { uniforms::u_matrix::Value{ tile.translatedMatrix(evaluated.get<CircleTranslate>(), evaluated.get<CircleTranslateAnchor>(), - painter.state) + parameters.state) }, uniforms::u_scale_with_map::Value{ scaleWithMap }, uniforms::u_extrude_scale::Value{ pitchWithMap ? std::array<float, 2> {{ - tile.id.pixelsToTileUnits(1, painter.state.getZoom()), - tile.id.pixelsToTileUnits(1, painter.state.getZoom()) }} - : painter.pixelsToGLUnits }, - uniforms::u_camera_to_center_distance::Value{ painter.state.getCameraToCenterDistance() }, + tile.id.pixelsToTileUnits(1, parameters.state.getZoom()), + tile.id.pixelsToTileUnits(1, parameters.state.getZoom()) }} + : parameters.pixelsToGLUnits }, + uniforms::u_camera_to_center_distance::Value{ parameters.state.getCameraToCenterDistance() }, uniforms::u_pitch_with_map::Value{ pitchWithMap } }, *bucket.vertexBuffer, @@ -88,7 +87,7 @@ void RenderCircleLayer::render(Painter& painter, PaintParameters& parameters, Re bucket.segments, bucket.paintPropertyBinders.at(getID()), evaluated, - painter.state.getZoom(), + parameters.state.getZoom(), getID() ); } diff --git a/src/mbgl/renderer/layers/render_circle_layer.hpp b/src/mbgl/renderer/layers/render_circle_layer.hpp index 7c3c19d21a..f31715f98f 100644 --- a/src/mbgl/renderer/layers/render_circle_layer.hpp +++ b/src/mbgl/renderer/layers/render_circle_layer.hpp @@ -14,7 +14,7 @@ public: void transition(const TransitionParameters&) override; void evaluate(const PropertyEvaluationParameters&) override; bool hasTransition() const override; - void render(Painter&, PaintParameters&, RenderSource*) override; + void render(PaintParameters&, RenderSource*) override; bool queryIntersectsFeature( const GeometryCoordinates&, diff --git a/src/mbgl/renderer/layers/render_custom_layer.cpp b/src/mbgl/renderer/layers/render_custom_layer.cpp index 30649137c7..49f94a699a 100644 --- a/src/mbgl/renderer/layers/render_custom_layer.cpp +++ b/src/mbgl/renderer/layers/render_custom_layer.cpp @@ -1,9 +1,10 @@ #include <mbgl/renderer/layers/render_custom_layer.hpp> -#include <mbgl/renderer/painter.hpp> #include <mbgl/renderer/paint_parameters.hpp> +#include <mbgl/renderer/backend_scope.hpp> +#include <mbgl/renderer/bucket.hpp> #include <mbgl/style/layers/custom_layer_impl.hpp> #include <mbgl/map/transform_state.hpp> -#include <mbgl/renderer/backend_scope.hpp> +#include <mbgl/map/view.hpp> namespace mbgl { @@ -37,21 +38,21 @@ std::unique_ptr<Bucket> RenderCustomLayer::createBucket(const BucketParameters&, return nullptr; } -void RenderCustomLayer::render(Painter& painter, PaintParameters& paintParameters, RenderSource*) { +void RenderCustomLayer::render(PaintParameters& paintParameters, RenderSource*) { if (!initialized) { assert(impl().initializeFn); impl().initializeFn(impl().context); initialized = true; } - gl::Context& context = painter.context; - const TransformState& state = painter.state; + gl::Context& context = paintParameters.context; + const TransformState& state = paintParameters.state; // Reset GL state to a known state so the CustomLayer always has a clean slate. context.bindVertexArray = 0; - context.setDepthMode(painter.depthModeForSublayer(0, gl::DepthMode::ReadOnly)); + context.setDepthMode(paintParameters.depthModeForSublayer(0, gl::DepthMode::ReadOnly)); context.setStencilMode(gl::StencilMode::disabled()); - context.setColorMode(painter.colorModeForRenderPass()); + context.setColorMode(paintParameters.colorModeForRenderPass()); CustomLayerRenderParameters parameters; diff --git a/src/mbgl/renderer/layers/render_custom_layer.hpp b/src/mbgl/renderer/layers/render_custom_layer.hpp index dd52d315cf..d8e9d93811 100644 --- a/src/mbgl/renderer/layers/render_custom_layer.hpp +++ b/src/mbgl/renderer/layers/render_custom_layer.hpp @@ -15,7 +15,7 @@ public: bool hasTransition() const override; std::unique_ptr<Bucket> createBucket(const BucketParameters&, const std::vector<const RenderLayer*>&) const final; - void render(Painter&, PaintParameters&, RenderSource*) final; + void render(PaintParameters&, RenderSource*) final; const style::CustomLayer::Impl& impl() const; diff --git a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp index e06c43c112..27ed4d8084 100644 --- a/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_extrusion_layer.cpp @@ -1,12 +1,13 @@ #include <mbgl/renderer/layers/render_fill_extrusion_layer.hpp> #include <mbgl/renderer/buckets/fill_extrusion_bucket.hpp> -#include <mbgl/renderer/painter.hpp> #include <mbgl/renderer/render_tile.hpp> #include <mbgl/renderer/paint_parameters.hpp> #include <mbgl/renderer/image_manager.hpp> +#include <mbgl/renderer/render_static_data.hpp> #include <mbgl/programs/programs.hpp> #include <mbgl/programs/fill_extrusion_program.hpp> #include <mbgl/tile/tile.hpp> +#include <mbgl/map/view.hpp> #include <mbgl/style/layers/fill_extrusion_layer_impl.hpp> #include <mbgl/geometry/feature_index.hpp> #include <mbgl/util/math.hpp> @@ -44,22 +45,22 @@ bool RenderFillExtrusionLayer::hasTransition() const { return unevaluated.hasTransition(); } -void RenderFillExtrusionLayer::render(Painter& painter, PaintParameters& parameters, RenderSource*) { - if (painter.pass == RenderPass::Opaque) { +void RenderFillExtrusionLayer::render(PaintParameters& parameters, RenderSource*) { + if (parameters.pass == RenderPass::Opaque) { return; } - const auto size = painter.context.viewport.getCurrentValue().size; + const auto size = parameters.context.viewport.getCurrentValue().size; - if (!painter.extrusionTexture || painter.extrusionTexture->getSize() != size) { - painter.extrusionTexture = OffscreenTexture(painter.context, size, OffscreenTextureAttachment::Depth); + if (!parameters.staticData.extrusionTexture || parameters.staticData.extrusionTexture->getSize() != size) { + parameters.staticData.extrusionTexture = OffscreenTexture(parameters.context, size, OffscreenTextureAttachment::Depth); } - painter.extrusionTexture->bind(); + parameters.staticData.extrusionTexture->bind(); - painter.context.setStencilMode(gl::StencilMode::disabled()); - painter.context.setDepthMode(painter.depthModeForSublayer(0, gl::DepthMode::ReadWrite)); - painter.context.clear(Color{ 0.0f, 0.0f, 0.0f, 0.0f }, 1.0f, {}); + parameters.context.setStencilMode(gl::StencilMode::disabled()); + parameters.context.setDepthMode(parameters.depthModeForSublayer(0, gl::DepthMode::ReadWrite)); + parameters.context.clear(Color{ 0.0f, 0.0f, 0.0f, 0.0f }, 1.0f, {}); if (evaluated.get<FillExtrusionPattern>().from.empty()) { for (const RenderTile& tile : renderTiles) { @@ -67,71 +68,71 @@ void RenderFillExtrusionLayer::render(Painter& painter, PaintParameters& paramet FillExtrusionBucket& bucket = *reinterpret_cast<FillExtrusionBucket*>(tile.tile.getBucket(*baseImpl)); parameters.programs.fillExtrusion.get(evaluated).draw( - painter.context, + parameters.context, gl::Triangles(), - painter.depthModeForSublayer(0, gl::DepthMode::ReadWrite), + parameters.depthModeForSublayer(0, gl::DepthMode::ReadWrite), gl::StencilMode::disabled(), - painter.colorModeForRenderPass(), + parameters.colorModeForRenderPass(), FillExtrusionUniforms::values( tile.translatedClipMatrix(evaluated.get<FillExtrusionTranslate>(), evaluated.get<FillExtrusionTranslateAnchor>(), - painter.state), - painter.state, - painter.evaluatedLight + parameters.state), + parameters.state, + parameters.evaluatedLight ), *bucket.vertexBuffer, *bucket.indexBuffer, bucket.triangleSegments, bucket.paintPropertyBinders.at(getID()), evaluated, - painter.state.getZoom(), + parameters.state.getZoom(), getID()); } } else { - optional<ImagePosition> imagePosA = painter.imageManager->getPattern(evaluated.get<FillExtrusionPattern>().from); - optional<ImagePosition> imagePosB = painter.imageManager->getPattern(evaluated.get<FillExtrusionPattern>().to); + optional<ImagePosition> imagePosA = parameters.imageManager.getPattern(evaluated.get<FillExtrusionPattern>().from); + optional<ImagePosition> imagePosB = parameters.imageManager.getPattern(evaluated.get<FillExtrusionPattern>().to); if (!imagePosA || !imagePosB) { return; } - painter.imageManager->bind(painter.context, 0); + parameters.imageManager.bind(parameters.context, 0); for (const RenderTile& tile : renderTiles) { assert(dynamic_cast<FillExtrusionBucket*>(tile.tile.getBucket(*baseImpl))); FillExtrusionBucket& bucket = *reinterpret_cast<FillExtrusionBucket*>(tile.tile.getBucket(*baseImpl)); parameters.programs.fillExtrusionPattern.get(evaluated).draw( - painter.context, + parameters.context, gl::Triangles(), - painter.depthModeForSublayer(0, gl::DepthMode::ReadWrite), + parameters.depthModeForSublayer(0, gl::DepthMode::ReadWrite), gl::StencilMode::disabled(), - painter.colorModeForRenderPass(), + parameters.colorModeForRenderPass(), FillExtrusionPatternUniforms::values( tile.translatedClipMatrix(evaluated.get<FillExtrusionTranslate>(), evaluated.get<FillExtrusionTranslateAnchor>(), - painter.state), - painter.imageManager->getPixelSize(), + parameters.state), + parameters.imageManager.getPixelSize(), *imagePosA, *imagePosB, evaluated.get<FillExtrusionPattern>(), tile.id, - painter.state, + parameters.state, -std::pow(2, tile.id.canonical.z) / util::tileSize / 8.0f, - painter.evaluatedLight + parameters.evaluatedLight ), *bucket.vertexBuffer, *bucket.indexBuffer, bucket.triangleSegments, bucket.paintPropertyBinders.at(getID()), evaluated, - painter.state.getZoom(), + parameters.state.getZoom(), getID()); } } parameters.view.bind(); - painter.context.bindTexture(painter.extrusionTexture->getTexture()); + parameters.context.bindTexture(parameters.staticData.extrusionTexture->getTexture()); mat4 viewportMat; matrix::ortho(viewportMat, 0, size.width, size.height, 0, 0, 1); @@ -139,22 +140,22 @@ void RenderFillExtrusionLayer::render(Painter& painter, PaintParameters& paramet const Properties<>::PossiblyEvaluated properties; parameters.programs.extrusionTexture.draw( - painter.context, + parameters.context, gl::Triangles(), gl::DepthMode::disabled(), gl::StencilMode::disabled(), - painter.colorModeForRenderPass(), + parameters.colorModeForRenderPass(), ExtrusionTextureProgram::UniformValues{ uniforms::u_matrix::Value{ viewportMat }, uniforms::u_world::Value{ size }, uniforms::u_image::Value{ 0 }, uniforms::u_opacity::Value{ evaluated.get<FillExtrusionOpacity>() } }, - painter.extrusionTextureVertexBuffer, - painter.quadTriangleIndexBuffer, - painter.extrusionTextureSegments, + parameters.staticData.extrusionTextureVertexBuffer, + parameters.staticData.quadTriangleIndexBuffer, + parameters.staticData.extrusionTextureSegments, ExtrusionTextureProgram::PaintPropertyBinders{ properties, 0 }, properties, - painter.state.getZoom(), + parameters.state.getZoom(), getID()); } diff --git a/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp b/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp index b3f1115790..a53e00ca6f 100644 --- a/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp +++ b/src/mbgl/renderer/layers/render_fill_extrusion_layer.hpp @@ -14,7 +14,7 @@ public: void transition(const TransitionParameters&) override; void evaluate(const PropertyEvaluationParameters&) override; bool hasTransition() const override; - void render(Painter&, PaintParameters&, RenderSource*) override; + void render(PaintParameters&, RenderSource*) override; bool queryIntersectsFeature( const GeometryCoordinates&, diff --git a/src/mbgl/renderer/layers/render_fill_layer.cpp b/src/mbgl/renderer/layers/render_fill_layer.cpp index 973b08dd1f..2a61a9e993 100644 --- a/src/mbgl/renderer/layers/render_fill_layer.cpp +++ b/src/mbgl/renderer/layers/render_fill_layer.cpp @@ -1,6 +1,5 @@ #include <mbgl/renderer/layers/render_fill_layer.hpp> #include <mbgl/renderer/buckets/fill_bucket.hpp> -#include <mbgl/renderer/painter.hpp> #include <mbgl/renderer/render_tile.hpp> #include <mbgl/renderer/paint_parameters.hpp> #include <mbgl/renderer/image_manager.hpp> @@ -59,7 +58,7 @@ bool RenderFillLayer::hasTransition() const { return unevaluated.hasTransition(); } -void RenderFillLayer::render(Painter& painter, PaintParameters& parameters, RenderSource*) { +void RenderFillLayer::render(PaintParameters& parameters, RenderSource*) { if (evaluated.get<FillPattern>().from.empty()) { for (const RenderTile& tile : renderTiles) { assert(dynamic_cast<FillBucket*>(tile.tile.getBucket(*baseImpl))); @@ -71,30 +70,30 @@ void RenderFillLayer::render(Painter& painter, PaintParameters& parameters, Rend const auto& indexBuffer, const auto& segments) { program.get(evaluated).draw( - painter.context, + parameters.context, drawMode, - painter.depthModeForSublayer(sublayer, gl::DepthMode::ReadWrite), - painter.stencilModeForClipping(tile.clip), - painter.colorModeForRenderPass(), + parameters.depthModeForSublayer(sublayer, gl::DepthMode::ReadWrite), + parameters.stencilModeForClipping(tile.clip), + parameters.colorModeForRenderPass(), FillProgram::UniformValues { uniforms::u_matrix::Value{ tile.translatedMatrix(evaluated.get<FillTranslate>(), evaluated.get<FillTranslateAnchor>(), - painter.state) + parameters.state) }, - uniforms::u_world::Value{ painter.context.viewport.getCurrentValue().size }, + uniforms::u_world::Value{ parameters.context.viewport.getCurrentValue().size }, }, *bucket.vertexBuffer, indexBuffer, segments, bucket.paintPropertyBinders.at(getID()), evaluated, - painter.state.getZoom(), + parameters.state.getZoom(), getID() ); }; - if (evaluated.get<FillAntialias>() && !unevaluated.get<FillOutlineColor>().isUndefined() && painter.pass == RenderPass::Translucent) { + if (evaluated.get<FillAntialias>() && !unevaluated.get<FillOutlineColor>().isUndefined() && parameters.pass == RenderPass::Translucent) { draw(2, parameters.programs.fillOutline, gl::Lines { 2.0f }, @@ -105,7 +104,7 @@ void RenderFillLayer::render(Painter& painter, PaintParameters& parameters, Rend // Only draw the fill when it's opaque and we're drawing opaque fragments, // or when it's translucent and we're drawing translucent fragments. if ((evaluated.get<FillColor>().constantOr(Color()).a >= 1.0f - && evaluated.get<FillOpacity>().constantOr(0) >= 1.0f) == (painter.pass == RenderPass::Opaque)) { + && evaluated.get<FillOpacity>().constantOr(0) >= 1.0f) == (parameters.pass == RenderPass::Opaque)) { draw(1, parameters.programs.fill, gl::Triangles(), @@ -113,7 +112,7 @@ void RenderFillLayer::render(Painter& painter, PaintParameters& parameters, Rend bucket.triangleSegments); } - if (evaluated.get<FillAntialias>() && unevaluated.get<FillOutlineColor>().isUndefined() && painter.pass == RenderPass::Translucent) { + if (evaluated.get<FillAntialias>() && unevaluated.get<FillOutlineColor>().isUndefined() && parameters.pass == RenderPass::Translucent) { draw(2, parameters.programs.fillOutline, gl::Lines { 2.0f }, @@ -122,18 +121,18 @@ void RenderFillLayer::render(Painter& painter, PaintParameters& parameters, Rend } } } else { - if (painter.pass != RenderPass::Translucent) { + if (parameters.pass != RenderPass::Translucent) { return; } - optional<ImagePosition> imagePosA = painter.imageManager->getPattern(evaluated.get<FillPattern>().from); - optional<ImagePosition> imagePosB = painter.imageManager->getPattern(evaluated.get<FillPattern>().to); + optional<ImagePosition> imagePosA = parameters.imageManager.getPattern(evaluated.get<FillPattern>().from); + optional<ImagePosition> imagePosB = parameters.imageManager.getPattern(evaluated.get<FillPattern>().to); if (!imagePosA || !imagePosB) { return; } - painter.imageManager->bind(painter.context, 0); + parameters.imageManager.bind(parameters.context, 0); for (const RenderTile& tile : renderTiles) { assert(dynamic_cast<FillBucket*>(tile.tile.getBucket(*baseImpl))); @@ -145,29 +144,29 @@ void RenderFillLayer::render(Painter& painter, PaintParameters& parameters, Rend const auto& indexBuffer, const auto& segments) { program.get(evaluated).draw( - painter.context, + parameters.context, drawMode, - painter.depthModeForSublayer(sublayer, gl::DepthMode::ReadWrite), - painter.stencilModeForClipping(tile.clip), - painter.colorModeForRenderPass(), + parameters.depthModeForSublayer(sublayer, gl::DepthMode::ReadWrite), + parameters.stencilModeForClipping(tile.clip), + parameters.colorModeForRenderPass(), FillPatternUniforms::values( tile.translatedMatrix(evaluated.get<FillTranslate>(), evaluated.get<FillTranslateAnchor>(), - painter.state), - painter.context.viewport.getCurrentValue().size, - painter.imageManager->getPixelSize(), + parameters.state), + parameters.context.viewport.getCurrentValue().size, + parameters.imageManager.getPixelSize(), *imagePosA, *imagePosB, evaluated.get<FillPattern>(), tile.id, - painter.state + parameters.state ), *bucket.vertexBuffer, indexBuffer, segments, bucket.paintPropertyBinders.at(getID()), evaluated, - painter.state.getZoom(), + parameters.state.getZoom(), getID() ); }; diff --git a/src/mbgl/renderer/layers/render_fill_layer.hpp b/src/mbgl/renderer/layers/render_fill_layer.hpp index 0dc5dd0b1d..a51865698f 100644 --- a/src/mbgl/renderer/layers/render_fill_layer.hpp +++ b/src/mbgl/renderer/layers/render_fill_layer.hpp @@ -14,7 +14,7 @@ public: void transition(const TransitionParameters&) override; void evaluate(const PropertyEvaluationParameters&) override; bool hasTransition() const override; - void render(Painter&, PaintParameters&, RenderSource*) override; + void render(PaintParameters&, RenderSource*) override; bool queryIntersectsFeature( const GeometryCoordinates&, diff --git a/src/mbgl/renderer/layers/render_line_layer.cpp b/src/mbgl/renderer/layers/render_line_layer.cpp index b40066f4c4..1b4a1c0ff7 100644 --- a/src/mbgl/renderer/layers/render_line_layer.cpp +++ b/src/mbgl/renderer/layers/render_line_layer.cpp @@ -1,6 +1,5 @@ #include <mbgl/renderer/layers/render_line_layer.hpp> #include <mbgl/renderer/buckets/line_bucket.hpp> -#include <mbgl/renderer/painter.hpp> #include <mbgl/renderer/render_tile.hpp> #include <mbgl/renderer/paint_parameters.hpp> #include <mbgl/renderer/image_manager.hpp> @@ -53,8 +52,8 @@ bool RenderLineLayer::hasTransition() const { return unevaluated.hasTransition(); } -void RenderLineLayer::render(Painter& painter, PaintParameters& parameters, RenderSource*) { - if (painter.pass == RenderPass::Opaque) { +void RenderLineLayer::render(PaintParameters& parameters, RenderSource*) { + if (parameters.pass == RenderPass::Opaque) { return; } @@ -64,18 +63,18 @@ void RenderLineLayer::render(Painter& painter, PaintParameters& parameters, Rend auto draw = [&] (auto& program, auto&& uniformValues) { program.get(evaluated).draw( - painter.context, + parameters.context, gl::Triangles(), - painter.depthModeForSublayer(0, gl::DepthMode::ReadOnly), - painter.stencilModeForClipping(tile.clip), - painter.colorModeForRenderPass(), + parameters.depthModeForSublayer(0, gl::DepthMode::ReadOnly), + parameters.stencilModeForClipping(tile.clip), + parameters.colorModeForRenderPass(), std::move(uniformValues), *bucket.vertexBuffer, *bucket.indexBuffer, bucket.segments, bucket.paintPropertyBinders.at(getID()), evaluated, - painter.state.getZoom(), + parameters.state.getZoom(), getID() ); }; @@ -83,38 +82,38 @@ void RenderLineLayer::render(Painter& painter, PaintParameters& parameters, Rend if (!evaluated.get<LineDasharray>().from.empty()) { const LinePatternCap cap = bucket.layout.get<LineCap>() == LineCapType::Round ? LinePatternCap::Round : LinePatternCap::Square; - LinePatternPos posA = painter.lineAtlas->getDashPosition(evaluated.get<LineDasharray>().from, cap); - LinePatternPos posB = painter.lineAtlas->getDashPosition(evaluated.get<LineDasharray>().to, cap); + LinePatternPos posA = parameters.lineAtlas.getDashPosition(evaluated.get<LineDasharray>().from, cap); + LinePatternPos posB = parameters.lineAtlas.getDashPosition(evaluated.get<LineDasharray>().to, cap); - painter.lineAtlas->bind(painter.context, 0); + parameters.lineAtlas.bind(parameters.context, 0); draw(parameters.programs.lineSDF, LineSDFProgram::uniformValues( evaluated, - painter.frame.pixelRatio, + parameters.pixelRatio, tile, - painter.state, - painter.pixelsToGLUnits, + parameters.state, + parameters.pixelsToGLUnits, posA, posB, - painter.lineAtlas->getSize().width)); + parameters.lineAtlas.getSize().width)); } else if (!evaluated.get<LinePattern>().from.empty()) { - optional<ImagePosition> posA = painter.imageManager->getPattern(evaluated.get<LinePattern>().from); - optional<ImagePosition> posB = painter.imageManager->getPattern(evaluated.get<LinePattern>().to); + optional<ImagePosition> posA = parameters.imageManager.getPattern(evaluated.get<LinePattern>().from); + optional<ImagePosition> posB = parameters.imageManager.getPattern(evaluated.get<LinePattern>().to); if (!posA || !posB) return; - painter.imageManager->bind(painter.context, 0); + parameters.imageManager.bind(parameters.context, 0); draw(parameters.programs.linePattern, LinePatternProgram::uniformValues( evaluated, tile, - painter.state, - painter.pixelsToGLUnits, - painter.imageManager->getPixelSize(), + parameters.state, + parameters.pixelsToGLUnits, + parameters.imageManager.getPixelSize(), *posA, *posB)); @@ -123,8 +122,8 @@ void RenderLineLayer::render(Painter& painter, PaintParameters& parameters, Rend LineProgram::uniformValues( evaluated, tile, - painter.state, - painter.pixelsToGLUnits)); + parameters.state, + parameters.pixelsToGLUnits)); } } } diff --git a/src/mbgl/renderer/layers/render_line_layer.hpp b/src/mbgl/renderer/layers/render_line_layer.hpp index 47c526fd1e..8bf7e2329d 100644 --- a/src/mbgl/renderer/layers/render_line_layer.hpp +++ b/src/mbgl/renderer/layers/render_line_layer.hpp @@ -23,7 +23,7 @@ public: void transition(const TransitionParameters&) override; void evaluate(const PropertyEvaluationParameters&) override; bool hasTransition() const override; - void render(Painter&, PaintParameters&, RenderSource*) override; + void render(PaintParameters&, RenderSource*) override; bool queryIntersectsFeature( const GeometryCoordinates&, diff --git a/src/mbgl/renderer/layers/render_raster_layer.cpp b/src/mbgl/renderer/layers/render_raster_layer.cpp index 349646c281..367fd91fa5 100644 --- a/src/mbgl/renderer/layers/render_raster_layer.cpp +++ b/src/mbgl/renderer/layers/render_raster_layer.cpp @@ -1,9 +1,9 @@ #include <mbgl/renderer/layers/render_raster_layer.hpp> #include <mbgl/renderer/buckets/raster_bucket.hpp> -#include <mbgl/renderer/painter.hpp> #include <mbgl/renderer/render_tile.hpp> #include <mbgl/renderer/paint_parameters.hpp> #include <mbgl/renderer/sources/render_image_source.hpp> +#include <mbgl/renderer/render_static_data.hpp> #include <mbgl/programs/programs.hpp> #include <mbgl/programs/raster_program.hpp> #include <mbgl/tile/tile.hpp> @@ -69,8 +69,8 @@ static std::array<float, 3> spinWeights(float spin) { return spin_weights; } -void RenderRasterLayer::render(Painter& painter, PaintParameters& parameters, RenderSource* source) { - if (painter.pass != RenderPass::Translucent) +void RenderRasterLayer::render(PaintParameters& parameters, RenderSource* source) { + if (parameters.pass != RenderPass::Translucent) return; auto draw = [&] (const mat4& matrix, @@ -78,11 +78,11 @@ void RenderRasterLayer::render(Painter& painter, PaintParameters& parameters, Re const auto& indexBuffer, const auto& segments) { parameters.programs.raster.draw( - painter.context, + parameters.context, gl::Triangles(), - painter.depthModeForSublayer(0, gl::DepthMode::ReadOnly), + parameters.depthModeForSublayer(0, gl::DepthMode::ReadOnly), gl::StencilMode::disabled(), - painter.colorModeForRenderPass(), + parameters.colorModeForRenderPass(), RasterProgram::UniformValues { uniforms::u_matrix::Value{ matrix }, uniforms::u_image0::Value{ 0 }, @@ -103,7 +103,7 @@ void RenderRasterLayer::render(Painter& painter, PaintParameters& parameters, Re segments, RasterProgram::PaintPropertyBinders { evaluated, 0 }, evaluated, - painter.state.getZoom(), + parameters.state.getZoom(), getID() ); }; @@ -113,8 +113,8 @@ void RenderRasterLayer::render(Painter& painter, PaintParameters& parameters, Re RasterBucket& bucket = *imageSource->bucket; assert(bucket.texture); - painter.context.bindTexture(*bucket.texture, 0, gl::TextureFilter::Linear); - painter.context.bindTexture(*bucket.texture, 1, gl::TextureFilter::Linear); + parameters.context.bindTexture(*bucket.texture, 0, gl::TextureFilter::Linear); + parameters.context.bindTexture(*bucket.texture, 1, gl::TextureFilter::Linear); for (auto matrix_ : imageSource->matrices) { draw(matrix_, @@ -132,13 +132,13 @@ void RenderRasterLayer::render(Painter& painter, PaintParameters& parameters, Re continue; assert(bucket.texture); - painter.context.bindTexture(*bucket.texture, 0, gl::TextureFilter::Linear); - painter.context.bindTexture(*bucket.texture, 1, gl::TextureFilter::Linear); + parameters.context.bindTexture(*bucket.texture, 0, gl::TextureFilter::Linear); + parameters.context.bindTexture(*bucket.texture, 1, gl::TextureFilter::Linear); draw(tile.matrix, - painter.rasterVertexBuffer, - painter.quadTriangleIndexBuffer, - painter.rasterSegments); + parameters.staticData.rasterVertexBuffer, + parameters.staticData.quadTriangleIndexBuffer, + parameters.staticData.rasterSegments); } } } diff --git a/src/mbgl/renderer/layers/render_raster_layer.hpp b/src/mbgl/renderer/layers/render_raster_layer.hpp index ce46152a95..87de316f7c 100644 --- a/src/mbgl/renderer/layers/render_raster_layer.hpp +++ b/src/mbgl/renderer/layers/render_raster_layer.hpp @@ -15,7 +15,7 @@ public: void evaluate(const PropertyEvaluationParameters&) override; bool hasTransition() const override; - void render(Painter&, PaintParameters&, RenderSource*) override; + void render(PaintParameters&, RenderSource*) override; std::unique_ptr<Bucket> createBucket(const BucketParameters&, const std::vector<const RenderLayer*>&) const override; diff --git a/src/mbgl/renderer/layers/render_symbol_layer.cpp b/src/mbgl/renderer/layers/render_symbol_layer.cpp index a87dd3c535..1376e8a3d8 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.cpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp @@ -2,9 +2,9 @@ #include <mbgl/renderer/buckets/symbol_bucket.hpp> #include <mbgl/renderer/bucket_parameters.hpp> #include <mbgl/renderer/property_evaluation_parameters.hpp> -#include <mbgl/renderer/painter.hpp> #include <mbgl/renderer/render_tile.hpp> #include <mbgl/renderer/paint_parameters.hpp> +#include <mbgl/renderer/frame_history.hpp> #include <mbgl/text/glyph_atlas.hpp> #include <mbgl/programs/programs.hpp> #include <mbgl/programs/symbol_program.hpp> @@ -70,8 +70,8 @@ bool RenderSymbolLayer::hasTransition() const { return unevaluated.hasTransition(); } -void RenderSymbolLayer::render(Painter& painter, PaintParameters& parameters, RenderSource*) { - if (painter.pass == RenderPass::Opaque) { +void RenderSymbolLayer::render(PaintParameters& parameters, RenderSource*) { + if (parameters.pass == RenderPass::Opaque) { return; } @@ -81,7 +81,7 @@ void RenderSymbolLayer::render(Painter& painter, PaintParameters& parameters, Re const auto& layout = bucket.layout; - painter.frameHistory.bind(painter.context, 1); + parameters.frameHistory.bind(parameters.context, 1); auto draw = [&] (auto& program, auto&& uniformValues, @@ -92,18 +92,18 @@ void RenderSymbolLayer::render(Painter& painter, PaintParameters& parameters, Re const auto& paintProperties) { // We clip symbols to their tile extent in still mode. - const bool needsClipping = painter.frame.mapMode == MapMode::Still; + const bool needsClipping = parameters.mapMode == MapMode::Still; program.get(paintProperties).draw( - painter.context, + parameters.context, gl::Triangles(), values_.pitchAlignment == AlignmentType::Map - ? painter.depthModeForSublayer(0, gl::DepthMode::ReadOnly) + ? parameters.depthModeForSublayer(0, gl::DepthMode::ReadOnly) : gl::DepthMode::disabled(), needsClipping - ? painter.stencilModeForClipping(tile.clip) + ? parameters.stencilModeForClipping(tile.clip) : gl::StencilMode::disabled(), - painter.colorModeForRenderPass(), + parameters.colorModeForRenderPass(), std::move(uniformValues), *buffers.vertexBuffer, *buffers.dynamicVertexBuffer, @@ -112,7 +112,7 @@ void RenderSymbolLayer::render(Painter& painter, PaintParameters& parameters, Re buffers.segments, binders, paintProperties, - painter.state.getZoom(), + parameters.state.getZoom(), getID() ); }; @@ -134,17 +134,17 @@ void RenderSymbolLayer::render(Painter& painter, PaintParameters& parameters, Re values, tile, *bucket.iconSizeBinder, - painter.state, - painter.frameHistory); + parameters.state, + parameters.frameHistory); - painter.context.updateVertexBuffer(*bucket.icon.dynamicVertexBuffer, std::move(bucket.icon.dynamicVertices)); + parameters.context.updateVertexBuffer(*bucket.icon.dynamicVertexBuffer, std::move(bucket.icon.dynamicVertices)); } const bool iconScaled = layout.get<IconSize>().constantOr(1.0) != 1.0 || bucket.iconsNeedLinear; - const bool iconTransformed = values.rotationAlignment == AlignmentType::Map || painter.state.getPitch() != 0; + const bool iconTransformed = values.rotationAlignment == AlignmentType::Map || parameters.state.getPitch() != 0; - painter.context.bindTexture(*geometryTile.iconAtlasTexture, 0, - bucket.sdfIcons || painter.state.isChanging() || iconScaled || iconTransformed + parameters.context.bindTexture(*geometryTile.iconAtlasTexture, 0, + bucket.sdfIcons || parameters.state.isChanging() || iconScaled || iconTransformed ? gl::TextureFilter::Linear : gl::TextureFilter::Nearest); const Size texsize = geometryTile.iconAtlasTexture->size; @@ -152,7 +152,7 @@ void RenderSymbolLayer::render(Painter& painter, PaintParameters& parameters, Re if (bucket.sdfIcons) { if (values.hasHalo) { draw(parameters.programs.symbolIconSDF, - SymbolSDFIconProgram::uniformValues(false, values, texsize, painter.pixelsToGLUnits, alongLine, tile, painter.state, SymbolSDFPart::Halo), + SymbolSDFIconProgram::uniformValues(false, values, texsize, parameters.pixelsToGLUnits, alongLine, tile, parameters.state, SymbolSDFPart::Halo), bucket.icon, bucket.iconSizeBinder, values, @@ -162,7 +162,7 @@ void RenderSymbolLayer::render(Painter& painter, PaintParameters& parameters, Re if (values.hasFill) { draw(parameters.programs.symbolIconSDF, - SymbolSDFIconProgram::uniformValues(false, values, texsize, painter.pixelsToGLUnits, alongLine, tile, painter.state, SymbolSDFPart::Fill), + SymbolSDFIconProgram::uniformValues(false, values, texsize, parameters.pixelsToGLUnits, alongLine, tile, parameters.state, SymbolSDFPart::Fill), bucket.icon, bucket.iconSizeBinder, values, @@ -171,7 +171,7 @@ void RenderSymbolLayer::render(Painter& painter, PaintParameters& parameters, Re } } else { draw(parameters.programs.symbolIcon, - SymbolIconProgram::uniformValues(false, values, texsize, painter.pixelsToGLUnits, alongLine, tile, painter.state), + SymbolIconProgram::uniformValues(false, values, texsize, parameters.pixelsToGLUnits, alongLine, tile, parameters.state), bucket.icon, bucket.iconSizeBinder, values, @@ -181,7 +181,7 @@ void RenderSymbolLayer::render(Painter& painter, PaintParameters& parameters, Re } if (bucket.hasTextData()) { - painter.context.bindTexture(*geometryTile.glyphAtlasTexture, 0, gl::TextureFilter::Linear); + parameters.context.bindTexture(*geometryTile.glyphAtlasTexture, 0, gl::TextureFilter::Linear); auto values = textPropertyValues(layout); auto paintPropertyValues = textPaintProperties(); @@ -196,17 +196,17 @@ void RenderSymbolLayer::render(Painter& painter, PaintParameters& parameters, Re values, tile, *bucket.textSizeBinder, - painter.state, - painter.frameHistory); + parameters.state, + parameters.frameHistory); - painter.context.updateVertexBuffer(*bucket.text.dynamicVertexBuffer, std::move(bucket.text.dynamicVertices)); + parameters.context.updateVertexBuffer(*bucket.text.dynamicVertexBuffer, std::move(bucket.text.dynamicVertices)); } const Size texsize = geometryTile.glyphAtlasTexture->size; if (values.hasHalo) { draw(parameters.programs.symbolGlyph, - SymbolSDFTextProgram::uniformValues(true, values, texsize, painter.pixelsToGLUnits, alongLine, tile, painter.state, SymbolSDFPart::Halo), + SymbolSDFTextProgram::uniformValues(true, values, texsize, parameters.pixelsToGLUnits, alongLine, tile, parameters.state, SymbolSDFPart::Halo), bucket.text, bucket.textSizeBinder, values, @@ -216,7 +216,7 @@ void RenderSymbolLayer::render(Painter& painter, PaintParameters& parameters, Re if (values.hasFill) { draw(parameters.programs.symbolGlyph, - SymbolSDFTextProgram::uniformValues(true, values, texsize, painter.pixelsToGLUnits, alongLine, tile, painter.state, SymbolSDFPart::Fill), + SymbolSDFTextProgram::uniformValues(true, values, texsize, parameters.pixelsToGLUnits, alongLine, tile, parameters.state, SymbolSDFPart::Fill), bucket.text, bucket.textSizeBinder, values, @@ -229,20 +229,20 @@ void RenderSymbolLayer::render(Painter& painter, PaintParameters& parameters, Re static const style::Properties<>::PossiblyEvaluated properties {}; static const CollisionBoxProgram::PaintPropertyBinders paintAttributeData(properties, 0); - painter.programs->collisionBox.draw( - painter.context, + parameters.programs.collisionBox.draw( + parameters.context, gl::Lines { 1.0f }, gl::DepthMode::disabled(), - painter.stencilModeForClipping(tile.clip), - painter.colorModeForRenderPass(), + parameters.stencilModeForClipping(tile.clip), + parameters.colorModeForRenderPass(), CollisionBoxProgram::UniformValues { uniforms::u_matrix::Value{ tile.matrix }, - uniforms::u_scale::Value{ std::pow(2.0f, float(painter.state.getZoom() - tile.tile.id.overscaledZ)) }, - uniforms::u_zoom::Value{ float(painter.state.getZoom() * 10) }, + uniforms::u_scale::Value{ std::pow(2.0f, float(parameters.state.getZoom() - tile.tile.id.overscaledZ)) }, + uniforms::u_zoom::Value{ float(parameters.state.getZoom() * 10) }, uniforms::u_maxzoom::Value{ float((tile.id.canonical.z + 1) * 10) }, uniforms::u_collision_y_stretch::Value{ tile.tile.yStretch() }, - uniforms::u_camera_to_center_distance::Value{ painter.state.getCameraToCenterDistance() }, - uniforms::u_pitch::Value{ painter.state.getPitch() }, + uniforms::u_camera_to_center_distance::Value{ parameters.state.getCameraToCenterDistance() }, + uniforms::u_pitch::Value{ parameters.state.getPitch() }, uniforms::u_fadetexture::Value{ 1 } }, *bucket.collisionBox.vertexBuffer, @@ -250,7 +250,7 @@ void RenderSymbolLayer::render(Painter& painter, PaintParameters& parameters, Re bucket.collisionBox.segments, paintAttributeData, properties, - painter.state.getZoom(), + parameters.state.getZoom(), getID() ); } diff --git a/src/mbgl/renderer/layers/render_symbol_layer.hpp b/src/mbgl/renderer/layers/render_symbol_layer.hpp index f29ceb504c..83709b5122 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.hpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.hpp @@ -66,7 +66,7 @@ public: void transition(const TransitionParameters&) override; void evaluate(const PropertyEvaluationParameters&) override; bool hasTransition() const override; - void render(Painter&, PaintParameters&, RenderSource*) override; + void render(PaintParameters&, RenderSource*) override; style::IconPaintProperties::PossiblyEvaluated iconPaintProperties() const; style::TextPaintProperties::PossiblyEvaluated textPaintProperties() const; |