blob: a86427268ecff8e9e4686d1bbb459c9c8f7f120f [file] [log] [blame]
Ethan Nicholas420f1562017-07-14 13:11:38 -04001/*
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
Ethan Nicholas130fb3f2018-02-01 12:14:34 -05008/**************************************************************************************************
9 *** This file was autogenerated from GrEllipseEffect.fp; do not modify.
10 **************************************************************************************************/
Ethan Nicholas420f1562017-07-14 13:11:38 -040011#ifndef GrEllipseEffect_DEFINED
12#define GrEllipseEffect_DEFINED
Mike Kleinc0bd9f92019-04-23 12:05:21 -050013#include "include/core/SkTypes.h"
Brian Salomon14471772017-12-05 10:35:15 -050014
Mike Kleinc0bd9f92019-04-23 12:05:21 -050015#include "src/gpu/GrShaderCaps.h"
16
17#include "src/gpu/GrCoordTransform.h"
18#include "src/gpu/GrFragmentProcessor.h"
Ethan Nicholas420f1562017-07-14 13:11:38 -040019class GrEllipseEffect : public GrFragmentProcessor {
20public:
Mike Kleind6ab77a2019-03-21 08:18:24 -050021 static std::unique_ptr<GrFragmentProcessor> Make(GrClipEdgeType edgeType, SkPoint center,
22 SkPoint radii, const GrShaderCaps& caps) {
Brian Salomon14471772017-12-05 10:35:15 -050023 // Small radii produce bad results on devices without full float.
24 if (!caps.floatIs32Bits() && (radii.fX < 0.5f || radii.fY < 0.5f)) {
25 return nullptr;
26 }
Jim Van Verth20ae25c2019-03-29 08:50:41 -040027 // Very narrow ellipses produce bad results on devices without full float
28 if (!caps.floatIs32Bits() && (radii.fX > 255 * radii.fY || radii.fY > 255 * radii.fX)) {
29 return nullptr;
30 }
31 // Very large ellipses produce bad results on devices without full float
32 if (!caps.floatIs32Bits() && (radii.fX > 16384 || radii.fY > 16384)) {
33 return nullptr;
34 }
Brian Salomonaff329b2017-08-11 09:40:37 -040035 return std::unique_ptr<GrFragmentProcessor>(new GrEllipseEffect(edgeType, center, radii));
Ethan Nicholas420f1562017-07-14 13:11:38 -040036 }
Ethan Nicholasf57c0d62017-07-31 11:18:22 -040037 GrEllipseEffect(const GrEllipseEffect& src);
Brian Salomonaff329b2017-08-11 09:40:37 -040038 std::unique_ptr<GrFragmentProcessor> clone() const override;
Mike Kleind6ab77a2019-03-21 08:18:24 -050039 const char* name() const override { return "EllipseEffect"; }
Ethan Nicholasbcd51e82019-04-09 10:40:41 -040040 GrClipEdgeType edgeType;
41 SkPoint center;
42 SkPoint radii;
Ethan Nicholasb7e8c3b2017-07-19 13:54:20 -040043
Ethan Nicholas420f1562017-07-14 13:11:38 -040044private:
Ethan Nicholasaae47c82017-11-10 15:34:03 -050045 GrEllipseEffect(GrClipEdgeType edgeType, SkPoint center, SkPoint radii)
Ethan Nicholasabff9562017-10-09 10:54:08 -040046 : INHERITED(kGrEllipseEffect_ClassID,
47 (OptimizationFlags)kCompatibleWithCoverageAsAlpha_OptimizationFlag)
Ethan Nicholasbcd51e82019-04-09 10:40:41 -040048 , edgeType(edgeType)
49 , center(center)
50 , radii(radii) {}
Ethan Nicholas420f1562017-07-14 13:11:38 -040051 GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;
Ethan Nicholasb7e8c3b2017-07-19 13:54:20 -040052 void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override;
Ethan Nicholas420f1562017-07-14 13:11:38 -040053 bool onIsEqual(const GrFragmentProcessor&) const override;
54 GR_DECLARE_FRAGMENT_PROCESSOR_TEST
Ethan Nicholas420f1562017-07-14 13:11:38 -040055 typedef GrFragmentProcessor INHERITED;
56};
57#endif