1 /* 2 * Copyright 2021 Google LLC. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "src/gpu/ganesh/GrVertexChunkArray.h" 9 10 #include "src/gpu/ganesh/GrMeshDrawTarget.h" 11 12 #include <algorithm> 13 ~GrVertexChunkBuilder()14GrVertexChunkBuilder::~GrVertexChunkBuilder() { 15 if (!fChunks->empty()) { 16 fTarget->putBackVertices(fCurrChunkVertexCapacity - fCurrChunkVertexCount, fStride); 17 fChunks->back().fCount = fCurrChunkVertexCount; 18 } 19 } 20 allocChunk(int minCount)21bool GrVertexChunkBuilder::allocChunk(int minCount) { 22 if (!fChunks->empty()) { 23 // No need to put back vertices; the buffer is full. 24 fChunks->back().fCount = fCurrChunkVertexCount; 25 } 26 fCurrChunkVertexCount = 0; 27 GrVertexChunk* chunk = &fChunks->push_back(); 28 int minAllocCount = std::max(minCount, fMinVerticesPerChunk); 29 fCurrChunkVertexWriter = fTarget->makeVertexWriterAtLeast(fStride, minAllocCount, 30 minAllocCount, &chunk->fBuffer, 31 &chunk->fBase, 32 &fCurrChunkVertexCapacity); 33 if (!fCurrChunkVertexWriter || !chunk->fBuffer || fCurrChunkVertexCapacity < minCount) { 34 SkDebugf("WARNING: Failed to allocate vertex buffer for GrVertexChunk.\n"); 35 fChunks->pop_back(); 36 SkASSERT(fCurrChunkVertexCount == 0); 37 fCurrChunkVertexCapacity = 0; 38 return false; 39 } 40 fMinVerticesPerChunk *= 2; 41 return true; 42 } 43