/* * Copyright 2021 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef skgpu_DrawBufferManager_DEFINED #define skgpu_DrawBufferManager_DEFINED #include "experimental/graphite/src/DrawTypes.h" #include "include/core/SkRefCnt.h" #include "src/gpu/BufferWriter.h" #include namespace skgpu { class Buffer; class CommandBuffer; class ResourceProvider; class DrawBufferManager { public: DrawBufferManager(ResourceProvider*, size_t uniformStartAlignment); ~DrawBufferManager(); std::tuple getVertexWriter(size_t requiredBytes); std::tuple getIndexWriter(size_t requiredBytes); std::tuple getUniformWriter(size_t requiredBytes); // Finalizes all buffers and transfers ownership of them to the CommandBuffer. void transferToCommandBuffer(CommandBuffer*); private: ResourceProvider* fResourceProvider; sk_sp fCurrentVertexBuffer; size_t fVertexOffset = 0; sk_sp fCurrentIndexBuffer; size_t fIndexOffset = 0; sk_sp fCurrentUniformBuffer; size_t fUniformOffset = 0; size_t fUniformStartAlignment; std::vector> fUsedBuffers; }; } // namespace skgpu #endif // skgpu_DrawBufferManager_DEFINED