Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
vertices_builder.h
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef FLUTTER_IMPELLER_SCENE_IMPORTER_VERTICES_BUILDER_H_
6#define FLUTTER_IMPELLER_SCENE_IMPORTER_VERTICES_BUILDER_H_
7
8#include <cstddef>
9#include <map>
10
11#include "flutter/fml/macros.h"
13#include "impeller/scene/importer/scene_flatbuffers.h"
14
15namespace impeller {
16namespace scene {
17namespace importer {
18
19//------------------------------------------------------------------------------
20/// VerticesBuilder
21///
22
24 public:
25 static std::unique_ptr<VerticesBuilder> MakeUnskinned();
26
27 static std::unique_ptr<VerticesBuilder> MakeSkinned();
28
29 enum class ComponentType {
30 kSignedByte = 5120,
36 kFloat,
37 };
38
39 enum class AttributeType {
41 kNormal,
44 kColor,
45 kJoints,
47 };
48
49 using ComponentConverter = std::function<
50 Scalar(const void* source, size_t byte_offset, bool normalized)>;
55
58 std::function<void(Scalar* destination,
59 const void* source,
60 const ComponentProperties& component_props,
61 const AttributeProperties& attribute_props)>;
68
70
72
73 virtual void WriteFBVertices(fb::MeshPrimitiveT& primitive) const = 0;
74
75 virtual void SetAttributeFromBuffer(AttributeType attribute,
76 ComponentType component_type,
77 const void* buffer_start,
78 size_t attribute_stride_bytes,
79 size_t attribute_count) = 0;
80
81 protected:
82 static void WriteAttribute(void* destination,
83 size_t destination_stride_bytes,
84 AttributeType attribute,
85 ComponentType component_type,
86 const void* source,
87 size_t attribute_stride_bytes,
88 size_t attribute_count);
89
90 private:
91 static std::map<VerticesBuilder::AttributeType,
93 kAttributeTypes;
94
95 VerticesBuilder(const VerticesBuilder&) = delete;
96
97 VerticesBuilder& operator=(const VerticesBuilder&) = delete;
98};
99
100//------------------------------------------------------------------------------
101/// UnskinnedVerticesBuilder
102///
103
105 public:
113
115
116 virtual ~UnskinnedVerticesBuilder() override;
117
118 // |VerticesBuilder|
119 void WriteFBVertices(fb::MeshPrimitiveT& primitive) const override;
120
121 // |VerticesBuilder|
123 ComponentType component_type,
124 const void* buffer_start,
125 size_t attribute_stride_bytes,
126 size_t attribute_count) override;
127
128 private:
129 std::vector<Vertex> vertices_;
130
132
133 UnskinnedVerticesBuilder& operator=(const UnskinnedVerticesBuilder&) = delete;
134};
135
136//------------------------------------------------------------------------------
137/// SkinnedVerticesBuilder
138///
139
141 public:
147
149
150 virtual ~SkinnedVerticesBuilder() override;
151
152 // |VerticesBuilder|
153 void WriteFBVertices(fb::MeshPrimitiveT& primitive) const override;
154
155 // |VerticesBuilder|
157 ComponentType component_type,
158 const void* buffer_start,
159 size_t attribute_stride_bytes,
160 size_t attribute_count) override;
161
162 private:
163 std::vector<Vertex> vertices_;
164
166
167 SkinnedVerticesBuilder& operator=(const SkinnedVerticesBuilder&) = delete;
168};
169
170} // namespace importer
171} // namespace scene
172} // namespace impeller
173
174#endif // FLUTTER_IMPELLER_SCENE_IMPORTER_VERTICES_BUILDER_H_
void WriteFBVertices(fb::MeshPrimitiveT &primitive) const override
void SetAttributeFromBuffer(AttributeType attribute, ComponentType component_type, const void *buffer_start, size_t attribute_stride_bytes, size_t attribute_count) override
void SetAttributeFromBuffer(AttributeType attribute, ComponentType component_type, const void *buffer_start, size_t attribute_stride_bytes, size_t attribute_count) override
void WriteFBVertices(fb::MeshPrimitiveT &primitive) const override
std::function< Scalar(const void *source, size_t byte_offset, bool normalized)> ComponentConverter
virtual void SetAttributeFromBuffer(AttributeType attribute, ComponentType component_type, const void *buffer_start, size_t attribute_stride_bytes, size_t attribute_count)=0
static std::unique_ptr< VerticesBuilder > MakeUnskinned()
static std::unique_ptr< VerticesBuilder > MakeSkinned()
static void WriteAttribute(void *destination, size_t destination_stride_bytes, AttributeType attribute, ComponentType component_type, const void *source, size_t attribute_stride_bytes, size_t attribute_count)
std::function< void(Scalar *destination, const void *source, const ComponentProperties &component_props, const AttributeProperties &attribute_props)> AttributeWriter
virtual void WriteFBVertices(fb::MeshPrimitiveT &primitive) const =0
SkBitmap source
Definition examples.cpp:28
float Scalar
Definition scalar.h:18
static constexpr Color White()
Definition color.h:256