#ifndef MBGL_RENDERER_FILLBUCKET #define MBGL_RENDERER_FILLBUCKET #include #include #include #include #include #include #include #include namespace mbgl { class FillVertexBuffer; class OutlineShader; class OutlinePatternShader; 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<2> LineGroup; public: FillBucket(); ~FillBucket() override; void upload(gl::GLObjectStore&) override; void render(Painter&, const StyleLayer&, const UnwrappedTileID&, const mat4&) override; bool hasData() const override; bool needsClipping() const override; void addGeometry(const GeometryCollection&); void tessellate(); void drawElements(PlainShader&, gl::GLObjectStore&); void drawElements(PatternShader&, gl::GLObjectStore&); void drawVertices(OutlineShader&, gl::GLObjectStore&); void drawVertices(OutlinePatternShader&, gl::GLObjectStore&); 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