Index: experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp |
diff --git a/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp b/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp |
index 8afbee0827bba8140f5a65d3649a0dbbb068f6b7..233638253c949516dc9e438f8b4424179e098bc0 100644 |
--- a/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp |
+++ b/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp |
@@ -609,8 +609,6 @@ void SkPerlinNoiseShader2::PerlinNoiseShaderContext::shadeSpan( |
class GrGLPerlinNoise2 : public GrGLSLFragmentProcessor { |
public: |
- GrGLPerlinNoise2(const GrProcessor&); |
- |
void emitCode(EmitArgs&) override; |
static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessorKeyBuilder* b); |
@@ -619,14 +617,9 @@ protected: |
void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override; |
private: |
- |
GrGLSLProgramDataManager::UniformHandle fStitchDataUni; |
- SkPerlinNoiseShader2::Type fType; |
- bool fStitchTiles; |
- int fNumOctaves; |
GrGLSLProgramDataManager::UniformHandle fBaseFrequencyUni; |
-private: |
typedef GrGLSLFragmentProcessor INHERITED; |
}; |
@@ -657,7 +650,7 @@ public: |
private: |
GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { |
- return new GrGLPerlinNoise2(*this); |
+ return new GrGLPerlinNoise2; |
} |
virtual void onGetGLSLProcessorKey(const GrGLSLCaps& caps, |
@@ -736,13 +729,9 @@ const GrFragmentProcessor* GrPerlinNoise2Effect::TestCreate(GrProcessorTestData* |
kNone_SkFilterQuality); |
} |
-GrGLPerlinNoise2::GrGLPerlinNoise2(const GrProcessor& processor) |
- : fType(processor.cast<GrPerlinNoise2Effect>().type()) |
- , fStitchTiles(processor.cast<GrPerlinNoise2Effect>().stitchTiles()) |
- , fNumOctaves(processor.cast<GrPerlinNoise2Effect>().numOctaves()) { |
-} |
- |
void GrGLPerlinNoise2::emitCode(EmitArgs& args) { |
+ const GrPerlinNoise2Effect& pne = args.fFp.cast<GrPerlinNoise2Effect>(); |
+ |
GrGLSLFragmentBuilder* fsBuilder = args.fFragBuilder; |
GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; |
SkString vCoords = fsBuilder->ensureFSCoords2D(args.fCoords, 0); |
@@ -753,7 +742,7 @@ void GrGLPerlinNoise2::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"); |
@@ -806,7 +795,7 @@ void GrGLPerlinNoise2::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; }", |
@@ -915,7 +904,7 @@ void GrGLPerlinNoise2::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()) { |
fsBuilder->emitFunction(kFloat_GrSLType, |
"perlinnoise", SK_ARRAY_COUNT(gPerlinNoiseStitchArgs), |
gPerlinNoiseStitchArgs, noiseCode.c_str(), &noiseFuncName); |
@@ -932,7 +921,7 @@ void GrGLPerlinNoise2::emitCode(EmitArgs& args) { |
// Clear the color accumulator |
fsBuilder->codeAppendf("\n\t\t%s = vec4(0.0);", args.fOutputColor); |
- if (fStitchTiles) { |
+ if (pne.stitchTiles()) { |
// Set up TurbulenceInitial stitch values. |
fsBuilder->codeAppendf("\n\t\tvec2 %s = %s;", stitchData, stitchDataUni); |
} |
@@ -940,13 +929,13 @@ void GrGLPerlinNoise2::emitCode(EmitArgs& args) { |
fsBuilder->codeAppendf("\n\t\tfloat %s = 1.0;", ratio); |
// Loop over all octaves |
- fsBuilder->codeAppendf("\n\t\tfor (int octave = 0; octave < %d; ++octave) {", fNumOctaves); |
+ fsBuilder->codeAppendf("for (int octave = 0; octave < %d; ++octave) {", pne.numOctaves()); |
fsBuilder->codeAppendf("\n\t\t\t%s += ", args.fOutputColor); |
- if (fType != SkPerlinNoiseShader2::kFractalNoise_Type) { |
+ if (pne.type() != SkPerlinNoiseShader2::kFractalNoise_Type) { |
fsBuilder->codeAppend("abs("); |
} |
- if (fStitchTiles) { |
+ if (pne.stitchTiles()) { |
fsBuilder->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))", |
@@ -963,7 +952,7 @@ void GrGLPerlinNoise2::emitCode(EmitArgs& args) { |
noiseFuncName.c_str(), chanCoordB, noiseVec, |
noiseFuncName.c_str(), chanCoordA, noiseVec); |
} |
- if (fType != SkPerlinNoiseShader2::kFractalNoise_Type) { |
+ if (pne.type() != SkPerlinNoiseShader2::kFractalNoise_Type) { |
fsBuilder->codeAppendf(")"); // end of "abs(" |
} |
fsBuilder->codeAppendf(" * %s;", ratio); |
@@ -971,12 +960,12 @@ void GrGLPerlinNoise2::emitCode(EmitArgs& args) { |
fsBuilder->codeAppendf("\n\t\t\t%s *= vec2(2.0);", noiseVec); |
fsBuilder->codeAppendf("\n\t\t\t%s *= 0.5;", ratio); |
- if (fStitchTiles) { |
+ if (pne.stitchTiles()) { |
fsBuilder->codeAppendf("\n\t\t\t%s *= vec2(2.0);", stitchData); |
} |
fsBuilder->codeAppend("\n\t\t}"); // end of the for loop on octaves |
- if (fType == SkPerlinNoiseShader2::kFractalNoise_Type) { |
+ if (pne.type() == SkPerlinNoiseShader2::kFractalNoise_Type) { |
// The value of turbulenceFunctionResult comes from ((turbulenceFunctionResult) + 1) / 2 |
// by fractalNoise and (turbulenceFunctionResult) by turbulence. |
fsBuilder->codeAppendf("\n\t\t%s = %s * vec4(0.5) + vec4(0.5);", |