Flutter Impeller
impeller::VertexBufferBuilder< VertexType_, IndexType_ > Class Template Reference

#include <vertex_buffer_builder.h>

Public Types

using VertexType = VertexType_
 
using IndexType = IndexType_
 

Public Member Functions

 VertexBufferBuilder ()=default
 
 ~VertexBufferBuilder ()=default
 
constexpr impeller::IndexType GetIndexType () const
 
void SetLabel (const std::string &label)
 
void Reserve (size_t count)
 
void ReserveIndices (size_t count)
 
bool HasVertices () const
 
size_t GetVertexCount () const
 
size_t GetIndexCount () const
 
const VertexTypeLast () const
 
VertexBufferBuilderAppendVertex (VertexType_ vertex)
 
VertexBufferBuilderAddVertices (std::initializer_list< VertexType_ > vertices)
 
VertexBufferBuilderAppendIndex (IndexType_ index)
 
VertexBuffer CreateVertexBuffer (HostBuffer &host_buffer) const
 
VertexBuffer CreateVertexBuffer (Allocator &device_allocator) const
 
void IterateVertices (const std::function< void(VertexType &)> &iterator)
 

Detailed Description

template<class VertexType_, class IndexType_ = uint16_t>
class impeller::VertexBufferBuilder< VertexType_, IndexType_ >

Definition at line 36 of file vertex_buffer_builder.h.

Member Typedef Documentation

◆ IndexType

template<class VertexType_ , class IndexType_ = uint16_t>
using impeller::VertexBufferBuilder< VertexType_, IndexType_ >::IndexType = IndexType_

Definition at line 39 of file vertex_buffer_builder.h.

◆ VertexType

template<class VertexType_ , class IndexType_ = uint16_t>
using impeller::VertexBufferBuilder< VertexType_, IndexType_ >::VertexType = VertexType_

Definition at line 38 of file vertex_buffer_builder.h.

Constructor & Destructor Documentation

◆ VertexBufferBuilder()

template<class VertexType_ , class IndexType_ = uint16_t>
impeller::VertexBufferBuilder< VertexType_, IndexType_ >::VertexBufferBuilder ( )
default

◆ ~VertexBufferBuilder()

template<class VertexType_ , class IndexType_ = uint16_t>
impeller::VertexBufferBuilder< VertexType_, IndexType_ >::~VertexBufferBuilder ( )
default

Member Function Documentation

◆ AddVertices()

template<class VertexType_ , class IndexType_ = uint16_t>
VertexBufferBuilder& impeller::VertexBufferBuilder< VertexType_, IndexType_ >::AddVertices ( std::initializer_list< VertexType_ >  vertices)
inline

Definition at line 82 of file vertex_buffer_builder.h.

83  {
84  vertices_.reserve(vertices.size());
85  for (auto& vertex : vertices) {
86  vertices_.emplace_back(std::move(vertex));
87  }
88  return *this;
89  }

Referenced by impeller::testing::RendererDartTest::RenderDartToPlayground(), and impeller::testing::TEST_P().

◆ AppendIndex()

template<class VertexType_ , class IndexType_ = uint16_t>
VertexBufferBuilder& impeller::VertexBufferBuilder< VertexType_, IndexType_ >::AppendIndex ( IndexType_  index)
inline

Definition at line 91 of file vertex_buffer_builder.h.

91  {
92  indices_.emplace_back(index);
93  return *this;
94  }

Referenced by impeller::testing::TEST_P().

◆ AppendVertex()

template<class VertexType_ , class IndexType_ = uint16_t>
VertexBufferBuilder& impeller::VertexBufferBuilder< VertexType_, IndexType_ >::AppendVertex ( VertexType_  vertex)
inline

Definition at line 77 of file vertex_buffer_builder.h.

77  {
78  vertices_.emplace_back(std::move(vertex));
79  return *this;
80  }

◆ CreateVertexBuffer() [1/2]

template<class VertexType_ , class IndexType_ = uint16_t>
VertexBuffer impeller::VertexBufferBuilder< VertexType_, IndexType_ >::CreateVertexBuffer ( Allocator device_allocator) const
inline

Definition at line 105 of file vertex_buffer_builder.h.

105  {
106  VertexBuffer buffer;
107  // This can be merged into a single allocation.
108  buffer.vertex_buffer = CreateVertexBufferView(device_allocator);
109  buffer.index_buffer = CreateIndexBufferView(device_allocator);
110  buffer.vertex_count = GetIndexCount();
111  buffer.index_type = GetIndexType();
112  return buffer;
113  };

References impeller::VertexBufferBuilder< VertexType_, IndexType_ >::GetIndexCount(), impeller::VertexBufferBuilder< VertexType_, IndexType_ >::GetIndexType(), impeller::VertexBuffer::index_buffer, impeller::VertexBuffer::index_type, impeller::VertexBuffer::vertex_buffer, and impeller::VertexBuffer::vertex_count.

◆ CreateVertexBuffer() [2/2]

template<class VertexType_ , class IndexType_ = uint16_t>
VertexBuffer impeller::VertexBufferBuilder< VertexType_, IndexType_ >::CreateVertexBuffer ( HostBuffer host_buffer) const
inline

Definition at line 96 of file vertex_buffer_builder.h.

96  {
97  VertexBuffer buffer;
98  buffer.vertex_buffer = CreateVertexBufferView(host_buffer);
99  buffer.index_buffer = CreateIndexBufferView(host_buffer);
100  buffer.vertex_count = GetIndexCount();
101  buffer.index_type = GetIndexType();
102  return buffer;
103  };

References impeller::VertexBufferBuilder< VertexType_, IndexType_ >::GetIndexCount(), impeller::VertexBufferBuilder< VertexType_, IndexType_ >::GetIndexType(), impeller::VertexBuffer::index_buffer, impeller::VertexBuffer::index_type, impeller::VertexBuffer::vertex_buffer, and impeller::VertexBuffer::vertex_count.

Referenced by impeller::testing::RendererDartTest::RenderDartToPlayground(), and impeller::testing::TEST_P().

◆ GetIndexCount()

template<class VertexType_ , class IndexType_ = uint16_t>
size_t impeller::VertexBufferBuilder< VertexType_, IndexType_ >::GetIndexCount ( ) const
inline

Definition at line 68 of file vertex_buffer_builder.h.

68  {
69  return indices_.size() > 0 ? indices_.size() : vertices_.size();
70  }

Referenced by impeller::VertexBufferBuilder< VertexType_, IndexType_ >::CreateVertexBuffer(), and impeller::testing::TEST_P().

◆ GetIndexType()

template<class VertexType_ , class IndexType_ = uint16_t>
constexpr impeller::IndexType impeller::VertexBufferBuilder< VertexType_, IndexType_ >::GetIndexType ( ) const
inlineconstexpr

Definition at line 45 of file vertex_buffer_builder.h.

45  {
46  if (indices_.size() == 0) {
48  }
49  if constexpr (sizeof(IndexType) == 2) {
51  }
52  if (sizeof(IndexType) == 4) {
54  }
56  }

References impeller::k16bit, impeller::k32bit, impeller::kNone, and impeller::kUnknown.

Referenced by impeller::VertexBufferBuilder< VertexType_, IndexType_ >::CreateVertexBuffer(), and impeller::testing::TEST_P().

◆ GetVertexCount()

template<class VertexType_ , class IndexType_ = uint16_t>
size_t impeller::VertexBufferBuilder< VertexType_, IndexType_ >::GetVertexCount ( ) const
inline

Definition at line 66 of file vertex_buffer_builder.h.

66 { return vertices_.size(); }

Referenced by impeller::testing::TEST_P().

◆ HasVertices()

template<class VertexType_ , class IndexType_ = uint16_t>
bool impeller::VertexBufferBuilder< VertexType_, IndexType_ >::HasVertices ( ) const
inline

Definition at line 64 of file vertex_buffer_builder.h.

64 { return !vertices_.empty(); }

◆ IterateVertices()

template<class VertexType_ , class IndexType_ = uint16_t>
void impeller::VertexBufferBuilder< VertexType_, IndexType_ >::IterateVertices ( const std::function< void(VertexType &)> &  iterator)
inline

Definition at line 115 of file vertex_buffer_builder.h.

115  {
116  for (auto& vertex : vertices_) {
117  iterator(vertex);
118  }
119  }

◆ Last()

template<class VertexType_ , class IndexType_ = uint16_t>
const VertexType& impeller::VertexBufferBuilder< VertexType_, IndexType_ >::Last ( ) const
inline

Definition at line 72 of file vertex_buffer_builder.h.

72  {
73  FML_DCHECK(!vertices_.empty());
74  return vertices_.back();
75  }

◆ Reserve()

template<class VertexType_ , class IndexType_ = uint16_t>
void impeller::VertexBufferBuilder< VertexType_, IndexType_ >::Reserve ( size_t  count)
inline

Definition at line 60 of file vertex_buffer_builder.h.

60 { return vertices_.reserve(count); }

◆ ReserveIndices()

template<class VertexType_ , class IndexType_ = uint16_t>
void impeller::VertexBufferBuilder< VertexType_, IndexType_ >::ReserveIndices ( size_t  count)
inline

Definition at line 62 of file vertex_buffer_builder.h.

62 { return indices_.reserve(count); }

◆ SetLabel()

template<class VertexType_ , class IndexType_ = uint16_t>
void impeller::VertexBufferBuilder< VertexType_, IndexType_ >::SetLabel ( const std::string &  label)
inline

Definition at line 58 of file vertex_buffer_builder.h.

58 { label_ = label; }

Referenced by impeller::testing::TEST_P().


The documentation for this class was generated from the following file:
impeller::IndexType::k16bit
@ k16bit
impeller::IndexType::k32bit
@ k32bit
impeller::VertexBufferBuilder::GetIndexCount
size_t GetIndexCount() const
Definition: vertex_buffer_builder.h:68
impeller::IndexType::kNone
@ kNone
Does not use the index buffer.
impeller::VertexBufferBuilder::IndexType
IndexType_ IndexType
Definition: vertex_buffer_builder.h:39
impeller::VertexBufferBuilder::GetIndexType
constexpr impeller::IndexType GetIndexType() const
Definition: vertex_buffer_builder.h:45
impeller::IndexType::kUnknown
@ kUnknown