diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2017-06-01 10:30:49 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2017-06-13 10:18:43 -0700 |
commit | 92252849c1a2ddf7887d1908841fa3c90dd59766 (patch) | |
tree | 9d192d0e60b46479122ea2e4a606b598287d49d7 /src/mbgl/renderer | |
parent | b201a7900f989af432aaea500a0e6c5ea5bbba53 (diff) | |
download | qtlocation-mapboxgl-92252849c1a2ddf7887d1908841fa3c90dd59766.tar.gz |
[core] Per-bucket glyph atlases
Diffstat (limited to 'src/mbgl/renderer')
-rw-r--r-- | src/mbgl/renderer/buckets/symbol_bucket.cpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/buckets/symbol_bucket.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/painter.cpp | 3 | ||||
-rw-r--r-- | src/mbgl/renderer/painter.hpp | 2 | ||||
-rw-r--r-- | src/mbgl/renderer/painters/painter_symbol.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/renderer/render_style.cpp | 10 | ||||
-rw-r--r-- | src/mbgl/renderer/render_style.hpp | 10 | ||||
-rw-r--r-- | src/mbgl/renderer/tile_parameters.hpp | 4 |
8 files changed, 18 insertions, 19 deletions
diff --git a/src/mbgl/renderer/buckets/symbol_bucket.cpp b/src/mbgl/renderer/buckets/symbol_bucket.cpp index bc4e5f57cb..fceffaa5f4 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.cpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.cpp @@ -3,6 +3,7 @@ #include <mbgl/renderer/layers/render_symbol_layer.hpp> #include <mbgl/renderer/bucket_parameters.hpp> #include <mbgl/style/layers/symbol_layer_impl.hpp> +#include <mbgl/text/glyph_atlas.hpp> namespace mbgl { @@ -38,6 +39,7 @@ void SymbolBucket::upload(gl::Context& context) { if (hasTextData()) { text.vertexBuffer = context.createVertexBuffer(std::move(text.vertices)); text.indexBuffer = context.createIndexBuffer(std::move(text.triangles)); + text.atlasTexture = context.createTexture(std::move(text.atlasImage), 0); textSizeBinder->upload(context); } diff --git a/src/mbgl/renderer/buckets/symbol_bucket.hpp b/src/mbgl/renderer/buckets/symbol_bucket.hpp index 652f2ea8e3..76b3467a9a 100644 --- a/src/mbgl/renderer/buckets/symbol_bucket.hpp +++ b/src/mbgl/renderer/buckets/symbol_bucket.hpp @@ -46,9 +46,11 @@ public: gl::VertexVector<SymbolLayoutVertex> vertices; gl::IndexVector<gl::Triangles> triangles; gl::SegmentVector<SymbolTextAttributes> segments; + AlphaImage atlasImage; optional<gl::VertexBuffer<SymbolLayoutVertex>> vertexBuffer; optional<gl::IndexBuffer<gl::Triangles>> indexBuffer; + optional<gl::Texture> atlasTexture; } text; std::unique_ptr<SymbolSizeBinder> iconSizeBinder; diff --git a/src/mbgl/renderer/painter.cpp b/src/mbgl/renderer/painter.cpp index e04d25d06a..6f0ddf8467 100644 --- a/src/mbgl/renderer/painter.cpp +++ b/src/mbgl/renderer/painter.cpp @@ -23,7 +23,6 @@ #include <mbgl/sprite/sprite_atlas.hpp> #include <mbgl/geometry/line_atlas.hpp> -#include <mbgl/text/glyph_atlas.hpp> #include <mbgl/programs/program_parameters.hpp> #include <mbgl/programs/programs.hpp> @@ -138,7 +137,6 @@ void Painter::render(RenderStyle& style, const FrameData& frame_, View& view) { view }; - glyphAtlas = style.glyphAtlas.get(); spriteAtlas = style.spriteAtlas.get(); lineAtlas = style.lineAtlas.get(); @@ -172,7 +170,6 @@ void Painter::render(RenderStyle& style, const FrameData& frame_, View& view) { spriteAtlas->upload(context, 0); lineAtlas->upload(context, 0); - glyphAtlas->upload(context, 0); frameHistory.upload(context, 0); } diff --git a/src/mbgl/renderer/painter.hpp b/src/mbgl/renderer/painter.hpp index 75a3ad5f89..c8b61c6bf8 100644 --- a/src/mbgl/renderer/painter.hpp +++ b/src/mbgl/renderer/painter.hpp @@ -34,7 +34,6 @@ class RenderStyle; class RenderTile; class SpriteAtlas; class View; -class GlyphAtlas; class LineAtlas; struct FrameData; class Tile; @@ -153,7 +152,6 @@ public: const float depthEpsilon = 1.0f / (1 << 16); SpriteAtlas* spriteAtlas = nullptr; - GlyphAtlas* glyphAtlas = nullptr; LineAtlas* lineAtlas = nullptr; optional<OffscreenTexture> extrusionTexture; diff --git a/src/mbgl/renderer/painters/painter_symbol.cpp b/src/mbgl/renderer/painters/painter_symbol.cpp index 563489987c..5a5264d178 100644 --- a/src/mbgl/renderer/painters/painter_symbol.cpp +++ b/src/mbgl/renderer/painters/painter_symbol.cpp @@ -105,12 +105,12 @@ void Painter::renderSymbol(PaintParameters& parameters, } if (bucket.hasTextData()) { - glyphAtlas->bind(context, 0); + context.bindTexture(*bucket.text.atlasTexture, 0, gl::TextureFilter::Linear); auto values = layer.textPropertyValues(layout); auto paintPropertyValues = layer.textPaintProperties(); - const Size texsize = glyphAtlas->getSize(); + const Size texsize = bucket.text.atlasTexture->size; if (values.hasHalo) { draw(parameters.programs.symbolGlyph, diff --git a/src/mbgl/renderer/render_style.cpp b/src/mbgl/renderer/render_style.cpp index 0998722f75..845bdbe63b 100644 --- a/src/mbgl/renderer/render_style.cpp +++ b/src/mbgl/renderer/render_style.cpp @@ -21,7 +21,7 @@ #include <mbgl/style/transition_options.hpp> #include <mbgl/sprite/sprite_atlas.hpp> #include <mbgl/sprite/sprite_loader.hpp> -#include <mbgl/text/glyph_atlas.hpp> +#include <mbgl/text/glyph_manager.hpp> #include <mbgl/geometry/line_atlas.hpp> #include <mbgl/sprite/sprite_atlas.hpp> #include <mbgl/map/query.hpp> @@ -38,7 +38,7 @@ RenderStyleObserver nullObserver; RenderStyle::RenderStyle(Scheduler& scheduler_, FileSource& fileSource_) : scheduler(scheduler_), fileSource(fileSource_), - glyphAtlas(std::make_unique<GlyphAtlas>(Size{ 2048, 2048 }, fileSource)), + glyphManager(std::make_unique<GlyphManager>(fileSource)), spriteAtlas(std::make_unique<SpriteAtlas>()), lineAtlas(std::make_unique<LineAtlas>(Size{ 256, 512 })), imageImpls(makeMutable<std::vector<Immutable<style::Image::Impl>>>()), @@ -46,7 +46,7 @@ RenderStyle::RenderStyle(Scheduler& scheduler_, FileSource& fileSource_) layerImpls(makeMutable<std::vector<Immutable<style::Layer::Impl>>>()), renderLight(makeMutable<Light::Impl>()), observer(&nullObserver) { - glyphAtlas->setObserver(this); + glyphManager->setObserver(this); } RenderStyle::~RenderStyle() = default; @@ -101,10 +101,10 @@ void RenderStyle::update(const UpdateParameters& parameters) { parameters.mode, parameters.annotationManager, *spriteAtlas, - *glyphAtlas + *glyphManager }; - glyphAtlas->setURL(parameters.glyphURL); + glyphManager->setURL(parameters.glyphURL); // Update light. const bool lightChanged = renderLight.impl != parameters.light; diff --git a/src/mbgl/renderer/render_style.hpp b/src/mbgl/renderer/render_style.hpp index ff222f2569..26aebda3ab 100644 --- a/src/mbgl/renderer/render_style.hpp +++ b/src/mbgl/renderer/render_style.hpp @@ -5,7 +5,7 @@ #include <mbgl/renderer/render_source_observer.hpp> #include <mbgl/renderer/render_layer.hpp> #include <mbgl/renderer/render_light.hpp> -#include <mbgl/text/glyph_atlas_observer.hpp> +#include <mbgl/text/glyph_manager_observer.hpp> #include <mbgl/map/zoom_history.hpp> #include <mbgl/map/mode.hpp> @@ -16,7 +16,7 @@ namespace mbgl { class FileSource; -class GlyphAtlas; +class GlyphManager; class SpriteAtlas; class LineAtlas; class RenderData; @@ -32,7 +32,7 @@ class Source; class Layer; } // namespace style -class RenderStyle : public GlyphAtlasObserver, +class RenderStyle : public GlyphManagerObserver, public RenderSourceObserver { public: RenderStyle(Scheduler&, FileSource&); @@ -66,7 +66,7 @@ public: Scheduler& scheduler; FileSource& fileSource; - std::unique_ptr<GlyphAtlas> glyphAtlas; + std::unique_ptr<GlyphManager> glyphManager; std::unique_ptr<SpriteAtlas> spriteAtlas; std::unique_ptr<LineAtlas> lineAtlas; @@ -79,7 +79,7 @@ private: std::unordered_map<std::string, std::unique_ptr<RenderLayer>> renderLayers; RenderLight renderLight; - // GlyphAtlasObserver implementation. + // GlyphManagerObserver implementation. void onGlyphsError(const FontStack&, const GlyphRange&, std::exception_ptr) override; // RenderSourceObserver implementation. diff --git a/src/mbgl/renderer/tile_parameters.hpp b/src/mbgl/renderer/tile_parameters.hpp index b4a84ec6c8..88def11585 100644 --- a/src/mbgl/renderer/tile_parameters.hpp +++ b/src/mbgl/renderer/tile_parameters.hpp @@ -9,7 +9,7 @@ class Scheduler; class FileSource; class AnnotationManager; class SpriteAtlas; -class GlyphAtlas; +class GlyphManager; class TileParameters { public: @@ -21,7 +21,7 @@ public: const MapMode mode; AnnotationManager& annotationManager; SpriteAtlas& spriteAtlas; - GlyphAtlas& glyphAtlas; + GlyphManager& glyphManager; }; } // namespace mbgl |