xref: /aosp_15_r20/external/skia/src/gpu/ganesh/GrMeshBuffers.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2023 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 #ifndef GrMeshBuffers_DEFINED
9 #define GrMeshBuffers_DEFINED
10 
11 #include "include/core/SkRefCnt.h"
12 #include "include/gpu/ganesh/GrDirectContext.h"
13 #include "include/private/base/SkAssert.h"
14 #include "include/private/gpu/ganesh/GrTypesPriv.h"
15 #include "src/core/SkMeshPriv.h"
16 #include "src/gpu/ganesh/GrGpuBuffer.h"
17 
18 #include <cstddef>
19 
20 template <typename Base, GrGpuBufferType> class GrMeshBuffer final : public Base {
21 public:
22     GrMeshBuffer() = default;
23 
24     ~GrMeshBuffer() override;
25 
26     static sk_sp<Base> Make(GrDirectContext*, const void* data, size_t size);
27 
size()28     size_t size() const override {
29         SkASSERT(fBuffer);
30         return fBuffer->size();
31     }
32 
isGaneshBacked()33     bool isGaneshBacked() const override { return true; }
34 
asGpuBuffer()35     sk_sp<const GrGpuBuffer> asGpuBuffer() const { return fBuffer; }
36 
37 private:
38     bool onUpdate(GrDirectContext*, const void* data, size_t offset, size_t size) override;
39 
40     sk_sp<GrGpuBuffer> fBuffer;
41     GrDirectContext::DirectContextID fContextID;
42 };
43 
44 namespace SkMeshPriv {
45 using GaneshIndexBuffer  = GrMeshBuffer<SkMeshPriv::IB, GrGpuBufferType::kIndex >;
46 using GaneshVertexBuffer = GrMeshBuffer<SkMeshPriv::VB, GrGpuBufferType::kVertex>;
47 }  // namespace SkMeshPriv
48 
49 #endif
50