Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
impeller::DlVerticesGeometry Class Referencefinal

A geometry that is created from a DlVertices object. More...

#include <dl_vertices_geometry.h>

Inheritance diagram for impeller::DlVerticesGeometry:
impeller::VerticesGeometry impeller::Geometry

Public Member Functions

 DlVerticesGeometry (const std::shared_ptr< const flutter::DlVertices > &vertices, const ContentContext &renderer)
 
 ~DlVerticesGeometry ()=default
 
GeometryResult GetPositionUVColorBuffer (Rect texture_coverage, Matrix effect_transform, const ContentContext &renderer, const Entity &entity, RenderPass &pass) const override
 
GeometryResult GetPositionBuffer (const ContentContext &renderer, const Entity &entity, RenderPass &pass) const override
 
std::optional< RectGetCoverage (const Matrix &transform) const override
 The coverage rectangle of this geometry, transformed by the transform argument.
 
bool HasVertexColors () const override
 
bool HasTextureCoordinates () const override
 
bool CanApplyMaskFilter () const override
 
std::optional< RectGetTextureCoordinateCoverage () const override
 
- Public Member Functions inherited from impeller::Geometry
virtual ~Geometry ()
 
virtual GeometryResult::Mode GetResultMode () const
 
virtual bool CoversArea (const Matrix &transform, const IRect &rect) const
 Determines if this geometry, transformed by the given transform, will completely cover all of the pixels within the given integer rect.
 
virtual bool IsAxisAlignedRect () const
 
virtual Scalar ComputeAlphaCoverage (const Matrix &transform) const
 

Additional Inherited Members

- Static Public Member Functions inherited from impeller::Geometry
static std::unique_ptr< GeometryMakeFillPath (const flutter::DlPath &path, std::optional< Rect > inner_rect=std::nullopt)
 
static std::unique_ptr< GeometryMakeStrokePath (const flutter::DlPath &path, const StrokeParameters &stroke={})
 
static std::unique_ptr< GeometryMakeCover ()
 
static std::unique_ptr< GeometryMakeRect (const Rect &rect)
 
static std::unique_ptr< GeometryMakeOval (const Rect &rect)
 
static std::unique_ptr< GeometryMakeLine (const Point &p0, const Point &p1, const StrokeParameters &stroke)
 
static std::unique_ptr< GeometryMakeCircle (const Point &center, Scalar radius)
 
static std::unique_ptr< GeometryMakeStrokedCircle (const Point &center, Scalar radius, Scalar stroke_width)
 
static std::unique_ptr< GeometryMakeFilledArc (const Rect &oval_bounds, Degrees start, Degrees sweep, bool include_center)
 
static std::unique_ptr< GeometryMakeStrokedArc (const Rect &oval_bounds, Degrees start, Degrees sweep, const StrokeParameters &stroke)
 
static std::unique_ptr< GeometryMakeRoundRect (const Rect &rect, const Size &radii)
 
static std::unique_ptr< GeometryMakeRoundSuperellipse (const Rect &rect, Scalar corner_radius)
 
static Scalar ComputeStrokeAlphaCoverage (const Matrix &entity, Scalar stroke_width)
 Compute an alpha value to simulate lower coverage of fractional pixel strokes.
 
static GeometryResult ComputePositionGeometry (const ContentContext &renderer, const Tessellator::VertexGenerator &generator, const Entity &entity, RenderPass &pass)
 

Detailed Description

A geometry that is created from a DlVertices object.

Definition at line 15 of file dl_vertices_geometry.h.

Constructor & Destructor Documentation

◆ DlVerticesGeometry()

impeller::DlVerticesGeometry::DlVerticesGeometry ( const std::shared_ptr< const flutter::DlVertices > &  vertices,
const ContentContext renderer 
)

Definition at line 60 of file dl_vertices_geometry.cc.

63 : vertices_(vertices) {
64 performed_normalization_ = MaybePerformIndexNormalization(renderer);
65 bounds_ = vertices_->GetBounds();
66}

◆ ~DlVerticesGeometry()

impeller::DlVerticesGeometry::~DlVerticesGeometry ( )
default

Member Function Documentation

◆ CanApplyMaskFilter()

bool impeller::DlVerticesGeometry::CanApplyMaskFilter ( ) const
overridevirtual

Reimplemented from impeller::Geometry.

Definition at line 224 of file dl_vertices_geometry.cc.

224 {
225 return false;
226}

◆ GetCoverage()

std::optional< Rect > impeller::DlVerticesGeometry::GetCoverage ( const Matrix transform) const
overridevirtual

The coverage rectangle of this geometry, transformed by the transform argument.

Implements impeller::Geometry.

Definition at line 208 of file dl_vertices_geometry.cc.

209 {
210 return bounds_.TransformBounds(transform);
211}
constexpr TRect TransformBounds(const Matrix &transform) const
Creates a new bounding box that contains this transformed rectangle.
Definition rect.h:506

References transform, and impeller::TRect< T >::TransformBounds().

◆ GetPositionBuffer()

GeometryResult impeller::DlVerticesGeometry::GetPositionBuffer ( const ContentContext renderer,
const Entity entity,
RenderPass pass 
) const
overridevirtual

Implements impeller::Geometry.

Definition at line 115 of file dl_vertices_geometry.cc.

118 {
119 int vertex_count = vertices_->vertex_count();
120 BufferView vertex_buffer = renderer.GetTransientsDataBuffer().Emplace(
121 vertices_->vertex_data(), vertex_count * sizeof(Point), alignof(Point));
122
123 BufferView index_buffer = {};
124 auto index_count =
125 performed_normalization_ ? indices_.size() : vertices_->index_count();
126 const uint16_t* indices_data =
127 performed_normalization_ ? indices_.data() : vertices_->indices();
128 if (index_count) {
129 index_buffer = renderer.GetTransientsIndexesBuffer().Emplace(
130 indices_data, index_count * sizeof(uint16_t), alignof(uint16_t));
131 }
132
133 return GeometryResult{
134 .type = GetPrimitiveType(),
135 .vertex_buffer =
136 {
137 .vertex_buffer = vertex_buffer,
138 .index_buffer = index_buffer,
139 .vertex_count = index_count > 0 ? index_count : vertex_count,
140 .index_type =
141 index_count > 0 ? IndexType::k16bit : IndexType::kNone,
142 },
143 .transform = entity.GetShaderTransform(pass),
144 };
145}
@ kNone
Does not use the index buffer.
TPoint< Scalar > Point
Definition point.h:426

References impeller::HostBuffer::Emplace(), impeller::Entity::GetShaderTransform(), impeller::ContentContext::GetTransientsDataBuffer(), impeller::ContentContext::GetTransientsIndexesBuffer(), impeller::k16bit, impeller::kNone, and impeller::GeometryResult::type.

◆ GetPositionUVColorBuffer()

GeometryResult impeller::DlVerticesGeometry::GetPositionUVColorBuffer ( Rect  texture_coverage,
Matrix  effect_transform,
const ContentContext renderer,
const Entity entity,
RenderPass pass 
) const
overridevirtual

Implements impeller::VerticesGeometry.

Definition at line 147 of file dl_vertices_geometry.cc.

152 {
153 using VS = PorterDuffBlendPipeline::VertexShader;
154
155 int vertex_count = vertices_->vertex_count();
156 Matrix uv_transform =
157 texture_coverage.GetNormalizingTransform() * effect_transform;
158 bool has_texture_coordinates = HasTextureCoordinates();
159 bool has_colors = HasVertexColors();
160
161 const Point* coordinates = has_texture_coordinates
162 ? vertices_->texture_coordinate_data()
163 : vertices_->vertex_data();
164 BufferView vertex_buffer = renderer.GetTransientsDataBuffer().Emplace(
165 vertex_count * sizeof(VS::PerVertexData), alignof(VS::PerVertexData),
166 [&](uint8_t* data) {
167 VS::PerVertexData* vtx_contents =
168 reinterpret_cast<VS::PerVertexData*>(data);
169 const Point* vertex_points = vertices_->vertex_data();
170 for (auto i = 0; i < vertex_count; i++) {
171 Point texture_coord = coordinates[i];
172 Point uv = uv_transform * texture_coord;
173 Color color = has_colors
174 ? skia_conversions::ToColor(vertices_->colors()[i])
175 .Premultiply()
177 VS::PerVertexData vertex_data = {.vertices = vertex_points[i],
178 .texture_coords = uv,
179 .color = color};
180 vtx_contents[i] = vertex_data;
181 }
182 });
183
184 BufferView index_buffer = {};
185 auto index_count =
186 performed_normalization_ ? indices_.size() : vertices_->index_count();
187 const uint16_t* indices_data =
188 performed_normalization_ ? indices_.data() : vertices_->indices();
189 if (index_count) {
190 index_buffer = renderer.GetTransientsIndexesBuffer().Emplace(
191 indices_data, index_count * sizeof(uint16_t), alignof(uint16_t));
192 }
193
194 return GeometryResult{
195 .type = GetPrimitiveType(),
196 .vertex_buffer =
197 {
198 .vertex_buffer = vertex_buffer,
199 .index_buffer = index_buffer,
200 .vertex_count = index_count > 0 ? index_count : vertex_count,
201 .index_type =
202 index_count > 0 ? IndexType::k16bit : IndexType::kNone,
203 },
204 .transform = entity.GetShaderTransform(pass),
205 };
206}
bool HasTextureCoordinates() const override
bool HasVertexColors() const override
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot data
Definition switch_defs.h:36
Color ToColor(const flutter::DlColor &color)
LinePipeline::VertexShader VS
static constexpr Color BlackTransparent()
Definition color.h:275
constexpr Color Premultiply() const
Definition color.h:212

References impeller::Color::BlackTransparent(), impeller::HostBuffer::Emplace(), impeller::TRect< T >::GetNormalizingTransform(), impeller::Entity::GetShaderTransform(), impeller::ContentContext::GetTransientsDataBuffer(), impeller::ContentContext::GetTransientsIndexesBuffer(), HasTextureCoordinates(), HasVertexColors(), i, impeller::k16bit, impeller::kNone, impeller::Color::Premultiply(), impeller::skia_conversions::ToColor(), and impeller::GeometryResult::type.

◆ GetTextureCoordinateCoverage()

std::optional< Rect > impeller::DlVerticesGeometry::GetTextureCoordinateCoverage ( ) const
overridevirtual

Implements impeller::VerticesGeometry.

Definition at line 91 of file dl_vertices_geometry.cc.

91 {
92 if (!HasTextureCoordinates()) {
93 return std::nullopt;
94 }
95 auto vertex_count = vertices_->vertex_count();
96 if (vertex_count == 0) {
97 return std::nullopt;
98 }
99
100 auto first = vertices_->texture_coordinate_data();
101 auto left = first->x;
102 auto top = first->y;
103 auto right = first->x;
104 auto bottom = first->y;
105 int i = 1;
106 for (auto it = first + 1; i < vertex_count; ++it, i++) {
107 left = std::min(left, it->x);
108 top = std::min(top, it->y);
109 right = std::max(right, it->x);
110 bottom = std::max(bottom, it->y);
111 }
112 return Rect::MakeLTRB(left, top, right, bottom);
113}
static constexpr TRect MakeLTRB(Type left, Type top, Type right, Type bottom)
Definition rect.h:129

References HasTextureCoordinates(), i, and impeller::TRect< Scalar >::MakeLTRB().

◆ HasTextureCoordinates()

bool impeller::DlVerticesGeometry::HasTextureCoordinates ( ) const
overridevirtual

Implements impeller::VerticesGeometry.

Definition at line 87 of file dl_vertices_geometry.cc.

87 {
88 return vertices_->texture_coordinate_data() != nullptr;
89}

Referenced by GetPositionUVColorBuffer(), and GetTextureCoordinateCoverage().

◆ HasVertexColors()

bool impeller::DlVerticesGeometry::HasVertexColors ( ) const
overridevirtual

Implements impeller::VerticesGeometry.

Definition at line 83 of file dl_vertices_geometry.cc.

83 {
84 return vertices_->colors() != nullptr;
85}

Referenced by GetPositionUVColorBuffer().


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