Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Private Member Functions | List of all members
impeller::DeviceBufferGLES Class Referencefinal

#include <device_buffer_gles.h>

Inheritance diagram for impeller::DeviceBufferGLES:
impeller::DeviceBuffer impeller::BackendCast< DeviceBufferGLES, DeviceBuffer >

Public Types

enum class  BindingType { kArrayBuffer , kElementArrayBuffer }
 

Public Member Functions

 DeviceBufferGLES (DeviceBufferDescriptor desc, ReactorGLES::Ref reactor, std::shared_ptr< Allocation > backing_store)
 
 ~DeviceBufferGLES () override
 
const uint8_t * GetBufferData () const
 
void UpdateBufferData (const std::function< void(uint8_t *, size_t length)> &update_buffer_data)
 
bool BindAndUploadDataIfNecessary (BindingType type) const
 
void Flush (std::optional< Range > range=std::nullopt) const override
 
- Public Member Functions inherited from impeller::DeviceBuffer
virtual ~DeviceBuffer ()
 
bool CopyHostBuffer (const uint8_t *source, Range source_range, size_t offset=0u)
 
virtual std::shared_ptr< TextureAsTexture (Allocator &allocator, const TextureDescriptor &descriptor, uint16_t row_bytes) const
 
const DeviceBufferDescriptorGetDeviceBufferDescriptor () const
 
virtual void Invalidate (std::optional< Range > range=std::nullopt) const
 

Private Member Functions

uint8_t * OnGetContents () const override
 
bool OnCopyHostBuffer (const uint8_t *source, Range source_range, size_t offset) override
 
bool SetLabel (const std::string &label) override
 
bool SetLabel (const std::string &label, Range range) override
 

Additional Inherited Members

- Static Public Member Functions inherited from impeller::DeviceBuffer
static BufferView AsBufferView (std::shared_ptr< DeviceBuffer > buffer)
 Create a buffer view of this entire buffer.
 
- Static Public Member Functions inherited from impeller::BackendCast< DeviceBufferGLES, DeviceBuffer >
static DeviceBufferGLESCast (DeviceBuffer &base)
 
static const DeviceBufferGLESCast (const DeviceBuffer &base)
 
static DeviceBufferGLESCast (DeviceBuffer *base)
 
static const DeviceBufferGLESCast (const DeviceBuffer *base)
 
- Protected Member Functions inherited from impeller::DeviceBuffer
 DeviceBuffer (DeviceBufferDescriptor desc)
 
- Protected Attributes inherited from impeller::DeviceBuffer
const DeviceBufferDescriptor desc_
 

Detailed Description

Definition at line 18 of file device_buffer_gles.h.

Member Enumeration Documentation

◆ BindingType

Enumerator
kArrayBuffer 
kElementArrayBuffer 

Definition at line 34 of file device_buffer_gles.h.

Constructor & Destructor Documentation

◆ DeviceBufferGLES()

impeller::DeviceBufferGLES::DeviceBufferGLES ( DeviceBufferDescriptor  desc,
ReactorGLES::Ref  reactor,
std::shared_ptr< Allocation backing_store 
)

Definition at line 17 of file device_buffer_gles.cc.

20 : DeviceBuffer(desc),
21 reactor_(std::move(reactor)),
22 handle_(reactor_ ? reactor_->CreateHandle(HandleType::kBuffer)
23 : HandleGLES::DeadHandle()),
24 backing_store_(std::move(backing_store)) {}
DeviceBuffer(DeviceBufferDescriptor desc)
Definition ref_ptr.h:256

◆ ~DeviceBufferGLES()

impeller::DeviceBufferGLES::~DeviceBufferGLES ( )
override

Definition at line 27 of file device_buffer_gles.cc.

27 {
28 if (!handle_.IsDead()) {
29 reactor_->CollectHandle(handle_);
30 }
31}
constexpr bool IsDead() const
Definition handle_gles.h:43

Member Function Documentation

◆ BindAndUploadDataIfNecessary()

bool impeller::DeviceBufferGLES::BindAndUploadDataIfNecessary ( BindingType  type) const

Definition at line 74 of file device_buffer_gles.cc.

74 {
75 if (!reactor_) {
76 return false;
77 }
78
79 auto buffer = reactor_->GetGLHandle(handle_);
80 if (!buffer.has_value()) {
81 return false;
82 }
83
84 const auto target_type = ToTarget(type);
85 const auto& gl = reactor_->GetProcTable();
86
87 gl.BindBuffer(target_type, buffer.value());
88
89 if (upload_generation_ != generation_) {
90 TRACE_EVENT1("impeller", "BufferData", "Bytes",
91 std::to_string(backing_store_->GetLength()).c_str());
92 gl.BufferData(target_type, backing_store_->GetLength(),
93 backing_store_->GetBuffer(), GL_STATIC_DRAW);
94 upload_generation_ = generation_;
95 }
96
97 return true;
98}
static const uint8_t buffer[]
static GLenum ToTarget(DeviceBufferGLES::BindingType type)
#define TRACE_EVENT1(category_group, name, arg1_name, arg1_val)

◆ Flush()

void impeller::DeviceBufferGLES::Flush ( std::optional< Range range = std::nullopt) const
overridevirtual

Make any pending writes visible to the GPU.

This method must be called if the device pointer provided by [OnGetContents] is written to without using [CopyHostBuffer]. On Devices with coherent host memory, this method will not perform extra work.

If the range is not provided, the entire buffer is flushed.

Reimplemented from impeller::DeviceBuffer.

Definition at line 60 of file device_buffer_gles.cc.

60 {
61 generation_++;
62}

◆ GetBufferData()

const uint8_t * impeller::DeviceBufferGLES::GetBufferData ( ) const

Definition at line 113 of file device_buffer_gles.cc.

113 {
114 return backing_store_->GetBuffer();
115}

◆ OnCopyHostBuffer()

bool impeller::DeviceBufferGLES::OnCopyHostBuffer ( const uint8_t *  source,
Range  source_range,
size_t  offset 
)
overrideprivatevirtual

Implements impeller::DeviceBuffer.

Definition at line 42 of file device_buffer_gles.cc.

44 {
45 if (!reactor_) {
46 return false;
47 }
48
49 if (offset + source_range.length > backing_store_->GetLength()) {
50 return false;
51 }
52
53 std::memmove(backing_store_->GetBuffer() + offset,
54 source + source_range.offset, source_range.length);
55 ++generation_;
56
57 return true;
58}
SkBitmap source
Definition examples.cpp:28
Point offset

◆ OnGetContents()

uint8_t * impeller::DeviceBufferGLES::OnGetContents ( ) const
overrideprivatevirtual

Implements impeller::DeviceBuffer.

Definition at line 34 of file device_buffer_gles.cc.

34 {
35 if (!reactor_) {
36 return nullptr;
37 }
38 return backing_store_->GetBuffer();
39}

◆ SetLabel() [1/2]

bool impeller::DeviceBufferGLES::SetLabel ( const std::string &  label)
overrideprivatevirtual

Implements impeller::DeviceBuffer.

Definition at line 101 of file device_buffer_gles.cc.

101 {
102 reactor_->SetDebugLabel(handle_, label);
103 return true;
104}

◆ SetLabel() [2/2]

bool impeller::DeviceBufferGLES::SetLabel ( const std::string &  label,
Range  range 
)
overrideprivatevirtual

Implements impeller::DeviceBuffer.

Definition at line 107 of file device_buffer_gles.cc.

107 {
108 // Cannot support debug label on the range. Set the label for the entire
109 // range.
110 return SetLabel(label);
111}
bool SetLabel(const std::string &label) override

◆ UpdateBufferData()

void impeller::DeviceBufferGLES::UpdateBufferData ( const std::function< void(uint8_t *, size_t length)> &  update_buffer_data)

Definition at line 117 of file device_buffer_gles.cc.

119 {
120 if (update_buffer_data) {
121 update_buffer_data(backing_store_->GetBuffer(),
122 backing_store_->GetLength());
123 ++generation_;
124 }
125}

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