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

Unified Diff: src/effects/SkPerlinNoiseShader.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/SkMorphologyImageFilter.cpp ('k') | src/effects/SkTableColorFilter.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/effects/SkPerlinNoiseShader.cpp
diff --git a/src/effects/SkPerlinNoiseShader.cpp b/src/effects/SkPerlinNoiseShader.cpp
index f66655ce3f48d7823cae3a0fbba6795a862174c7..c9096f4f939e2a1e189f8c1dee29670626fe9fb6 100644
--- a/src/effects/SkPerlinNoiseShader.cpp
+++ b/src/effects/SkPerlinNoiseShader.cpp
@@ -472,21 +472,15 @@ void SkPerlinNoiseShader::PerlinNoiseShaderContext::shadeSpan(
class GrGLPerlinNoise : public GrGLSLFragmentProcessor {
public:
- GrGLPerlinNoise(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:
-
GrGLSLProgramDataManager::UniformHandle fStitchDataUni;
- SkPerlinNoiseShader::Type fType;
- bool fStitchTiles;
- int fNumOctaves;
GrGLSLProgramDataManager::UniformHandle fBaseFrequencyUni;
typedef GrGLSLFragmentProcessor INHERITED;
@@ -519,7 +513,7 @@ public:
private:
GrGLSLFragmentProcessor* onCreateGLSLInstance() const override {
- return new GrGLPerlinNoise(*this);
+ return new GrGLPerlinNoise;
}
virtual void onGetGLSLProcessorKey(const GrGLSLCaps& caps,
@@ -597,13 +591,9 @@ const GrFragmentProcessor* GrPerlinNoiseEffect::TestCreate(GrProcessorTestData*
kNone_SkFilterQuality);
}
-GrGLPerlinNoise::GrGLPerlinNoise(const GrProcessor& processor)
- : fType(processor.cast<GrPerlinNoiseEffect>().type())
- , fStitchTiles(processor.cast<GrPerlinNoiseEffect>().stitchTiles())
- , fNumOctaves(processor.cast<GrPerlinNoiseEffect>().numOctaves()) {
-}
-
void GrGLPerlinNoise::emitCode(EmitArgs& args) {
+ const GrPerlinNoiseEffect& pne = args.fFp.cast<GrPerlinNoiseEffect>();
+
GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder;
GrGLSLUniformHandler* uniformHandler = args.fUniformHandler;
SkString vCoords = fragBuilder->ensureFSCoords2D(args.fCoords, 0);
@@ -614,7 +604,7 @@ void GrGLPerlinNoise::emitCode(EmitArgs& args) {
const char* baseFrequencyUni = uniformHandler->getUniformCStr(fBaseFrequencyUni);
const char* stitchDataUni = nullptr;
- if (fStitchTiles) {
+ if (pne.stitchTiles()) {
fStitchDataUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Visibility,
kVec2f_GrSLType, kDefault_GrSLPrecision,
"stitchData");
@@ -667,7 +657,7 @@ void GrGLPerlinNoise::emitCode(EmitArgs& args) {
noiseSmooth, fractVal, fractVal, fractVal);
// Adjust frequencies if we're stitching tiles
- if (fStitchTiles) {
+ if (pne.stitchTiles()) {
noiseCode.appendf("\n\tif(%s.x >= %s.x) { %s.x -= %s.x; }",
floorVal, stitchData, floorVal, stitchData);
noiseCode.appendf("\n\tif(%s.y >= %s.y) { %s.y -= %s.y; }",
@@ -776,7 +766,7 @@ void GrGLPerlinNoise::emitCode(EmitArgs& args) {
noiseCode.appendf("\n\treturn mix(%s.x, %s.y, %s.y);\n", ab, ab, noiseSmooth);
SkString noiseFuncName;
- if (fStitchTiles) {
+ if (pne.stitchTiles()) {
fragBuilder->emitFunction(kFloat_GrSLType,
"perlinnoise", SK_ARRAY_COUNT(gPerlinNoiseStitchArgs),
gPerlinNoiseStitchArgs, noiseCode.c_str(), &noiseFuncName);
@@ -793,21 +783,21 @@ void GrGLPerlinNoise::emitCode(EmitArgs& args) {
// Clear the color accumulator
fragBuilder->codeAppendf("\n\t\t%s = vec4(0.0);", args.fOutputColor);
- if (fStitchTiles) {
+ if (pne.stitchTiles()) {
// Set up TurbulenceInitial stitch values.
- fragBuilder->codeAppendf("\n\t\tvec2 %s = %s;", stitchData, stitchDataUni);
+ fragBuilder->codeAppendf("vec2 %s = %s;", stitchData, stitchDataUni);
}
- fragBuilder->codeAppendf("\n\t\tfloat %s = 1.0;", ratio);
+ fragBuilder->codeAppendf("float %s = 1.0;", ratio);
// Loop over all octaves
- fragBuilder->codeAppendf("\n\t\tfor (int octave = 0; octave < %d; ++octave) {", fNumOctaves);
+ fragBuilder->codeAppendf("for (int octave = 0; octave < %d; ++octave) {", pne.numOctaves());
- fragBuilder->codeAppendf("\n\t\t\t%s += ", args.fOutputColor);
- if (fType != SkPerlinNoiseShader::kFractalNoise_Type) {
+ fragBuilder->codeAppendf("%s += ", args.fOutputColor);
+ if (pne.type() != SkPerlinNoiseShader::kFractalNoise_Type) {
fragBuilder->codeAppend("abs(");
}
- if (fStitchTiles) {
+ if (pne.stitchTiles()) {
fragBuilder->codeAppendf(
"vec4(\n\t\t\t\t%s(%s, %s, %s),\n\t\t\t\t%s(%s, %s, %s),"
"\n\t\t\t\t%s(%s, %s, %s),\n\t\t\t\t%s(%s, %s, %s))",
@@ -824,7 +814,7 @@ void GrGLPerlinNoise::emitCode(EmitArgs& args) {
noiseFuncName.c_str(), chanCoordB, noiseVec,
noiseFuncName.c_str(), chanCoordA, noiseVec);
}
- if (fType != SkPerlinNoiseShader::kFractalNoise_Type) {
+ if (pne.type() != SkPerlinNoiseShader::kFractalNoise_Type) {
fragBuilder->codeAppendf(")"); // end of "abs("
}
fragBuilder->codeAppendf(" * %s;", ratio);
@@ -832,12 +822,12 @@ void GrGLPerlinNoise::emitCode(EmitArgs& args) {
fragBuilder->codeAppendf("\n\t\t\t%s *= vec2(2.0);", noiseVec);
fragBuilder->codeAppendf("\n\t\t\t%s *= 0.5;", ratio);
- if (fStitchTiles) {
+ if (pne.stitchTiles()) {
fragBuilder->codeAppendf("\n\t\t\t%s *= vec2(2.0);", stitchData);
}
fragBuilder->codeAppend("\n\t\t}"); // end of the for loop on octaves
- if (fType == SkPerlinNoiseShader::kFractalNoise_Type) {
+ if (pne.type() == SkPerlinNoiseShader::kFractalNoise_Type) {
// The value of turbulenceFunctionResult comes from ((turbulenceFunctionResult) + 1) / 2
// by fractalNoise and (turbulenceFunctionResult) by turbulence.
fragBuilder->codeAppendf("\n\t\t%s = %s * vec4(0.5) + vec4(0.5);",
« no previous file with comments | « src/effects/SkMorphologyImageFilter.cpp ('k') | src/effects/SkTableColorFilter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698