55 : fX{rect.fLeft, rect.fLeft, rect.fRight, rect.fRight}
56 , fY{rect.fTop, rect.fBottom, rect.fTop, rect.fBottom} {}
71 return {fX[i] / fW[i], fY[i] / fW[i]};
73 return {fX[i], fY[i]};
78 w << this->
point(cornerIdx);
83 return this->projectedBounds();
88 auto min = [](
const float c[4]) {
return std::min(std::min(c[0], c[1]),
89 std::min(c[2], c[3]));};
90 auto max = [](
const float c[4]) {
return std::max(std::max(c[0], c[1]),
91 std::max(c[2], c[3]));};
98 for (
int i = 0; i < 4; ++i) {
105 return accum == 0.0f;
108 float x(
int i)
const {
return fX[i]; }
109 float y(
int i)
const {
return fY[i]; }
110 float w(
int i)
const {
return fW[i]; }
132 const float*
xs()
const {
return fX; }
133 float*
xs() {
return fX; }
134 const float*
ys()
const {
return fY; }
135 float*
ys() {
return fY; }
136 const float*
ws()
const {
return fW; }
137 float*
ws() {
return fW; }
142 fW[0] = fW[1] = fW[2] = fW[3] = 1.f;
171 SkRect projectedBounds()
const;
175 float fW[4] = {1.f, 1.f, 1.f, 1.f};
static constexpr float sk_ieee_float_divide(float numer, float denom)
static bool SkScalarNearlyEqual(SkScalar x, SkScalar y, SkScalar tolerance=SK_ScalarNearlyZero)
skvx::Vec< 4, float > iw4f() const
static const int kTypeCount
void writeVertex(int cornerIdx, skgpu::VertexWriter &w) const
static GrQuad MakeFromRect(const SkRect &, const SkMatrix &)
skvx::Vec< 4, float > y4f() const
bool aaHasEffectOnRect(GrQuadAAFlags edgeFlags) const
bool hasPerspective() const
bool asRect(SkRect *rect) const
static GrQuad MakeFromSkQuad(const SkPoint pts[4], const SkMatrix &)
skvx::Vec< 4, float > x4f() const
void setQuadType(Type newType)
GrQuad & operator=(const GrQuad &)=default
SkPoint point(int i) const
friend class GrQuadListBase
SkPoint3 point3(int i) const
GrQuad(const GrQuad &)=default
GrQuad(const SkRect &rect)
skvx::Vec< 4, float > w4f() const
static float max(float r, float g, float b)
static float min(float r, float g, float b)
static SKVX_ALWAYS_INLINE Vec Load(const void *ptr)