summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2017-07-18 10:03:45 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2017-07-19 09:31:07 -0700
commit23198d793562718589d0242efaa9185c5e881007 (patch)
tree8ddfa83fff77ea76e4c6f066d43ab743f0afa061 /src
parentc5ec9cafa74d2312b4849ca0c16edc1db7079b6b (diff)
downloadqtlocation-mapboxgl-23198d793562718589d0242efaa9185c5e881007.tar.gz
[core] Inline Painter::renderCircle
Diffstat (limited to 'src')
-rw-r--r--src/mbgl/renderer/layers/render_circle_layer.cpp53
-rw-r--r--src/mbgl/renderer/painter.hpp3
-rw-r--r--src/mbgl/renderer/painters/painter_circle.cpp60
3 files changed, 46 insertions, 70 deletions
diff --git a/src/mbgl/renderer/layers/render_circle_layer.cpp b/src/mbgl/renderer/layers/render_circle_layer.cpp
index c80b7bd27d..22e515e603 100644
--- a/src/mbgl/renderer/layers/render_circle_layer.cpp
+++ b/src/mbgl/renderer/layers/render_circle_layer.cpp
@@ -2,6 +2,9 @@
#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>
+#include <mbgl/programs/circle_program.hpp>
#include <mbgl/tile/tile.hpp>
#include <mbgl/style/layers/circle_layer_impl.hpp>
#include <mbgl/geometry/feature_index.hpp>
@@ -10,6 +13,8 @@
namespace mbgl {
+using namespace style;
+
RenderCircleLayer::RenderCircleLayer(Immutable<style::CircleLayer::Impl> _impl)
: RenderLayer(style::LayerType::Circle, _impl),
unevaluated(impl().paint.untransitioned()) {
@@ -44,14 +49,48 @@ bool RenderCircleLayer::hasTransition() const {
}
void RenderCircleLayer::render(Painter& painter, PaintParameters& parameters, RenderSource*) {
+ if (painter.pass == RenderPass::Opaque) {
+ return;
+ }
+
+ const bool scaleWithMap = evaluated.get<CirclePitchScale>() == CirclePitchScaleType::Map;
+ const bool pitchWithMap = evaluated.get<CirclePitchAlignment>() == AlignmentType::Map;
+
for (const RenderTile& tile : renderTiles) {
- Bucket* bucket = tile.tile.getBucket(*baseImpl);
- assert(dynamic_cast<CircleBucket*>(bucket));
- painter.renderCircle(
- parameters,
- *reinterpret_cast<CircleBucket*>(bucket),
- *this,
- tile);
+ assert(dynamic_cast<CircleBucket*>(tile.tile.getBucket(*baseImpl)));
+ CircleBucket& bucket = *reinterpret_cast<CircleBucket*>(tile.tile.getBucket(*baseImpl));
+
+ parameters.programs.circle.get(evaluated).draw(
+ painter.context,
+ gl::Triangles(),
+ painter.depthModeForSublayer(0, gl::DepthMode::ReadOnly),
+ painter.frame.mapMode == MapMode::Still
+ ? painter.stencilModeForClipping(tile.clip)
+ : gl::StencilMode::disabled(),
+ painter.colorModeForRenderPass(),
+ CircleProgram::UniformValues {
+ uniforms::u_matrix::Value{
+ tile.translatedMatrix(evaluated.get<CircleTranslate>(),
+ evaluated.get<CircleTranslateAnchor>(),
+ painter.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() },
+ uniforms::u_pitch_with_map::Value{ pitchWithMap }
+ },
+ *bucket.vertexBuffer,
+ *bucket.indexBuffer,
+ bucket.segments,
+ bucket.paintPropertyBinders.at(getID()),
+ evaluated,
+ painter.state.getZoom(),
+ getID()
+ );
}
}
diff --git a/src/mbgl/renderer/painter.hpp b/src/mbgl/renderer/painter.hpp
index ca90f6a1f0..645ddfd3ab 100644
--- a/src/mbgl/renderer/painter.hpp
+++ b/src/mbgl/renderer/painter.hpp
@@ -42,14 +42,12 @@ class DebugBucket;
class FillBucket;
class FillExtrusionBucket;
class LineBucket;
-class CircleBucket;
class SymbolBucket;
class RasterBucket;
class RenderFillLayer;
class RenderFillExtrusionLayer;
class RenderLineLayer;
-class RenderCircleLayer;
class RenderSymbolLayer;
class RenderRasterLayer;
@@ -84,7 +82,6 @@ public:
void renderFill(PaintParameters&, FillBucket&, const RenderFillLayer&, const RenderTile&);
void renderFillExtrusion(PaintParameters&, FillExtrusionBucket&, const RenderFillExtrusionLayer&, const RenderTile&);
void renderLine(PaintParameters&, LineBucket&, const RenderLineLayer&, const RenderTile&);
- 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 */);
diff --git a/src/mbgl/renderer/painters/painter_circle.cpp b/src/mbgl/renderer/painters/painter_circle.cpp
deleted file mode 100644
index 72a17d19fb..0000000000
--- a/src/mbgl/renderer/painters/painter_circle.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <mbgl/renderer/painter.hpp>
-#include <mbgl/renderer/paint_parameters.hpp>
-#include <mbgl/renderer/buckets/circle_bucket.hpp>
-#include <mbgl/renderer/render_tile.hpp>
-#include <mbgl/renderer/layers/render_circle_layer.hpp>
-#include <mbgl/style/layers/circle_layer_impl.hpp>
-#include <mbgl/programs/programs.hpp>
-#include <mbgl/programs/circle_program.hpp>
-#include <mbgl/gl/context.hpp>
-
-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<CirclePitchScale>() == CirclePitchScaleType::Map;
- const bool pitchWithMap = properties.get<CirclePitchAlignment>() == 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<CircleTranslate>(),
- properties.get<CircleTranslateAnchor>(),
- state)
- },
- uniforms::u_scale_with_map::Value{ scaleWithMap },
- uniforms::u_extrude_scale::Value{ pitchWithMap
- ? std::array<float, 2> {{
- 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(),
- layer.getID()
- );
-}
-
-} // namespace mbgl