Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Private Member Functions | List of all members
GrMeshBuffer< Base, GrGpuBufferType > Class Template Referencefinal

#include <GrMeshBuffers.h>

Inheritance diagram for GrMeshBuffer< Base, GrGpuBufferType >:

Public Member Functions

 GrMeshBuffer ()=default
 
 ~GrMeshBuffer () override
 
size_t size () const override
 
bool isGaneshBacked () const override
 
sk_sp< const GrGpuBufferasGpuBuffer () const
 

Static Public Member Functions

static sk_sp< Base > Make (GrDirectContext *, const void *data, size_t size)
 

Private Member Functions

bool onUpdate (GrDirectContext *, const void *data, size_t offset, size_t size) override
 

Detailed Description

template<typename Base, GrGpuBufferType>
class GrMeshBuffer< Base, GrGpuBufferType >

Definition at line 20 of file GrMeshBuffers.h.

Constructor & Destructor Documentation

◆ GrMeshBuffer()

template<typename Base , GrGpuBufferType >
GrMeshBuffer< Base, GrGpuBufferType >::GrMeshBuffer ( )
default

◆ ~GrMeshBuffer()

template<typename Base , GrGpuBufferType Type>
GrMeshBuffer< Base, Type >::~GrMeshBuffer ( )
override

Definition at line 29 of file GrMeshBuffers.cpp.

29 {
30 GrResourceCache::ReturnResourceFromThread(std::move(fBuffer), fContextID);
31}
static std::enable_if_t< std::is_base_of_v< GrGpuResource, T >, void > ReturnResourceFromThread(sk_sp< T > &&resource, GrDirectContext::DirectContextID id)

Member Function Documentation

◆ asGpuBuffer()

template<typename Base , GrGpuBufferType >
sk_sp< const GrGpuBuffer > GrMeshBuffer< Base, GrGpuBufferType >::asGpuBuffer ( ) const
inline

Definition at line 35 of file GrMeshBuffers.h.

35{ return fBuffer; }

◆ isGaneshBacked()

template<typename Base , GrGpuBufferType >
bool GrMeshBuffer< Base, GrGpuBufferType >::isGaneshBacked ( ) const
inlineoverride

Definition at line 33 of file GrMeshBuffers.h.

33{ return true; }

◆ Make()

template<typename Base , GrGpuBufferType Type>
sk_sp< Base > GrMeshBuffer< Base, Type >::Make ( GrDirectContext dc,
const void *  data,
size_t  size 
)
static

Definition at line 34 of file GrMeshBuffers.cpp.

34 {
35 SkASSERT(dc);
36
38 size,
39 Type,
42 if (!buffer) {
43 return nullptr;
44 }
45
46 if (data && !buffer->updateData(data, 0, size, /*preserve=*/false)) {
47 return nullptr;
48 }
49
50 auto result = new GrMeshBuffer;
51 result->fBuffer = std::move(buffer);
52 result->fContextID = dc->directContextID();
53 return sk_sp<Base>(result);
54}
@ kStatic_GrAccessPattern
#define SkASSERT(cond)
Definition SkAssert.h:116
@ kYes
Do pre-clip the geometry before applying the (perspective) matrix.
GrResourceProvider * resourceProvider()
DirectContextID directContextID() const
GrDirectContextPriv priv()
GrMeshBuffer()=default
size_t size() const override
sk_sp< GrGpuBuffer > createBuffer(size_t size, GrGpuBufferType, GrAccessPattern, ZeroInit)
static const uint8_t buffer[]
GAsyncResult * result

◆ onUpdate()

template<typename Base , GrGpuBufferType Type>
bool GrMeshBuffer< Base, Type >::onUpdate ( GrDirectContext dc,
const void *  data,
size_t  offset,
size_t  size 
)
overrideprivate

Definition at line 57 of file GrMeshBuffers.cpp.

60 {
61 if (!dc || dc != fBuffer->getContext()) {
62 return false;
63 }
64 SkASSERT(!dc->abandoned()); // If dc is abandoned then fBuffer->getContext() should be null.
65
67 auto ownedData = SkData::MakeWithCopy(data, size);
69 std::move(ownedData), fBuffer, offset);
70 return true;
71 }
72
73 sk_sp<GrGpuBuffer> tempBuffer;
74 size_t tempOffset = 0;
75 if (auto* sbm = dc->priv().getGpu()->stagingBufferManager()) {
76 auto alignment = dc->priv().caps()->transferFromBufferToBufferAlignment();
77 auto [sliceBuffer, sliceOffset, ptr] = sbm->allocateStagingBufferSlice(size, alignment);
78 if (sliceBuffer) {
79 std::memcpy(ptr, data, size);
80 tempBuffer.reset(SkRef(sliceBuffer));
81 tempOffset = sliceOffset;
82 }
83 }
84
85 if (!tempBuffer) {
86 tempBuffer = dc->priv().resourceProvider()->createBuffer(size,
90 if (!tempBuffer) {
91 return false;
92 }
93 if (!tempBuffer->updateData(data, 0, size, /*preserve=*/false)) {
94 return false;
95 }
96 }
97
99 std::move(tempBuffer), tempOffset, fBuffer, offset, size);
100
101 return true;
102}
@ kDynamic_GrAccessPattern
static T * SkRef(T *obj)
Definition SkRefCnt.h:132
const GrCaps * caps() const
bool transferFromBufferToBufferSupport() const
Definition GrCaps.h:369
size_t transferFromBufferToBufferAlignment() const
Definition GrCaps.h:244
bool abandoned() override
void newBufferUpdateTask(sk_sp< SkData > src, sk_sp< GrGpuBuffer > dst, size_t dstOffset)
void newBufferTransferTask(sk_sp< GrGpuBuffer > src, size_t srcOffset, sk_sp< GrGpuBuffer > dst, size_t dstOffset, size_t size)
const GrDirectContext * getContext() const
virtual GrStagingBufferManager * stagingBufferManager()
Definition GrGpu.h:76
GrDrawingManager * drawingManager()
static sk_sp< SkData > MakeWithCopy(const void *data, size_t length)
Definition SkData.cpp:111
void reset(T *ptr=nullptr)
Definition SkRefCnt.h:310
Point offset

◆ size()

template<typename Base , GrGpuBufferType >
size_t GrMeshBuffer< Base, GrGpuBufferType >::size ( ) const
inlineoverride

Definition at line 28 of file GrMeshBuffers.h.

28 {
29 SkASSERT(fBuffer);
30 return fBuffer->size();
31 }
size_t size() const final
Definition GrGpuBuffer.h:34

The documentation for this class was generated from the following files: