summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2017-07-18 09:55:22 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2017-07-19 09:31:07 -0700
commitc5ec9cafa74d2312b4849ca0c16edc1db7079b6b (patch)
treec094d08c21504fa4e4f8d5c8980655947bba4cd2
parent5c24636c26ae8e01ec2b9bf65d7b08054bb43b1d (diff)
downloadqtlocation-mapboxgl-c5ec9cafa74d2312b4849ca0c16edc1db7079b6b.tar.gz
[core] Inline Painter::renderBackground
-rw-r--r--cmake/core-files.cmake1
-rw-r--r--src/mbgl/renderer/layers/render_background_layer.cpp75
-rw-r--r--src/mbgl/renderer/painter.hpp2
-rw-r--r--src/mbgl/renderer/painters/painter_background.cpp85
4 files changed, 74 insertions, 89 deletions
diff --git a/cmake/core-files.cmake b/cmake/core-files.cmake
index 4822c395a1..f00f30cdb4 100644
--- a/cmake/core-files.cmake
+++ b/cmake/core-files.cmake
@@ -245,7 +245,6 @@ set(MBGL_CORE_FILES
src/mbgl/renderer/layers/render_symbol_layer.hpp
# renderer/painters
- src/mbgl/renderer/painters/painter_background.cpp
src/mbgl/renderer/painters/painter_circle.cpp
src/mbgl/renderer/painters/painter_clipping.cpp
src/mbgl/renderer/painters/painter_debug.cpp
diff --git a/src/mbgl/renderer/layers/render_background_layer.cpp b/src/mbgl/renderer/layers/render_background_layer.cpp
index f17d8d9eed..cbf8d2f074 100644
--- a/src/mbgl/renderer/layers/render_background_layer.cpp
+++ b/src/mbgl/renderer/layers/render_background_layer.cpp
@@ -2,9 +2,16 @@
#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/programs/programs.hpp>
+#include <mbgl/programs/fill_program.hpp>
+#include <mbgl/util/tile_cover.hpp>
namespace mbgl {
+using namespace style;
+
RenderBackgroundLayer::RenderBackgroundLayer(Immutable<style::BackgroundLayer::Impl> _impl)
: RenderLayer(style::LayerType::Background, _impl),
unevaluated(impl().paint.untransitioned()) {
@@ -36,7 +43,73 @@ bool RenderBackgroundLayer::hasTransition() const {
}
void RenderBackgroundLayer::render(Painter& painter, PaintParameters& parameters, RenderSource*) {
- painter.renderBackground(parameters, *this);
+ // Note that for bottommost layers without a pattern, the background color is drawn with
+ // glClear rather than this method.
+
+ style::FillPaintProperties::PossiblyEvaluated properties;
+ properties.get<FillPattern>() = evaluated.get<BackgroundPattern>();
+ properties.get<FillOpacity>() = { evaluated.get<BackgroundOpacity>() };
+ properties.get<FillColor>() = { evaluated.get<BackgroundColor>() };
+
+ 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);
+
+ if (!imagePosA || !imagePosB)
+ return;
+
+ painter.imageManager->bind(painter.context, 0);
+
+ for (const auto& tileID : util::tileCover(painter.state, painter.state.getIntegerZoom())) {
+ parameters.programs.fillPattern.get(properties).draw(
+ painter.context,
+ gl::Triangles(),
+ painter.depthModeForSublayer(0, gl::DepthMode::ReadOnly),
+ gl::StencilMode::disabled(),
+ painter.colorModeForRenderPass(),
+ FillPatternUniforms::values(
+ painter.matrixForTile(tileID),
+ painter.context.viewport.getCurrentValue().size,
+ painter.imageManager->getPixelSize(),
+ *imagePosA,
+ *imagePosB,
+ evaluated.get<BackgroundPattern>(),
+ tileID,
+ painter.state
+ ),
+ painter.tileVertexBuffer,
+ painter.quadTriangleIndexBuffer,
+ painter.tileTriangleSegments,
+ paintAttibuteData,
+ properties,
+ painter.state.getZoom(),
+ getID()
+ );
+ }
+ } else {
+ for (const auto& tileID : util::tileCover(painter.state, painter.state.getIntegerZoom())) {
+ parameters.programs.fill.get(properties).draw(
+ painter.context,
+ gl::Triangles(),
+ painter.depthModeForSublayer(0, gl::DepthMode::ReadOnly),
+ gl::StencilMode::disabled(),
+ painter.colorModeForRenderPass(),
+ FillProgram::UniformValues {
+ uniforms::u_matrix::Value{ painter.matrixForTile(tileID) },
+ uniforms::u_world::Value{ painter.context.viewport.getCurrentValue().size },
+ },
+ painter.tileVertexBuffer,
+ painter.quadTriangleIndexBuffer,
+ painter.tileTriangleSegments,
+ paintAttibuteData,
+ properties,
+ painter.state.getZoom(),
+ getID()
+ );
+ }
+ }
}
} // namespace mbgl
diff --git a/src/mbgl/renderer/painter.hpp b/src/mbgl/renderer/painter.hpp
index 08ca76bf16..ca90f6a1f0 100644
--- a/src/mbgl/renderer/painter.hpp
+++ b/src/mbgl/renderer/painter.hpp
@@ -52,7 +52,6 @@ class RenderLineLayer;
class RenderCircleLayer;
class RenderSymbolLayer;
class RenderRasterLayer;
-class RenderBackgroundLayer;
class Programs;
class PaintParameters;
@@ -88,7 +87,6 @@ public:
void renderCircle(PaintParameters&, CircleBucket&, const RenderCircleLayer&, const RenderTile&);
void renderSymbol(PaintParameters&, SymbolBucket&, const RenderSymbolLayer&, const RenderTile&);
void renderRaster(PaintParameters&, RasterBucket&, const RenderRasterLayer&, const mat4&, bool useBucketBuffers /* = false */);
- void renderBackground(PaintParameters&, const RenderBackgroundLayer&);
void renderItem(PaintParameters&, const RenderItem&);
diff --git a/src/mbgl/renderer/painters/painter_background.cpp b/src/mbgl/renderer/painters/painter_background.cpp
deleted file mode 100644
index 661da0cc99..0000000000
--- a/src/mbgl/renderer/painters/painter_background.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-#include <mbgl/renderer/painter.hpp>
-#include <mbgl/renderer/paint_parameters.hpp>
-#include <mbgl/renderer/layers/render_background_layer.hpp>
-#include <mbgl/renderer/image_manager.hpp>
-#include <mbgl/style/layers/background_layer_impl.hpp>
-#include <mbgl/programs/programs.hpp>
-#include <mbgl/programs/fill_program.hpp>
-#include <mbgl/util/tile_cover.hpp>
-
-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<FillPattern>() = background.get<BackgroundPattern>();
- properties.get<FillOpacity>() = { background.get<BackgroundOpacity>() };
- properties.get<FillColor>() = { background.get<BackgroundColor>() };
-
- const FillProgram::PaintPropertyBinders paintAttibuteData(properties, 0);
-
- if (!background.get<BackgroundPattern>().to.empty()) {
- optional<ImagePosition> imagePosA = imageManager->getPattern(background.get<BackgroundPattern>().from);
- optional<ImagePosition> imagePosB = imageManager->getPattern(background.get<BackgroundPattern>().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<BackgroundPattern>(),
- 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