#pragma once #include #include #include #include #include #include namespace mbgl { template class Segment; class PaintParameters; namespace gfx { class IndexBuffer; class UploadPass; class VertexBufferResource; using UniqueVertexBufferResource = std::unique_ptr; } // namespace gfx namespace gl { class Texture2D; class VertexArray; class DrawableGL : public gfx::Drawable { public: DrawableGL(std::string name); ~DrawableGL() override; void draw(PaintParameters&) const override; struct DrawSegmentGL; void setIndexData(gfx::IndexVectorBasePtr, std::vector segments) override; void setVertices(std::vector&&, std::size_t, gfx::AttributeDataType) override; const gfx::UniformBufferArray& getUniformBuffers() const override; gfx::UniformBufferArray& mutableUniformBuffers() override; void setVertexAttrId(const size_t id); void upload(gfx::UploadPass&); protected: class Impl; const std::unique_ptr impl; // For testing only. DrawableGL(std::unique_ptr); private: gfx::ColorMode makeColorMode(PaintParameters&) const; gfx::StencilMode makeStencilMode(PaintParameters&) const; void uploadTextures() const; void bindUniformBuffers() const; void unbindUniformBuffers() const; void bindTextures() const; void unbindTextures() const; }; } // namespace gl } // namespace mbgl