| /* | |
| * Copyright 2021 Google LLC | |
| * | |
| * Use of this source code is governed by a BSD-style license that can be | |
| * found in the LICENSE file. | |
| */ | |
| #include "src/gpu/ganesh/GrMeshDrawTarget.h" | |
| #include "src/gpu/BufferWriter.h" | |
| #include "src/gpu/ganesh/GrResourceProvider.h" | |
| uint32_t GrMeshDrawTarget::contextUniqueID() const { | |
| return this->resourceProvider()->contextUniqueID(); | |
| } | |
| template<typename W> | |
| static W make_writer(void* p, int count, size_t elementSize) { | |
| // Don't worry about overflow in calculating byte size if 'p' is not null, presumably the actual | |
| // allocation validated it, so it should be safe after the fact. | |
| return p ? W{p, count * elementSize} : W{}; | |
| } | |
| skgpu::VertexWriter GrMeshDrawTarget::makeVertexWriter( | |
| size_t vertexSize, int vertexCount, sk_sp<const GrBuffer>* buffer, int* startVertex) { | |
| void* p = this->makeVertexSpace(vertexSize, vertexCount, buffer, startVertex); | |
| return make_writer<skgpu::VertexWriter>(p, vertexCount, vertexSize); | |
| } | |
| skgpu::IndexWriter GrMeshDrawTarget::makeIndexWriter( | |
| int indexCount, sk_sp<const GrBuffer>* buffer, int* startIndex) { | |
| void* p = this->makeIndexSpace(indexCount, buffer, startIndex); | |
| return make_writer<skgpu::IndexWriter>(p, indexCount, sizeof(uint16_t)); | |
| } | |
| skgpu::VertexWriter GrMeshDrawTarget::makeVertexWriterAtLeast( | |
| size_t vertexSize, int minVertexCount, int fallbackVertexCount, | |
| sk_sp<const GrBuffer>* buffer, int* startVertex, int* actualVertexCount) { | |
| void* p = this->makeVertexSpaceAtLeast(vertexSize, minVertexCount, fallbackVertexCount, | |
| buffer, startVertex, actualVertexCount); | |
| return make_writer<skgpu::VertexWriter>(p, *actualVertexCount, vertexSize); | |
| } | |
| skgpu::IndexWriter GrMeshDrawTarget::makeIndexWriterAtLeast( | |
| int minIndexCount, int fallbackIndexCount, sk_sp<const GrBuffer>* buffer, | |
| int* startIndex, int* actualIndexCount) { | |
| void* p = this->makeIndexSpaceAtLeast(minIndexCount, fallbackIndexCount, buffer, | |
| startIndex, actualIndexCount); | |
| return make_writer<skgpu::IndexWriter>(p, *actualIndexCount, sizeof(uint16_t)); | |
| } |