#pragma once #include #include #include #include #include #include #include #include #include #include #include namespace mbgl { class PlacedSymbol { public: PlacedSymbol(Point anchorPoint_, uint16_t segment_, float lowerSize_, float upperSize_, std::array lineOffset_, float placementZoom_, bool useVerticalMode_, GeometryCoordinates line_) : anchorPoint(anchorPoint_), segment(segment_), lowerSize(lowerSize_), upperSize(upperSize_), lineOffset(lineOffset_), placementZoom(placementZoom_), useVerticalMode(useVerticalMode_), line(std::move(line_)) {} Point anchorPoint; uint16_t segment; float lowerSize; float upperSize; std::array lineOffset; float placementZoom; bool useVerticalMode; GeometryCoordinates line; std::vector glyphOffsets; }; class SymbolBucket : public Bucket { public: SymbolBucket(style::SymbolLayoutProperties::PossiblyEvaluated, const std::map>&, const style::DataDrivenPropertyValue& textSize, const style::DataDrivenPropertyValue& iconSize, float zoom, bool sdfIcons, bool iconsNeedLinear); void upload(gl::Context&) override; void render(Painter&, PaintParameters&, const RenderLayer&, const RenderTile&) override; bool hasData() const override; bool hasTextData() const; bool hasIconData() const; bool hasCollisionBoxData() const; const style::SymbolLayoutProperties::PossiblyEvaluated layout; const bool sdfIcons; const bool iconsNeedLinear; std::map> paintPropertyBinders; std::unique_ptr textSizeBinder; struct TextBuffer { gl::VertexVector vertices; gl::VertexVector dynamicVertices; gl::IndexVector triangles; SegmentVector segments; std::vector placedSymbols; optional> vertexBuffer; optional> dynamicVertexBuffer; optional> indexBuffer; } text; std::unique_ptr iconSizeBinder; struct IconBuffer { gl::VertexVector vertices; gl::VertexVector dynamicVertices; gl::IndexVector triangles; SegmentVector segments; std::vector placedSymbols; PremultipliedImage atlasImage; optional> vertexBuffer; optional> dynamicVertexBuffer; optional> indexBuffer; } icon; struct CollisionBoxBuffer { gl::VertexVector vertices; gl::IndexVector lines; SegmentVector segments; optional> vertexBuffer; optional> dynamicVertexBuffer; optional> indexBuffer; } collisionBox; }; } // namespace mbgl