Flutter Impeller
impeller::PointFieldGeometry Class Referencefinal

#include <point_field_geometry.h>

Inheritance diagram for impeller::PointFieldGeometry:
impeller::Geometry

Public Member Functions

 PointFieldGeometry (std::vector< Point > points, Scalar radius, bool round)
 
 ~PointFieldGeometry ()=default
 
- Public Member Functions inherited from impeller::Geometry
virtual bool CoversArea (const Matrix &transform, const Rect &rect) const
 Determines if this geometry, transformed by the given transform, will completely cover all surface area of the given rect. More...
 
virtual bool IsAxisAlignedRect () const
 

Static Public Member Functions

static size_t ComputeCircleDivisions (Scalar scaled_radius, bool round)
 Compute the number of vertices to divide each circle into. More...
 
static bool CanUseCompute (const ContentContext &renderer)
 If the platform can use compute safely. More...
 
- Static Public Member Functions inherited from impeller::Geometry
static std::shared_ptr< GeometryMakeFillPath (Path path, std::optional< Rect > inner_rect=std::nullopt)
 
static std::shared_ptr< GeometryMakeStrokePath (Path path, Scalar stroke_width=0.0, Scalar miter_limit=4.0, Cap stroke_cap=Cap::kButt, Join stroke_join=Join::kMiter)
 
static std::shared_ptr< GeometryMakeCover ()
 
static std::shared_ptr< GeometryMakeRect (const Rect &rect)
 
static std::shared_ptr< GeometryMakeOval (const Rect &rect)
 
static std::shared_ptr< GeometryMakeLine (const Point &p0, const Point &p1, Scalar width, Cap cap)
 
static std::shared_ptr< GeometryMakeCircle (const Point &center, Scalar radius)
 
static std::shared_ptr< GeometryMakeStrokedCircle (const Point &center, Scalar radius, Scalar stroke_width)
 
static std::shared_ptr< GeometryMakeRoundRect (const Rect &rect, const Size &radii)
 
static std::shared_ptr< GeometryMakePointField (std::vector< Point > points, Scalar radius, bool round)
 

Additional Inherited Members

- Static Protected Member Functions inherited from impeller::Geometry
static GeometryResult ComputePositionGeometry (const Tessellator::VertexGenerator &generator, const Entity &entity, RenderPass &pass)
 
static GeometryResult ComputePositionUVGeometry (const Tessellator::VertexGenerator &generator, const Matrix &uv_transform, const Entity &entity, RenderPass &pass)
 

Detailed Description

Definition at line 12 of file point_field_geometry.h.

Constructor & Destructor Documentation

◆ PointFieldGeometry()

impeller::PointFieldGeometry::PointFieldGeometry ( std::vector< Point points,
Scalar  radius,
bool  round 
)

Definition at line 12 of file point_field_geometry.cc.

15  : points_(std::move(points)), radius_(radius), round_(round) {}

◆ ~PointFieldGeometry()

impeller::PointFieldGeometry::~PointFieldGeometry ( )
default

Member Function Documentation

◆ CanUseCompute()

bool impeller::PointFieldGeometry::CanUseCompute ( const ContentContext renderer)
static

If the platform can use compute safely.

Definition at line 277 of file point_field_geometry.cc.

277  {
278  return renderer.GetDeviceCapabilities().SupportsCompute() &&
279  renderer.GetContext()->GetBackendType() ==
281 }

References impeller::ContentContext::GetContext(), impeller::ContentContext::GetDeviceCapabilities(), impeller::Context::kMetal, and impeller::Capabilities::SupportsCompute().

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

◆ ComputeCircleDivisions()

size_t impeller::PointFieldGeometry::ComputeCircleDivisions ( Scalar  scaled_radius,
bool  round 
)
static

Compute the number of vertices to divide each circle into.

Returns
the number of vertices.

Definition at line 247 of file point_field_geometry.cc.

248  {
249  if (!round) {
250  return 4;
251  }
252 
253  // Note: these values are approximated based on the values returned from
254  // the decomposition of 4 cubics performed by Path::CreatePolyline.
255  if (scaled_radius < 1.0) {
256  return 4;
257  }
258  if (scaled_radius < 2.0) {
259  return 8;
260  }
261  if (scaled_radius < 12.0) {
262  return 24;
263  }
264  if (scaled_radius < 22.0) {
265  return 34;
266  }
267  return std::min(scaled_radius, 140.0f);
268 }

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


The documentation for this class was generated from the following files:
impeller::Context::BackendType::kMetal
@ kMetal