#pragma once #include #include #include #include #include #define BUFFER_OFFSET_0 ((GLbyte*)nullptr) #define BUFFER_OFFSET(i) ((BUFFER_OFFSET_0) + (i)) namespace mbgl { class Painter; class UnwrappedTileID; class CollisionTile; namespace gl { class ObjectStore; } // namespace gl namespace style { class Layer; } // namespace style class Bucket : private util::noncopyable { public: Bucket() = default; // As long as this bucket has a Prepare render pass, this function is getting called. Typically, // this only happens once when the bucket is being rendered for the first time. virtual void upload(gl::ObjectStore&) = 0; // Every time this bucket is getting rendered, this function is called. This happens either // once or twice (for Opaque and Transparent render passes). virtual void render(Painter&, const style::Layer&, const UnwrappedTileID&, const mat4&) = 0; virtual ~Bucket() = default; virtual bool hasData() const = 0; virtual bool needsClipping() const = 0; bool needsUpload() const { return !uploaded; } virtual void placeFeatures(CollisionTile&) {} virtual void swapRenderData() {} protected: util::Atomic uploaded { false }; }; } // namespace mbgl