blob: 0cbe2b00a50dd9a5601b9d2f4333cda14f6168f0 [file] [log] [blame]
/*
* Copyright 2022 Google LLC
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef VertexChunkPatchAllocator_DEFINED
#define VertexChunkPatchAllocator_DEFINED
#include "src/gpu/ganesh/GrVertexChunkArray.h"
#include "src/gpu/tessellate/LinearTolerances.h"
namespace skgpu::ganesh {
// An adapter around GrVertexChunkBuilder that fits the API requirements of
// skgpu::tess::PatchWriter's PatchAllocator template parameter.
class VertexChunkPatchAllocator {
public:
// 'stride' is provided by PatchWriter.
// 'worstCaseTolerances' is used to accumulate the LinearTolerances from each append().
// 'target', 'chunks', and 'minVerticesPerChunk' are forwarded from the PatchWriter's ctor and
// are used to construct a GrVertexChunkBuilder matching the PatchWriter's stride.
VertexChunkPatchAllocator(size_t stride,
tess::LinearTolerances* worstCaseTolerances,
GrMeshDrawTarget* target,
GrVertexChunkArray* chunks,
int minVerticesPerChunk)
: fWorstCaseTolerances(worstCaseTolerances)
, fBuilder(target, chunks, stride, minVerticesPerChunk) {}
VertexWriter append(const tess::LinearTolerances& tolerances) {
fWorstCaseTolerances->accumulate(tolerances);
return fBuilder.appendVertices(1);
}
private:
tess::LinearTolerances* fWorstCaseTolerances;
GrVertexChunkBuilder fBuilder;
};
} // namespace skgpu::ganesh
#endif // VertexChunkPatchAllocator_DEFINED