#pragma once #include #include #include #include #include #include namespace mbgl { namespace gfx { class CommandEncoder; class Renderable; class VertexVectorBase; using VertexVectorBasePtr = std::shared_ptr; } // namespace gfx namespace vulkan { class BufferResource; class CommandEncoder; class Context; class VertexArray; class Texture2D; class RenderbufferResource : public gfx::RenderbufferResource { public: RenderbufferResource() = default; }; class UploadPass final : public gfx::UploadPass { public: UploadPass(gfx::Renderable&, CommandEncoder&, const char* name); ~UploadPass() override; gfx::Context& getContext() override; const gfx::Context& getContext() const override; std::unique_ptr createVertexBufferResource(const void* data, std::size_t size, gfx::BufferUsageType, bool persistent) override; void updateVertexBufferResource(gfx::VertexBufferResource&, const void* data, std::size_t size) override; std::unique_ptr createIndexBufferResource(const void* data, std::size_t size, gfx::BufferUsageType, bool persistent) override; void updateIndexBufferResource(gfx::IndexBufferResource&, const void* data, std::size_t size) override; const gfx::UniqueVertexBufferResource& getBuffer(const gfx::VertexVectorBasePtr&, gfx::BufferUsageType); gfx::AttributeBindingArray buildAttributeBindings( const std::size_t vertexCount, const gfx::AttributeDataType vertexType, const std::size_t vertexAttributeIndex, const std::vector& vertexData, const gfx::VertexAttributeArray& defaults, const gfx::VertexAttributeArray& overrides, gfx::BufferUsageType, const std::chrono::duration lastUpdate, /*out*/ std::vector>& outBuffers) override; std::unique_ptr createTextureResource(Size, const void* data, gfx::TexturePixelType, gfx::TextureChannelDataType) override; void updateTextureResource( gfx::TextureResource&, Size, const void* data, gfx::TexturePixelType, gfx::TextureChannelDataType) override; void updateTextureResourceSub(gfx::TextureResource&, uint16_t xOffset, uint16_t yOffset, Size, const void* data, gfx::TexturePixelType, gfx::TextureChannelDataType) override; private: void pushDebugGroup(const char* name) override; void popDebugGroup() override; void endEncoding(); private: CommandEncoder& commandEncoder; std::vector> debugGroups; }; } // namespace vulkan } // namespace mbgl