diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-07-01 21:44:15 +0300 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2019-07-04 16:56:43 +0300 |
commit | 63dd17e2bbdb2c956789865c1d517305f860a175 (patch) | |
tree | 6888c96f50df988e55b5722dd870db98fdd877b5 /src/mbgl/renderer/render_tile.cpp | |
parent | b1cbc2f2451d6eea9a8ad2adde1c8087ab581192 (diff) | |
download | qtlocation-mapboxgl-63dd17e2bbdb2c956789865c1d517305f860a175.tar.gz |
[core] Introduce TileRenderData
Remove rendering functionality from Tile implementations.
Diffstat (limited to 'src/mbgl/renderer/render_tile.cpp')
-rw-r--r-- | src/mbgl/renderer/render_tile.cpp | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/src/mbgl/renderer/render_tile.cpp b/src/mbgl/renderer/render_tile.cpp index 74fc945ac1..a0230a6511 100644 --- a/src/mbgl/renderer/render_tile.cpp +++ b/src/mbgl/renderer/render_tile.cpp @@ -4,6 +4,7 @@ #include <mbgl/renderer/buckets/debug_bucket.hpp> #include <mbgl/renderer/render_source.hpp> #include <mbgl/renderer/render_static_data.hpp> +#include <mbgl/renderer/tile_render_data.hpp> #include <mbgl/programs/programs.hpp> #include <mbgl/map/transform_state.hpp> #include <mbgl/gfx/cull_face_mode.hpp> @@ -15,7 +16,8 @@ namespace mbgl { using namespace style; -RenderTile::RenderTile(UnwrappedTileID id_, Tile& tile_) : id(std::move(id_)), tile(tile_) { +RenderTile::RenderTile(UnwrappedTileID id_, Tile& tile_) + : id(std::move(id_)), tile(tile_) { } RenderTile::~RenderTile() = default; @@ -65,32 +67,33 @@ const OverscaledTileID& RenderTile::getOverscaledTileID() const { return tile.id bool RenderTile::holdForFade() const { return tile.holdForFade(); } Bucket* RenderTile::getBucket(const style::Layer::Impl& impl) const { - return tile.getBucket(impl); + assert(renderData); + return renderData->getBucket(impl); } const LayerRenderData* RenderTile::getLayerRenderData(const style::Layer::Impl& impl) const { - return tile.getLayerRenderData(impl); + assert(renderData); + return renderData->getLayerRenderData(impl); } optional<ImagePosition> RenderTile::getPattern(const std::string& pattern) const { - assert(tile.kind == Tile::Kind::Geometry); - return static_cast<const GeometryTile&>(tile).getPattern(pattern); + assert(renderData); + return renderData->getPattern(pattern); } const gfx::Texture& RenderTile::getGlyphAtlasTexture() const { - assert(tile.kind == Tile::Kind::Geometry); - assert(static_cast<const GeometryTile&>(tile).glyphAtlasTexture); - return *(static_cast<const GeometryTile&>(tile).glyphAtlasTexture); + assert(renderData); + return renderData->getGlyphAtlasTexture(); } const gfx::Texture& RenderTile::getIconAtlasTexture() const { - assert(tile.kind == Tile::Kind::Geometry); - assert(static_cast<const GeometryTile&>(tile).iconAtlasTexture); - return *(static_cast<const GeometryTile&>(tile).iconAtlasTexture); + assert(renderData); + return renderData->getIconAtlasTexture(); } void RenderTile::upload(gfx::UploadPass& uploadPass) { - tile.upload(uploadPass); + assert(renderData); + renderData->upload(uploadPass); if (debugBucket) { debugBucket->upload(uploadPass); @@ -98,6 +101,10 @@ void RenderTile::upload(gfx::UploadPass& uploadPass) { } void RenderTile::prepare(const SourcePrepareParameters& parameters) { + renderData = tile.createRenderData(); + assert(renderData); + needsRendering = tile.usedByRenderedLayers; + if (parameters.debugOptions != MapDebugOptions::NoDebug && (!debugBucket || debugBucket->renderable != tile.isRenderable() || debugBucket->complete != tile.isComplete() || @@ -121,7 +128,7 @@ void RenderTile::prepare(const SourcePrepareParameters& parameters) { } void RenderTile::finishRender(PaintParameters& parameters) { - if (!tile.usedByRenderedLayers || parameters.debugOptions == MapDebugOptions::NoDebug) + if (!needsRendering || parameters.debugOptions == MapDebugOptions::NoDebug) return; static const style::Properties<>::PossiblyEvaluated properties {}; |