/* * Copyright 2020 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef GrEagerVertexAllocator_DEFINED #define GrEagerVertexAllocator_DEFINED #include "include/core/SkRefCnt.h" #include "include/core/SkTypes.h" #include "src/gpu/BufferWriter.h" #include "src/gpu/ganesh/GrThreadSafeCache.h" #include <cstddef> class GrBuffer; class GrMeshDrawTarget; // This interface is used to allocate and map GPU vertex data before the exact number of required // vertices is known. Usage pattern: // // 1. Call lock(eagerCount) with an upper bound on the number of required vertices. // 2. Compute and write vertex data to the returned pointer (if not null). // 3. Call unlock(actualCount) and provide the actual number of vertices written during step #2. // // On step #3, the implementation will attempt to shrink the underlying GPU memory slot to fit the // actual vertex count. class GrEagerVertexAllocator { … }; // GrEagerVertexAllocator implementation that uses GrMeshDrawTarget::makeVertexSpace and // GrMeshDrawTarget::putBackVertices. class GrEagerDynamicVertexAllocator : public GrEagerVertexAllocator { … }; class GrCpuVertexAllocator : public GrEagerVertexAllocator { … }; #endif