#ifndef LLMR_MAP_TILE #define LLMR_MAP_TILE #include #include #include #include #include #include #include #include #include #include namespace llmr { class Style; class Bucket; class LayerDescription; class BucketDescription; class VectorTile; class VectorTileLayer; class FillVertexBuffer; class LineVertexBuffer; class TriangleElementsBuffer; class LineElementsBuffer; class PointElementsBuffer; class PlainShader; class Tile : public std::enable_shared_from_this, private util::noncopyable { public: struct exception : std::exception {}; struct geometry_too_long_exception : exception {}; public: typedef std::shared_ptr Ptr; typedef vec3 ID; enum state { initial, loading, ready, obsolete }; public: Tile(ID id, const Style& style); ~Tile(); // Start loading the tile. void request(); // Other functions bool parse(); void parseStyleLayers(const VectorTile& tile, const std::vector& layers); std::shared_ptr createBucket(const VectorTile& tile, const BucketDescription& bucket_desc); std::shared_ptr createFillBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc); std::shared_ptr createLineBucket(const VectorTileLayer& layer, const BucketDescription& bucket_desc); void cancel(); const std::string toString() const; static ID parent(const ID& id, int32_t z); static std::forward_list children(const ID& id, int32_t z); public: const ID id; state state; // Holds the actual geometries in this tile. DebugFontBuffer debugFontBuffer; VertexArrayObject debugFontArray; std::shared_ptr fillVertexBuffer; std::shared_ptr lineVertexBuffer; std::shared_ptr triangleElementsBuffer; std::shared_ptr lineElementsBuffer; std::shared_ptr pointElementsBuffer; // Holds the buckets of this tile. // They contain the location offsets in the buffers stored above std::map> buckets; private: // Source data std::string data; const Style& style; }; } #endif