aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/effects/GrOvalEffect.cpp
diff options
context:
space:
mode:
authorGravatar wangyix <wangyix@google.com>2015-08-18 11:29:31 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-08-18 11:29:32 -0700
commitb1daa86732fe70aa4630c89d75ff0fd619d77c77 (patch)
tree9ddc71e82c682c42968343cfdbea68038c2ca11b /src/gpu/effects/GrOvalEffect.cpp
parent935d6cfaa78b6be75c9fcc596805f0f9b8da972e (diff)
When getGLInstance is called on a frag proc, the resulting GrGLFragmentProcessor will be the root of a tree of GrGLFragmentProcessors that mirrors the GrFragmentProcessor's tree. This allows setData() to be called recursively (removing the responsibility from compose shader) and allows gl instances direct access to their children gl instances so they can emit their code.
Diffstat (limited to 'src/gpu/effects/GrOvalEffect.cpp')
-rw-r--r--src/gpu/effects/GrOvalEffect.cpp22
1 files changed, 12 insertions, 10 deletions
diff --git a/src/gpu/effects/GrOvalEffect.cpp b/src/gpu/effects/GrOvalEffect.cpp
index 1fb54aede3..3fb7b9029d 100644
--- a/src/gpu/effects/GrOvalEffect.cpp
+++ b/src/gpu/effects/GrOvalEffect.cpp
@@ -23,8 +23,6 @@ public:
const char* name() const override { return "Circle"; }
- GrGLFragmentProcessor* createGLInstance() const override;
-
const SkPoint& getCenter() const { return fCenter; }
SkScalar getRadius() const { return fRadius; }
@@ -33,6 +31,8 @@ public:
private:
CircleEffect(GrPrimitiveEdgeType, const SkPoint& center, SkScalar radius);
+ GrGLFragmentProcessor* onCreateGLInstance() const override;
+
void onGetGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const override;
bool onIsEqual(const GrFragmentProcessor&) const override;
@@ -97,7 +97,8 @@ public:
static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessorKeyBuilder*);
- void setData(const GrGLProgramDataManager&, const GrProcessor&) override;
+protected:
+ void onSetData(const GrGLProgramDataManager&, const GrProcessor&) override;
private:
GrGLProgramDataManager::UniformHandle fCircleUniform;
@@ -152,7 +153,7 @@ void GLCircleEffect::GenKey(const GrProcessor& processor, const GrGLSLCaps&,
b->add32(ce.getEdgeType());
}
-void GLCircleEffect::setData(const GrGLProgramDataManager& pdman, const GrProcessor& processor) {
+void GLCircleEffect::onSetData(const GrGLProgramDataManager& pdman, const GrProcessor& processor) {
const CircleEffect& ce = processor.cast<CircleEffect>();
if (ce.getRadius() != fPrevRadius || ce.getCenter() != fPrevCenter) {
SkScalar radius = ce.getRadius();
@@ -175,7 +176,7 @@ void CircleEffect::onGetGLProcessorKey(const GrGLSLCaps& caps,
GLCircleEffect::GenKey(*this, caps, b);
}
-GrGLFragmentProcessor* CircleEffect::createGLInstance() const {
+GrGLFragmentProcessor* CircleEffect::onCreateGLInstance() const {
return SkNEW_ARGS(GLCircleEffect, (*this));
}
@@ -190,8 +191,6 @@ public:
const char* name() const override { return "Ellipse"; }
- GrGLFragmentProcessor* createGLInstance() const override;
-
const SkPoint& getCenter() const { return fCenter; }
SkVector getRadii() const { return fRadii; }
@@ -200,6 +199,8 @@ public:
private:
EllipseEffect(GrPrimitiveEdgeType, const SkPoint& center, SkScalar rx, SkScalar ry);
+ GrGLFragmentProcessor* onCreateGLInstance() const override;
+
void onGetGLProcessorKey(const GrGLSLCaps&, GrProcessorKeyBuilder*) const override;
bool onIsEqual(const GrFragmentProcessor&) const override;
@@ -267,7 +268,8 @@ public:
static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessorKeyBuilder*);
- void setData(const GrGLProgramDataManager&, const GrProcessor&) override;
+protected:
+ void onSetData(const GrGLProgramDataManager&, const GrProcessor&) override;
private:
GrGLProgramDataManager::UniformHandle fEllipseUniform;
@@ -332,7 +334,7 @@ void GLEllipseEffect::GenKey(const GrProcessor& effect, const GrGLSLCaps&,
b->add32(ee.getEdgeType());
}
-void GLEllipseEffect::setData(const GrGLProgramDataManager& pdman, const GrProcessor& effect) {
+void GLEllipseEffect::onSetData(const GrGLProgramDataManager& pdman, const GrProcessor& effect) {
const EllipseEffect& ee = effect.cast<EllipseEffect>();
if (ee.getRadii() != fPrevRadii || ee.getCenter() != fPrevCenter) {
SkScalar invRXSqd = 1.f / (ee.getRadii().fX * ee.getRadii().fX);
@@ -350,7 +352,7 @@ void EllipseEffect::onGetGLProcessorKey(const GrGLSLCaps& caps,
GLEllipseEffect::GenKey(*this, caps, b);
}
-GrGLFragmentProcessor* EllipseEffect::createGLInstance() const {
+GrGLFragmentProcessor* EllipseEffect::onCreateGLInstance() const {
return SkNEW_ARGS(GLEllipseEffect, (*this));
}