Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(206)

Unified Diff: src/effects/SkMorphologyImageFilter.cpp

Issue 1661143003: Next round of GrGLSLFragmentProcessor-derived class cleanup (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Fix overlength line Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/effects/SkLumaColorFilter.cpp ('k') | src/effects/SkPerlinNoiseShader.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/effects/SkMorphologyImageFilter.cpp
diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp
index 0a4bc2add61ff5bcedad141177cdcff38a41f1e1..bc5bdee7e44535258c755ed4565eb95585190344 100644
--- a/src/effects/SkMorphologyImageFilter.cpp
+++ b/src/effects/SkMorphologyImageFilter.cpp
@@ -253,37 +253,23 @@ private:
class GrGLMorphologyEffect : public GrGLSLFragmentProcessor {
public:
- GrGLMorphologyEffect(const GrProcessor&);
-
void emitCode(EmitArgs&) override;
- static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessorKeyBuilder* b);
+ static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessorKeyBuilder*);
protected:
void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override;
private:
- int width() const { return GrMorphologyEffect::WidthFromRadius(fRadius); }
-
- int fRadius;
- Gr1DKernelEffect::Direction fDirection;
- bool fUseRange;
- GrMorphologyEffect::MorphologyType fType;
GrGLSLProgramDataManager::UniformHandle fPixelSizeUni;
GrGLSLProgramDataManager::UniformHandle fRangeUni;
typedef GrGLSLFragmentProcessor INHERITED;
};
-GrGLMorphologyEffect::GrGLMorphologyEffect(const GrProcessor& proc) {
- const GrMorphologyEffect& m = proc.cast<GrMorphologyEffect>();
- fRadius = m.radius();
- fDirection = m.direction();
- fUseRange = m.useRange();
- fType = m.type();
-}
-
void GrGLMorphologyEffect::emitCode(EmitArgs& args) {
+ const GrMorphologyEffect& me = args.fFp.cast<GrMorphologyEffect>();
+
GrGLSLUniformHandler* uniformHandler = args.fUniformHandler;
fPixelSizeUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Visibility,
kFloat_GrSLType, kDefault_GrSLPrecision,
@@ -297,7 +283,7 @@ void GrGLMorphologyEffect::emitCode(EmitArgs& args) {
GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder;
SkString coords2D = fragBuilder->ensureFSCoords2D(args.fCoords, 0);
const char* func;
- switch (fType) {
+ switch (me.type()) {
case GrMorphologyEffect::kErode_MorphologyType:
fragBuilder->codeAppendf("\t\t%s = vec4(1, 1, 1, 1);\n", args.fOutputColor);
func = "min";
@@ -313,7 +299,7 @@ void GrGLMorphologyEffect::emitCode(EmitArgs& args) {
}
const char* dir;
- switch (fDirection) {
+ switch (me.direction()) {
case Gr1DKernelEffect::kX_Direction:
dir = "x";
break;
@@ -325,24 +311,26 @@ void GrGLMorphologyEffect::emitCode(EmitArgs& args) {
dir = ""; // suppress warning
}
+ int width = GrMorphologyEffect::WidthFromRadius(me.radius());
+
// vec2 coord = coord2D;
fragBuilder->codeAppendf("\t\tvec2 coord = %s;\n", coords2D.c_str());
// coord.x -= radius * pixelSize;
- fragBuilder->codeAppendf("\t\tcoord.%s -= %d.0 * %s; \n", dir, fRadius, pixelSizeInc);
- if (fUseRange) {
+ fragBuilder->codeAppendf("\t\tcoord.%s -= %d.0 * %s; \n", dir, me.radius(), pixelSizeInc);
+ if (me.useRange()) {
// highBound = min(highBound, coord.x + (width-1) * pixelSize);
fragBuilder->codeAppendf("\t\tfloat highBound = min(%s.y, coord.%s + %f * %s);",
- range, dir, float(width() - 1), pixelSizeInc);
+ range, dir, float(width - 1), pixelSizeInc);
// coord.x = max(lowBound, coord.x);
fragBuilder->codeAppendf("\t\tcoord.%s = max(%s.x, coord.%s);", dir, range, dir);
}
- fragBuilder->codeAppendf("\t\tfor (int i = 0; i < %d; i++) {\n", width());
+ fragBuilder->codeAppendf("\t\tfor (int i = 0; i < %d; i++) {\n", width);
fragBuilder->codeAppendf("\t\t\t%s = %s(%s, ", args.fOutputColor, func, args.fOutputColor);
fragBuilder->appendTextureLookup(args.fSamplers[0], "coord");
fragBuilder->codeAppend(");\n");
// coord.x += pixelSize;
fragBuilder->codeAppendf("\t\t\tcoord.%s += %s;\n", dir, pixelSizeInc);
- if (fUseRange) {
+ if (me.useRange()) {
// coord.x = min(highBound, coord.x);
fragBuilder->codeAppendf("\t\t\tcoord.%s = min(highBound, coord.%s);", dir, dir);
}
@@ -358,21 +346,19 @@ void GrGLMorphologyEffect::GenKey(const GrProcessor& proc,
uint32_t key = static_cast<uint32_t>(m.radius());
key |= (m.type() << 8);
key |= (m.direction() << 9);
- if (m.useRange()) key |= 1 << 10;
+ if (m.useRange()) {
+ key |= 1 << 10;
+ }
b->add32(key);
}
void GrGLMorphologyEffect::onSetData(const GrGLSLProgramDataManager& pdman,
- const GrProcessor& proc) {
+ const GrProcessor& proc) {
const GrMorphologyEffect& m = proc.cast<GrMorphologyEffect>();
GrTexture& texture = *m.texture(0);
- // the code we generated was for a specific kernel radius, direction and bound usage
- SkASSERT(m.radius() == fRadius);
- SkASSERT(m.direction() == fDirection);
- SkASSERT(m.useRange() == fUseRange);
float pixelSize = 0.0f;
- switch (fDirection) {
+ switch (m.direction()) {
case Gr1DKernelEffect::kX_Direction:
pixelSize = 1.0f / texture.width();
break;
@@ -384,9 +370,9 @@ void GrGLMorphologyEffect::onSetData(const GrGLSLProgramDataManager& pdman,
}
pdman.set1f(fPixelSizeUni, pixelSize);
- if (fUseRange) {
+ if (m.useRange()) {
const float* range = m.range();
- if (fDirection && texture.origin() == kBottomLeft_GrSurfaceOrigin) {
+ if (m.direction() && texture.origin() == kBottomLeft_GrSurfaceOrigin) {
pdman.set2f(fRangeUni, 1.0f - range[1], 1.0f - range[0]);
} else {
pdman.set2f(fRangeUni, range[0], range[1]);
@@ -426,7 +412,7 @@ void GrMorphologyEffect::onGetGLSLProcessorKey(const GrGLSLCaps& caps,
}
GrGLSLFragmentProcessor* GrMorphologyEffect::onCreateGLSLInstance() const {
- return new GrGLMorphologyEffect(*this);
+ return new GrGLMorphologyEffect;
}
bool GrMorphologyEffect::onIsEqual(const GrFragmentProcessor& sBase) const {
const GrMorphologyEffect& s = sBase.cast<GrMorphologyEffect>();
« no previous file with comments | « src/effects/SkLumaColorFilter.cpp ('k') | src/effects/SkPerlinNoiseShader.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698