#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace mbgl { class UpdateParameters; class PaintParameters; class RenderStaticData; class RenderData; class RenderedQueryOptions; class SourceQueryOptions; class FileSource; class GlyphManager; class ImageManager; class LineAtlas; class Scheduler; namespace style { class Image; class Source; class Layer; } // namespace style class Renderer::Impl : public GlyphManagerObserver, public RenderSourceObserver{ public: Impl(RendererBackend&, float pixelRatio_, FileSource&, Scheduler&, GLContextMode, const optional programCacheDir); ~Impl() final; void setObserver(RendererObserver*); void render(const UpdateParameters&); std::vector queryRenderedFeatures(const ScreenLineString&, const RenderedQueryOptions&) const; std::vector querySourceFeatures(const std::string& sourceID, const SourceQueryOptions&) const; void onLowMemory(); void dumDebugLogs(); private: void doRender(PaintParameters&); bool isLoaded() const; bool hasTransitions() const; RenderSource* getRenderSource(const std::string& id) const; RenderLayer* getRenderLayer(const std::string& id); const RenderLayer* getRenderLayer(const std::string& id) const; // GlyphManagerObserver implementation. void onGlyphsError(const FontStack&, const GlyphRange&, std::exception_ptr) override; // RenderSourceObserver implementation. void onTileChanged(RenderSource&, const OverscaledTileID&) override; void onTileError(RenderSource&, const OverscaledTileID&, std::exception_ptr) override; friend class Renderer; RendererBackend& backend; Scheduler& scheduler; FileSource& fileSource; RendererObserver* observer; const GLContextMode contextMode; const float pixelRatio; const optional programCacheDir; enum class RenderState { Never, Partial, Fully, }; RenderState renderState = RenderState::Never; FrameHistory frameHistory; ZoomHistory zoomHistory; TransformState transformState; std::unique_ptr glyphManager; std::unique_ptr imageManager; std::unique_ptr lineAtlas; std::unique_ptr staticData; Immutable>> imageImpls; Immutable>> sourceImpls; Immutable>> layerImpls; std::unordered_map> renderSources; std::unordered_map> renderLayers; RenderLight renderLight; }; } // namespace mbgl