| Flutter Impeller |

Public Types | Public Member Functions | List of all members
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 VertexType & | Last () const
VertexBufferBuilder & | AppendVertex (VertexType_ vertex)
VertexBufferBuilder & | AddVertices (std::initializer_list< VertexType_ > vertices)
VertexBufferBuilder & | AppendIndex (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 24 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 27 of file vertex_buffer_builder.h.

## ◆ VertexType

template<class VertexType_ , class IndexType_ = uint16_t>

using impeller::VertexBufferBuilder< VertexType_, IndexType_ >::VertexType = VertexType_

Definition at line 26 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 70 of file vertex_buffer_builder.h.

71 {
72 vertices_.reserve(vertices.size());
73 for (auto& vertex : vertices) {
74 vertices_.emplace_back(std::move(vertex));
75 }
76 return *this;
77 }

Referenced by impeller::AdvancedBlend(), impeller::scene::CuboidGeometry::GetVertexBuffer(), impeller::PipelineBlend(), impeller::CheckerboardContents::Render(), impeller::ClipContents::Render(), impeller::SolidRRectBlurContents::Render(), impeller::TextureContents::Render(), impeller::ClipRestoreContents::Render(), 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 79 of file vertex_buffer_builder.h.

79 {
80 indices_.emplace_back(index);
81 return *this;
82 }

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 65 of file vertex_buffer_builder.h.

65 {
66 vertices_.emplace_back(std::move(vertex));
67 return *this;
68 }

Referenced by impeller::ComputeUVGeometryCPU(), impeller::AtlasContents::Render(), impeller::AtlasTextureContents::Render(), impeller::AtlasColorContents::Render(), and impeller::testing::TEST_P().

## ◆ CreateVertexBuffer() [1/2]

template<class VertexType_ , class IndexType_ = uint16_t>

VertexBuffer impeller::VertexBufferBuilder< VertexType_, IndexType_ >::CreateVertexBuffer | ( | Allocator & | device_allocator | ) | const
| inline

Definition at line 93 of file vertex_buffer_builder.h.

93 {
94 VertexBuffer buffer;
95 // This can be merged into a single allocation.
96 buffer.vertex_buffer = CreateVertexBufferView(device_allocator);
97 buffer.index_buffer = CreateIndexBufferView(device_allocator);
98 buffer.vertex_count = GetIndexCount();
99 buffer.index_type = GetIndexType();
100 return buffer;
101 };

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 84 of file vertex_buffer_builder.h.

84 {
85 VertexBuffer buffer;
86 buffer.vertex_buffer = CreateVertexBufferView(host_buffer);
87 buffer.index_buffer = CreateIndexBufferView(host_buffer);
88 buffer.vertex_count = GetIndexCount();
89 buffer.index_type = GetIndexType();
90 return buffer;
91 };

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::AdvancedBlend(), impeller::scene::CuboidGeometry::GetVertexBuffer(), impeller::PipelineBlend(), impeller::CheckerboardContents::Render(), impeller::SolidRRectBlurContents::Render(), impeller::TextureContents::Render(), impeller::AtlasContents::Render(), impeller::ClipRestoreContents::Render(), impeller::AtlasTextureContents::Render(), impeller::AtlasColorContents::Render(), 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 56 of file vertex_buffer_builder.h.

56 {
57 return indices_.size() > 0 ? indices_.size() : vertices_.size();
58 }

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
| inline constexpr

Definition at line 33 of file vertex_buffer_builder.h.

33 {
34 if (indices_.size() == 0) {
35 return impeller::IndexType::kNone;
36 }
37 if constexpr (sizeof(IndexType) == 2) {
38 return impeller::IndexType::k16bit;
39 }
40 if (sizeof(IndexType) == 4) {
41 return impeller::IndexType::k32bit;
42 }
43 return impeller::IndexType::kUnknown;
44 }

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 54 of file vertex_buffer_builder.h.

54 { return vertices_.size(); }

Referenced by impeller::ComputeUVGeometryCPU(), and impeller::testing::TEST_P().

## ◆ HasVertices()

template<class VertexType_ , class IndexType_ = uint16_t>

bool impeller::VertexBufferBuilder< VertexType_, IndexType_ >::HasVertices | ( |  | ) | const
| inline

Definition at line 52 of file vertex_buffer_builder.h.

52 { return !vertices_.empty(); }

Referenced by impeller::AtlasTextureContents::Render(), and impeller::AtlasColorContents::Render().

## ◆ IterateVertices()

template<class VertexType_ , class IndexType_ = uint16_t>

void impeller::VertexBufferBuilder< VertexType_, IndexType_ >::IterateVertices | ( | const std::function< void(VertexType &)> & | iterator | ) |
| inline

Definition at line 103 of file vertex_buffer_builder.h.

103 {
104 for (auto& vertex : vertices_) {
105 iterator(vertex);
106 }
107 }

Referenced by impeller::ComputeUVGeometryCPU().

## ◆ Last()

template<class VertexType_ , class IndexType_ = uint16_t>

const VertexType& impeller::VertexBufferBuilder< VertexType_, IndexType_ >::Last | ( |  | ) | const
| inline

Definition at line 60 of file vertex_buffer_builder.h.

60 {
61 FML_DCHECK(!vertices_.empty());
62 return vertices_.back();
63 }

## ◆ Reserve()

template<class VertexType_ , class IndexType_ = uint16_t>

void impeller::VertexBufferBuilder< VertexType_, IndexType_ >::Reserve | ( | size_t | count | ) |
| inline

Definition at line 48 of file vertex_buffer_builder.h.

48 { return vertices_.reserve(count); }

Referenced by impeller::ComputeUVGeometryCPU(), impeller::AtlasContents::Render(), impeller::AtlasTextureContents::Render(), and impeller::AtlasColorContents::Render().

## ◆ ReserveIndices()

template<class VertexType_ , class IndexType_ = uint16_t>

void impeller::VertexBufferBuilder< VertexType_, IndexType_ >::ReserveIndices | ( | size_t | count | ) |
| inline

Definition at line 50 of file vertex_buffer_builder.h.

50 { 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 46 of file vertex_buffer_builder.h.

46 { label_ = label; }

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

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

- impeller/renderer/vertex_buffer_builder.h

impeller::IndexType::k16bit
@ k16bit
impeller::IndexType::k32bit
@ k32bit
impeller::VertexBufferBuilder::GetIndexCount
size_t GetIndexCount() const
Definition: vertex_buffer_builder.h:56
impeller::IndexType::kNone
@ kNone
Does not use the index buffer.
impeller::VertexBufferBuilder::IndexType
IndexType_ IndexType
Definition: vertex_buffer_builder.h:27
impeller::VertexBufferBuilder::GetIndexType
constexpr impeller::IndexType GetIndexType() const
Definition: vertex_buffer_builder.h:33
impeller::IndexType::kUnknown
@ kUnknown