#pragma once #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 mtl { class RenderPass; class Texture2D; class VertexArray; class Drawable : public gfx::Drawable { public: Drawable(std::string name); ~Drawable() override; void draw(PaintParameters&) const override; struct DrawSegment; 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); void upload(gfx::UploadPass&); void setColorMode(const gfx::ColorMode&) override; void setShader(gfx::ShaderProgramBasePtr) override; void setEnableStencil(bool) override; void setEnableDepth(bool) override; void setSubLayerIndex(int32_t) override; void setDepthType(gfx::DepthMaskType) override; protected: // For testing only. Drawable(std::unique_ptr); void bindAttributes(RenderPass&) const noexcept; void unbindAttributes(RenderPass&) const noexcept {} void bindInstanceAttributes(RenderPass&) const noexcept; void bindUniformBuffers(RenderPass&) const noexcept; void unbindUniformBuffers(RenderPass&) const noexcept {} void bindTextures(RenderPass&) const noexcept; void unbindTextures(RenderPass&) const noexcept; void uploadTextures(UploadPass&) const noexcept; class Impl; const std::unique_ptr impl; }; } // namespace mtl } // namespace mbgl