| Flutter Impeller |

wangs_formula.cc
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 #include "impeller/geometry/wangs_formula.h"
6
7 namespace impeller {
8
9 namespace {
10
11 // Don't allow linearized segments to be off by more than 1/4th of a pixel from
12 // the true curve. This value should be scaled by the max basis of the
13 // X and Y directions.
14 constexpr static Scalar kPrecision = 4;
15
16 constexpr Scalar length(Point n) {
17 Point nn = n * n;
18 return std::sqrt(nn.x + nn.y);
19 }
20
21 } // namespace
22
23 Scalar ComputeCubicSubdivisions(Scalar scale_factor,
24 Point p0,
25 Point p1,
26 Point p2,
27 Point p3) {
28 Scalar k = scale_factor * .75f * kPrecision;
29 Point a = (p0 - p1 * 2 + p2).Abs();
30 Point b = (p1 - p2 * 2 + p3).Abs();
31 return std::sqrt(k * length(a.Max(b)));
32 }
33
34 Scalar ComputeQuadradicSubdivisions(Scalar scale_factor,
35 Point p0,
36 Point p1,
37 Point p2) {
38 Scalar k = scale_factor * .25f * kPrecision;
39 return std::sqrt(k * length(p0 - p1 * 2 + p2));
40 }
41
42 Scalar ComputeQuadradicSubdivisions(Scalar scale_factor,
43 const QuadraticPathComponent& quad) {
44 return ComputeQuadradicSubdivisions(scale_factor, quad.p1, quad.cp, quad.p2);
45 }
46
47 Scalar ComputeCubicSubdivisions(float scale_factor,
48 const CubicPathComponent& cub) {
49 return ComputeCubicSubdivisions(scale_factor, cub.p1, cub.cp1, cub.cp2,
50 cub.p2);
51 }
52
53 } // namespace impeller
impeller::ComputeQuadradicSubdivisions
Scalar ComputeQuadradicSubdivisions(Scalar scale_factor, Point p0, Point p1, Point p2)
Definition: wangs_formula.cc:34
impeller::Scalar
float Scalar
Definition: scalar.h:18
impeller::CubicPathComponent::p1
Point p1
Definition: path_component.h:102
impeller::QuadraticPathComponent::p1
Point p1
Definition: path_component.h:64
impeller::CubicPathComponent::cp2
Point cp2
Definition: path_component.h:106
impeller::QuadraticPathComponent::cp
Point cp
Definition: path_component.h:66
impeller::CubicPathComponent::cp1
Point cp1
Definition: path_component.h:104
impeller::Point
TPoint< Scalar > Point
Definition: point.h:327
impeller::TPoint::Max
constexpr TPoint Max(const TPoint &p) const
Definition: point.h:190
impeller::CubicPathComponent
Definition: path_component.h:100
impeller::ComputeCubicSubdivisions
Scalar ComputeCubicSubdivisions(Scalar scale_factor, Point p0, Point p1, Point p2, Point p3)
Definition: wangs_formula.cc:23
impeller::QuadraticPathComponent::p2
Point p2
Definition: path_component.h:68
impeller::TPoint
Definition: point.h:27
impeller::saturated::b
SI b
Definition: saturated_math.h:87
impeller::CubicPathComponent::p2
Point p2
Definition: path_component.h:108
impeller
Definition: allocation.cc:12
impeller::QuadraticPathComponent
Definition: path_component.h:62
wangs_formula.h