Home | History | Annotate | Download | only in effects
      1 /*
      2  * Copyright 2017 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 /**************************************************************************************************
      9  *** This file was autogenerated from GrEllipseEffect.fp; do not modify.
     10  **************************************************************************************************/
     11 #ifndef GrEllipseEffect_DEFINED
     12 #define GrEllipseEffect_DEFINED
     13 #include "SkTypes.h"
     14 
     15 #include "GrShaderCaps.h"
     16 #include "GrFragmentProcessor.h"
     17 #include "GrCoordTransform.h"
     18 class GrEllipseEffect : public GrFragmentProcessor {
     19 public:
     20     const GrClipEdgeType& edgeType() const { return fEdgeType; }
     21     const SkPoint& center() const { return fCenter; }
     22     const SkPoint& radii() const { return fRadii; }
     23 
     24     static std::unique_ptr<GrFragmentProcessor> Make(GrClipEdgeType edgeType, SkPoint center,
     25                                                      SkPoint radii, const GrShaderCaps& caps) {
     26         // Small radii produce bad results on devices without full float.
     27         if (!caps.floatIs32Bits() && (radii.fX < 0.5f || radii.fY < 0.5f)) {
     28             return nullptr;
     29         }
     30         // Very narrow ellipses produce bad results on devices without full float
     31         if (!caps.floatIs32Bits() && (radii.fX > 255 * radii.fY || radii.fY > 255 * radii.fX)) {
     32             return nullptr;
     33         }
     34         // Very large ellipses produce bad results on devices without full float
     35         if (!caps.floatIs32Bits() && (radii.fX > 16384 || radii.fY > 16384)) {
     36             return nullptr;
     37         }
     38         return std::unique_ptr<GrFragmentProcessor>(new GrEllipseEffect(edgeType, center, radii));
     39     }
     40     GrEllipseEffect(const GrEllipseEffect& src);
     41     std::unique_ptr<GrFragmentProcessor> clone() const override;
     42     const char* name() const override { return "EllipseEffect"; }
     43 
     44 private:
     45     GrEllipseEffect(GrClipEdgeType edgeType, SkPoint center, SkPoint radii)
     46             : INHERITED(kGrEllipseEffect_ClassID,
     47                         (OptimizationFlags)kCompatibleWithCoverageAsAlpha_OptimizationFlag)
     48             , fEdgeType(edgeType)
     49             , fCenter(center)
     50             , fRadii(radii) {}
     51     GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;
     52     void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override;
     53     bool onIsEqual(const GrFragmentProcessor&) const override;
     54     GR_DECLARE_FRAGMENT_PROCESSOR_TEST
     55     GrClipEdgeType fEdgeType;
     56     SkPoint fCenter;
     57     SkPoint fRadii;
     58     typedef GrFragmentProcessor INHERITED;
     59 };
     60 #endif
     61