diff options
author | Ethan Nicholas <ethannicholas@google.com> | 2017-06-19 11:25:00 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-06-19 16:09:13 +0000 |
commit | c352f3b89a28fd06bf9b124bfc960d9581949716 (patch) | |
tree | 655965874d4aa72cf192f0656df063e7e1604523 /src/shaders/SkPerlinNoiseShader.cpp | |
parent | d6e6e6699a85c6ed79e7d3b01e30d19e361ae049 (diff) |
fixed improved perlin noise effect on ANGLE
Bug: skia:6772
Change-Id: Id674d7f20ccd32fb79005d66351b5c49c51b3c90
Reviewed-on: https://skia-review.googlesource.com/20224
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Diffstat (limited to 'src/shaders/SkPerlinNoiseShader.cpp')
-rw-r--r-- | src/shaders/SkPerlinNoiseShader.cpp | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/src/shaders/SkPerlinNoiseShader.cpp b/src/shaders/SkPerlinNoiseShader.cpp index 54d8483a1b..13a1c38d3f 100644 --- a/src/shaders/SkPerlinNoiseShader.cpp +++ b/src/shaders/SkPerlinNoiseShader.cpp @@ -1084,7 +1084,6 @@ protected: private: GrGLSLProgramDataManager::UniformHandle fZUni; - GrGLSLProgramDataManager::UniformHandle fOctavesUni; GrGLSLProgramDataManager::UniformHandle fBaseFrequencyUni; typedef GrGLSLFragmentProcessor INHERITED; @@ -1180,6 +1179,7 @@ sk_sp<GrFragmentProcessor> GrImprovedPerlinNoiseEffect::TestCreate(GrProcessorTe #endif void GrGLImprovedPerlinNoise::emitCode(EmitArgs& args) { + const GrImprovedPerlinNoiseEffect& pne = args.fFp.cast<GrImprovedPerlinNoiseEffect>(); GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder; GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; SkString vCoords = fragBuilder->ensureCoords2D(args.fTransformedCoords[0]); @@ -1189,11 +1189,6 @@ void GrGLImprovedPerlinNoise::emitCode(EmitArgs& args) { "baseFrequency"); const char* baseFrequencyUni = uniformHandler->getUniformCStr(fBaseFrequencyUni); - fOctavesUni = uniformHandler->addUniform(kFragment_GrShaderFlag, - kFloat_GrSLType, kDefault_GrSLPrecision, - "octaves"); - const char* octavesUni = uniformHandler->getUniformCStr(fOctavesUni); - fZUni = uniformHandler->addUniform(kFragment_GrShaderFlag, kFloat_GrSLType, kDefault_GrSLPrecision, "z"); @@ -1285,14 +1280,13 @@ void GrGLImprovedPerlinNoise::emitCode(EmitArgs& args) { // noiseOctaves function static const GrShaderVar noiseOctavesArgs[] = { - GrShaderVar("p", kVec3f_GrSLType), - GrShaderVar("octaves", kFloat_GrSLType), + GrShaderVar("p", kVec3f_GrSLType) }; SkString noiseOctavesFuncName; SkString noiseOctavesCode; noiseOctavesCode.append("float result = 0.0;"); noiseOctavesCode.append("float ratio = 1.0;"); - noiseOctavesCode.append("for (float i = 0.0; i < octaves; i++) {"); + noiseOctavesCode.appendf("for (float i = 0.0; i < %d; i++) {", pne.octaves()); noiseOctavesCode.appendf("result += %s(p) / ratio;", noiseFuncName.c_str()); noiseOctavesCode.append("p *= 2.0;"); noiseOctavesCode.append("ratio *= 2.0;"); @@ -1302,14 +1296,14 @@ void GrGLImprovedPerlinNoise::emitCode(EmitArgs& args) { noiseOctavesArgs, noiseOctavesCode.c_str(), &noiseOctavesFuncName); fragBuilder->codeAppendf("vec2 coords = %s * %s;", vCoords.c_str(), baseFrequencyUni); - fragBuilder->codeAppendf("float r = %s(vec3(coords, %s), %s);", noiseOctavesFuncName.c_str(), - zUni, octavesUni); - fragBuilder->codeAppendf("float g = %s(vec3(coords, %s + 0000.0), %s);", - noiseOctavesFuncName.c_str(), zUni, octavesUni); - fragBuilder->codeAppendf("float b = %s(vec3(coords, %s + 0000.0), %s);", - noiseOctavesFuncName.c_str(), zUni, octavesUni); - fragBuilder->codeAppendf("float a = %s(vec3(coords, %s + 0000.0), %s);", - noiseOctavesFuncName.c_str(), zUni, octavesUni); + fragBuilder->codeAppendf("float r = %s(vec3(coords, %s));", noiseOctavesFuncName.c_str(), + zUni); + fragBuilder->codeAppendf("float g = %s(vec3(coords, %s + 0000.0));", + noiseOctavesFuncName.c_str(), zUni); + fragBuilder->codeAppendf("float b = %s(vec3(coords, %s + 0000.0));", + noiseOctavesFuncName.c_str(), zUni); + fragBuilder->codeAppendf("float a = %s(vec3(coords, %s + 0000.0));", + noiseOctavesFuncName.c_str(), zUni); fragBuilder->codeAppendf("%s = vec4(r, g, b, a);", args.fOutputColor); // Clamp values @@ -1323,6 +1317,8 @@ void GrGLImprovedPerlinNoise::emitCode(EmitArgs& args) { void GrGLImprovedPerlinNoise::GenKey(const GrProcessor& processor, const GrShaderCaps&, GrProcessorKeyBuilder* b) { + const GrImprovedPerlinNoiseEffect& pne = processor.cast<GrImprovedPerlinNoiseEffect>(); + b->add32(pne.octaves()); } void GrGLImprovedPerlinNoise::onSetData(const GrGLSLProgramDataManager& pdman, @@ -1334,8 +1330,6 @@ void GrGLImprovedPerlinNoise::onSetData(const GrGLSLProgramDataManager& pdman, const SkVector& baseFrequency = noise.baseFrequency(); pdman.set2f(fBaseFrequencyUni, baseFrequency.fX, baseFrequency.fY); - pdman.set1f(fOctavesUni, SkIntToScalar(noise.octaves())); - pdman.set1f(fZUni, noise.z()); } |