| 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);",
|
|
|