10 #include "flutter/fml/trace_event.h"
19 std::shared_ptr<Allocation> backing_store)
21 reactor_(
std::move(reactor)),
24 backing_store_(
std::move(backing_store)) {}
29 reactor_->CollectHandle(handle_);
34 uint8_t* DeviceBufferGLES::OnGetContents()
const {
38 return backing_store_->GetBuffer();
42 bool DeviceBufferGLES::OnCopyHostBuffer(
const uint8_t* source,
49 if (offset + source_range.length > backing_store_->GetLength()) {
53 std::memmove(backing_store_->GetBuffer() + offset,
54 source + source_range.offset, source_range.length);
63 return GL_ARRAY_BUFFER;
65 return GL_ELEMENT_ARRAY_BUFFER;
75 auto buffer = reactor_->GetGLHandle(handle_);
76 if (!buffer.has_value()) {
80 const auto target_type =
ToTarget(type);
81 const auto& gl = reactor_->GetProcTable();
83 gl.BindBuffer(target_type, buffer.value());
85 if (upload_generation_ != generation_) {
86 TRACE_EVENT1(
"impeller",
"BufferData",
"Bytes",
87 std::to_string(backing_store_->GetLength()).c_str());
88 gl.BufferData(target_type, backing_store_->GetLength(),
89 backing_store_->GetBuffer(), GL_STATIC_DRAW);
90 upload_generation_ = generation_;
97 bool DeviceBufferGLES::SetLabel(
const std::string& label) {
98 reactor_->SetDebugLabel(handle_, label);
103 bool DeviceBufferGLES::SetLabel(
const std::string& label, Range range) {
106 return SetLabel(label);
110 return backing_store_->GetBuffer();
114 const std::function<
void(uint8_t* data,
size_t length)>&
115 update_buffer_data) {
116 if (update_buffer_data) {
117 update_buffer_data(backing_store_->GetBuffer(),
118 backing_store_->GetLength());