| Index: src/effects/SkPerlinNoiseShader.cpp
|
| diff --git a/src/effects/SkPerlinNoiseShader.cpp b/src/effects/SkPerlinNoiseShader.cpp
|
| index 427b451dd011d641c0e76e7bf8d151e331d12c78..b0ebb39342bc749e0cacf7e9d505f0c4250c1033 100644
|
| --- a/src/effects/SkPerlinNoiseShader.cpp
|
| +++ b/src/effects/SkPerlinNoiseShader.cpp
|
| @@ -18,7 +18,7 @@
|
| #include "GrContext.h"
|
| #include "GrCoordTransform.h"
|
| #include "gl/GrGLEffect.h"
|
| -#include "gl/GrGLShaderBuilder.h"
|
| +#include "gl/builders/GrGLProgramBuilder.h"
|
| #include "GrTBackendEffectFactory.h"
|
| #include "SkGr.h"
|
| #endif
|
| @@ -515,7 +515,7 @@ public:
|
| const GrDrawEffect& drawEffect);
|
| virtual ~GrGLPerlinNoise() {}
|
|
|
| - virtual void emitCode(GrGLShaderBuilder*,
|
| + virtual void emitCode(GrGLProgramBuilder*,
|
| const GrDrawEffect&,
|
| const GrEffectKey&,
|
| const char* outputColor,
|
| @@ -663,7 +663,7 @@ GrGLPerlinNoise::GrGLPerlinNoise(const GrBackendEffectFactory& factory, const Gr
|
| , fNumOctaves(drawEffect.castEffect<GrPerlinNoiseEffect>().numOctaves()) {
|
| }
|
|
|
| -void GrGLPerlinNoise::emitCode(GrGLShaderBuilder* builder,
|
| +void GrGLPerlinNoise::emitCode(GrGLProgramBuilder* builder,
|
| const GrDrawEffect&,
|
| const GrEffectKey& key,
|
| const char* outputColor,
|
| @@ -672,18 +672,19 @@ void GrGLPerlinNoise::emitCode(GrGLShaderBuilder* builder,
|
| const TextureSamplerArray& samplers) {
|
| sk_ignore_unused_variable(inputColor);
|
|
|
| - SkString vCoords = builder->ensureFSCoords2D(coords, 0);
|
| + GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBuilder();
|
| + SkString vCoords = fsBuilder->ensureFSCoords2D(coords, 0);
|
|
|
| - fBaseFrequencyUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility,
|
| + fBaseFrequencyUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
|
| kVec2f_GrSLType, "baseFrequency");
|
| const char* baseFrequencyUni = builder->getUniformCStr(fBaseFrequencyUni);
|
| - fAlphaUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility,
|
| + fAlphaUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
|
| kFloat_GrSLType, "alpha");
|
| const char* alphaUni = builder->getUniformCStr(fAlphaUni);
|
|
|
| const char* stitchDataUni = NULL;
|
| if (fStitchTiles) {
|
| - fStitchDataUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility,
|
| + fStitchDataUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility,
|
| kVec2f_GrSLType, "stitchData");
|
| stitchDataUni = builder->getUniformCStr(fStitchDataUni);
|
| }
|
| @@ -755,7 +756,7 @@ void GrGLPerlinNoise::emitCode(GrGLShaderBuilder* builder,
|
| xCoords.appendf("vec2(%s.x, 0.5)", floorVal);
|
|
|
| noiseCode.appendf("\n\tvec2 %s;\n\t%s.x = ", latticeIdx, latticeIdx);
|
| - builder->appendTextureLookup(&noiseCode, samplers[0], xCoords.c_str(), kVec2f_GrSLType);
|
| + fsBuilder->appendTextureLookup(&noiseCode, samplers[0], xCoords.c_str(), kVec2f_GrSLType);
|
| noiseCode.append(".r;");
|
| }
|
|
|
| @@ -765,7 +766,7 @@ void GrGLPerlinNoise::emitCode(GrGLShaderBuilder* builder,
|
| xCoords.appendf("vec2(%s.z, 0.5)", floorVal);
|
|
|
| noiseCode.appendf("\n\t%s.y = ", latticeIdx);
|
| - builder->appendTextureLookup(&noiseCode, samplers[0], xCoords.c_str(), kVec2f_GrSLType);
|
| + fsBuilder->appendTextureLookup(&noiseCode, samplers[0], xCoords.c_str(), kVec2f_GrSLType);
|
| noiseCode.append(".r;");
|
| }
|
|
|
| @@ -789,7 +790,7 @@ void GrGLPerlinNoise::emitCode(GrGLShaderBuilder* builder,
|
| SkString latticeCoords("");
|
| latticeCoords.appendf("vec2(%s.x, %s)", bcoords, chanCoord);
|
| noiseCode.appendf("\n\tvec4 %s = ", lattice);
|
| - builder->appendTextureLookup(&noiseCode, samplers[1], latticeCoords.c_str(),
|
| + fsBuilder->appendTextureLookup(&noiseCode, samplers[1], latticeCoords.c_str(),
|
| kVec2f_GrSLType);
|
| noiseCode.appendf(".bgra;\n\t%s.x = ", uv);
|
| noiseCode.appendf(dotLattice, lattice, lattice, inc8bit, fractVal);
|
| @@ -801,7 +802,7 @@ void GrGLPerlinNoise::emitCode(GrGLShaderBuilder* builder,
|
| SkString latticeCoords("");
|
| latticeCoords.appendf("vec2(%s.y, %s)", bcoords, chanCoord);
|
| noiseCode.append("\n\tlattice = ");
|
| - builder->appendTextureLookup(&noiseCode, samplers[1], latticeCoords.c_str(),
|
| + fsBuilder->appendTextureLookup(&noiseCode, samplers[1], latticeCoords.c_str(),
|
| kVec2f_GrSLType);
|
| noiseCode.appendf(".bgra;\n\t%s.y = ", uv);
|
| noiseCode.appendf(dotLattice, lattice, lattice, inc8bit, fractVal);
|
| @@ -817,7 +818,7 @@ void GrGLPerlinNoise::emitCode(GrGLShaderBuilder* builder,
|
| SkString latticeCoords("");
|
| latticeCoords.appendf("vec2(%s.w, %s)", bcoords, chanCoord);
|
| noiseCode.append("\n\tlattice = ");
|
| - builder->appendTextureLookup(&noiseCode, samplers[1], latticeCoords.c_str(),
|
| + fsBuilder->appendTextureLookup(&noiseCode, samplers[1], latticeCoords.c_str(),
|
| kVec2f_GrSLType);
|
| noiseCode.appendf(".bgra;\n\t%s.y = ", uv);
|
| noiseCode.appendf(dotLattice, lattice, lattice, inc8bit, fractVal);
|
| @@ -829,7 +830,7 @@ void GrGLPerlinNoise::emitCode(GrGLShaderBuilder* builder,
|
| SkString latticeCoords("");
|
| latticeCoords.appendf("vec2(%s.z, %s)", bcoords, chanCoord);
|
| noiseCode.append("\n\tlattice = ");
|
| - builder->appendTextureLookup(&noiseCode, samplers[1], latticeCoords.c_str(),
|
| + fsBuilder->appendTextureLookup(&noiseCode, samplers[1], latticeCoords.c_str(),
|
| kVec2f_GrSLType);
|
| noiseCode.appendf(".bgra;\n\t%s.x = ", uv);
|
| noiseCode.appendf(dotLattice, lattice, lattice, inc8bit, fractVal);
|
| @@ -842,38 +843,38 @@ void GrGLPerlinNoise::emitCode(GrGLShaderBuilder* builder,
|
|
|
| SkString noiseFuncName;
|
| if (fStitchTiles) {
|
| - builder->fsEmitFunction(kFloat_GrSLType,
|
| + fsBuilder->emitFunction(kFloat_GrSLType,
|
| "perlinnoise", SK_ARRAY_COUNT(gPerlinNoiseStitchArgs),
|
| gPerlinNoiseStitchArgs, noiseCode.c_str(), &noiseFuncName);
|
| } else {
|
| - builder->fsEmitFunction(kFloat_GrSLType,
|
| + fsBuilder->emitFunction(kFloat_GrSLType,
|
| "perlinnoise", SK_ARRAY_COUNT(gPerlinNoiseArgs),
|
| gPerlinNoiseArgs, noiseCode.c_str(), &noiseFuncName);
|
| }
|
|
|
| // There are rounding errors if the floor operation is not performed here
|
| - builder->fsCodeAppendf("\n\t\tvec2 %s = floor(%s.xy) * %s;",
|
| + fsBuilder->codeAppendf("\n\t\tvec2 %s = floor(%s.xy) * %s;",
|
| noiseVec, vCoords.c_str(), baseFrequencyUni);
|
|
|
| // Clear the color accumulator
|
| - builder->fsCodeAppendf("\n\t\t%s = vec4(0.0);", outputColor);
|
| + fsBuilder->codeAppendf("\n\t\t%s = vec4(0.0);", outputColor);
|
|
|
| if (fStitchTiles) {
|
| // Set up TurbulenceInitial stitch values.
|
| - builder->fsCodeAppendf("\n\t\tvec2 %s = %s;", stitchData, stitchDataUni);
|
| + fsBuilder->codeAppendf("\n\t\tvec2 %s = %s;", stitchData, stitchDataUni);
|
| }
|
|
|
| - builder->fsCodeAppendf("\n\t\tfloat %s = 1.0;", ratio);
|
| + fsBuilder->codeAppendf("\n\t\tfloat %s = 1.0;", ratio);
|
|
|
| // Loop over all octaves
|
| - builder->fsCodeAppendf("\n\t\tfor (int octave = 0; octave < %d; ++octave) {", fNumOctaves);
|
| + fsBuilder->codeAppendf("\n\t\tfor (int octave = 0; octave < %d; ++octave) {", fNumOctaves);
|
|
|
| - builder->fsCodeAppendf("\n\t\t\t%s += ", outputColor);
|
| + fsBuilder->codeAppendf("\n\t\t\t%s += ", outputColor);
|
| if (fType != SkPerlinNoiseShader::kFractalNoise_Type) {
|
| - builder->fsCodeAppend("abs(");
|
| + fsBuilder->codeAppend("abs(");
|
| }
|
| if (fStitchTiles) {
|
| - builder->fsCodeAppendf(
|
| + 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))",
|
| noiseFuncName.c_str(), chanCoordR, noiseVec, stitchData,
|
| @@ -881,7 +882,7 @@ void GrGLPerlinNoise::emitCode(GrGLShaderBuilder* builder,
|
| noiseFuncName.c_str(), chanCoordB, noiseVec, stitchData,
|
| noiseFuncName.c_str(), chanCoordA, noiseVec, stitchData);
|
| } else {
|
| - builder->fsCodeAppendf(
|
| + fsBuilder->codeAppendf(
|
| "vec4(\n\t\t\t\t%s(%s, %s),\n\t\t\t\t%s(%s, %s),"
|
| "\n\t\t\t\t%s(%s, %s),\n\t\t\t\t%s(%s, %s))",
|
| noiseFuncName.c_str(), chanCoordR, noiseVec,
|
| @@ -890,31 +891,31 @@ void GrGLPerlinNoise::emitCode(GrGLShaderBuilder* builder,
|
| noiseFuncName.c_str(), chanCoordA, noiseVec);
|
| }
|
| if (fType != SkPerlinNoiseShader::kFractalNoise_Type) {
|
| - builder->fsCodeAppendf(")"); // end of "abs("
|
| + fsBuilder->codeAppendf(")"); // end of "abs("
|
| }
|
| - builder->fsCodeAppendf(" * %s;", ratio);
|
| + fsBuilder->codeAppendf(" * %s;", ratio);
|
|
|
| - builder->fsCodeAppendf("\n\t\t\t%s *= vec2(2.0);", noiseVec);
|
| - builder->fsCodeAppendf("\n\t\t\t%s *= 0.5;", ratio);
|
| + fsBuilder->codeAppendf("\n\t\t\t%s *= vec2(2.0);", noiseVec);
|
| + fsBuilder->codeAppendf("\n\t\t\t%s *= 0.5;", ratio);
|
|
|
| if (fStitchTiles) {
|
| - builder->fsCodeAppendf("\n\t\t\t%s *= vec2(2.0);", stitchData);
|
| + fsBuilder->codeAppendf("\n\t\t\t%s *= vec2(2.0);", stitchData);
|
| }
|
| - builder->fsCodeAppend("\n\t\t}"); // end of the for loop on octaves
|
| + fsBuilder->codeAppend("\n\t\t}"); // end of the for loop on octaves
|
|
|
| if (fType == SkPerlinNoiseShader::kFractalNoise_Type) {
|
| // The value of turbulenceFunctionResult comes from ((turbulenceFunctionResult) + 1) / 2
|
| // by fractalNoise and (turbulenceFunctionResult) by turbulence.
|
| - builder->fsCodeAppendf("\n\t\t%s = %s * vec4(0.5) + vec4(0.5);", outputColor, outputColor);
|
| + fsBuilder->codeAppendf("\n\t\t%s = %s * vec4(0.5) + vec4(0.5);", outputColor, outputColor);
|
| }
|
|
|
| - builder->fsCodeAppendf("\n\t\t%s.a *= %s;", outputColor, alphaUni);
|
| + fsBuilder->codeAppendf("\n\t\t%s.a *= %s;", outputColor, alphaUni);
|
|
|
| // Clamp values
|
| - builder->fsCodeAppendf("\n\t\t%s = clamp(%s, 0.0, 1.0);", outputColor, outputColor);
|
| + fsBuilder->codeAppendf("\n\t\t%s = clamp(%s, 0.0, 1.0);", outputColor, outputColor);
|
|
|
| // Pre-multiply the result
|
| - builder->fsCodeAppendf("\n\t\t%s = vec4(%s.rgb * %s.aaa, %s.a);\n",
|
| + fsBuilder->codeAppendf("\n\t\t%s = vec4(%s.rgb * %s.aaa, %s.a);\n",
|
| outputColor, outputColor, outputColor, outputColor);
|
| }
|
|
|
|
|