7 #include <initializer_list>
11 #include "flutter/fml/macros.h"
22 template <
class VertexType_,
class IndexType_ = u
int16_t>
33 if (indices_.size() == 0) {
45 void SetLabel(std::string label) { label_ = std::move(label); }
47 void Reserve(
size_t count) {
return vertices_.reserve(count); }
56 return indices_.size() > 0 ? indices_.size() : vertices_.size();
60 vertices_.emplace_back(std::move(vertex));
65 std::initializer_list<VertexType_> vertices) {
66 vertices_.reserve(vertices.size());
67 for (
auto& vertex : vertices) {
68 vertices_.emplace_back(std::move(vertex));
74 indices_.emplace_back(index);
81 buffer.
index_buffer = CreateIndexBufferView(host_buffer);
90 buffer.
vertex_buffer = CreateVertexBufferView(device_allocator);
91 buffer.
index_buffer = CreateIndexBufferView(device_allocator);
98 for (
auto& vertex : vertices_) {
104 std::vector<VertexType> vertices_;
105 std::vector<IndexType> indices_;
109 return buffer.
Emplace(vertices_.data(),
114 BufferView CreateVertexBufferView(Allocator& allocator)
const {
115 auto buffer = allocator.CreateBufferWithCopy(
116 reinterpret_cast<const uint8_t*
>(vertices_.data()),
121 if (!label_.empty()) {
124 return buffer->AsBufferView();
127 std::vector<IndexType> CreateIndexBuffer()
const {
return indices_; }
129 BufferView CreateIndexBufferView(HostBuffer& buffer)
const {
130 const auto index_buffer = CreateIndexBuffer();
131 if (index_buffer.size() == 0) {
134 return buffer.Emplace(index_buffer.data(),
139 BufferView CreateIndexBufferView(Allocator& allocator)
const {
140 const auto index_buffer = CreateIndexBuffer();
141 if (index_buffer.size() == 0) {
144 auto buffer = allocator.CreateBufferWithCopy(
145 reinterpret_cast<const uint8_t*
>(index_buffer.data()),
146 index_buffer.size() *
sizeof(
IndexType));
150 if (!label_.empty()) {
151 buffer->SetLabel(
SPrintF(
"%s Indices", label_.c_str()));
153 return buffer->AsBufferView();