5 #ifndef FLUTTER_IMPELLER_RENDERER_VERTEX_BUFFER_BUILDER_H_
6 #define FLUTTER_IMPELLER_RENDERER_VERTEX_BUFFER_BUILDER_H_
8 #include <initializer_list>
12 #include "flutter/fml/macros.h"
23 template <
class VertexType_,
class IndexType_ = u
int16_t>
34 if (indices_.size() == 0) {
46 void SetLabel(
const std::string& label) { label_ = label; }
48 void Reserve(
size_t count) {
return vertices_.reserve(count); }
57 return indices_.size() > 0 ? indices_.size() : vertices_.size();
61 FML_DCHECK(!vertices_.empty());
62 return vertices_.back();
66 vertices_.emplace_back(std::move(vertex));
71 std::initializer_list<VertexType_> vertices) {
72 vertices_.reserve(vertices.size());
73 for (
auto& vertex : vertices) {
74 vertices_.emplace_back(std::move(vertex));
80 indices_.emplace_back(index);
87 buffer.
index_buffer = CreateIndexBufferView(host_buffer);
96 buffer.
vertex_buffer = CreateVertexBufferView(device_allocator);
97 buffer.
index_buffer = CreateIndexBufferView(device_allocator);
104 for (
auto& vertex : vertices_) {
110 std::vector<VertexType> vertices_;
111 std::vector<IndexType> indices_;
115 return buffer.
Emplace(vertices_.data(),
120 BufferView CreateVertexBufferView(Allocator& allocator)
const {
121 auto buffer = allocator.CreateBufferWithCopy(
122 reinterpret_cast<const uint8_t*
>(vertices_.data()),
127 if (!label_.empty()) {
133 std::vector<IndexType> CreateIndexBuffer()
const {
return indices_; }
135 BufferView CreateIndexBufferView(HostBuffer& buffer)
const {
136 const auto index_buffer = CreateIndexBuffer();
137 if (index_buffer.size() == 0) {
140 return buffer.Emplace(index_buffer.data(),
145 BufferView CreateIndexBufferView(Allocator& allocator)
const {
146 const auto index_buffer = CreateIndexBuffer();
147 if (index_buffer.size() == 0) {
150 auto buffer = allocator.CreateBufferWithCopy(
151 reinterpret_cast<const uint8_t*
>(index_buffer.data()),
152 index_buffer.size() *
sizeof(
IndexType));
156 if (!label_.empty()) {
157 buffer->SetLabel(
SPrintF(
"%s Indices", label_.c_str()));
165 #endif // FLUTTER_IMPELLER_RENDERER_VERTEX_BUFFER_BUILDER_H_