#ifndef MBGL_RENDERER_FILLBUCKET #define MBGL_RENDERER_FILLBUCKET #include #include #include #include #include #include #include #include namespace mbgl { class FillVertexBuffer; class OutlineShader; class PlainShader; class PatternShader; class FillBucket : public Bucket { static void *alloc(void *data, unsigned int size); static void *realloc(void *data, void *ptr, unsigned int size); static void free(void *userData, void *ptr); typedef ElementGroup<2> TriangleGroup; typedef ElementGroup<1> LineGroup; public: FillBucket(); ~FillBucket() override; void upload() override; void render(Painter&, const StyleLayer&, const TileID&, const mat4&) override; bool hasData() const override; void addGeometry(const GeometryCollection&); void tessellate(); void drawElements(PlainShader& shader); void drawElements(PatternShader& shader); void drawVertices(OutlineShader& shader); private: TESSalloc *allocator; TESStesselator *tesselator; ClipperLib::Clipper clipper; FillVertexBuffer vertexBuffer; TriangleElementsBuffer triangleElementsBuffer; LineElementsBuffer lineElementsBuffer; std::vector> triangleGroups; std::vector> lineGroups; std::vector line; bool hasVertices = false; static const int vertexSize = 2; static const int stride = sizeof(TESSreal) * vertexSize; static const int vertices_per_group = 3; }; } // namespace mbgl #endif