Loading graphics/java/android/graphics/drawable/RippleShader.java +14 −22 Original line number Diff line number Diff line Loading @@ -50,15 +50,17 @@ final class RippleShader extends RuntimeShader { + "}" + "const float PI = 3.1415926535897932384626;\n" + "\n" + "float threshold(float v, float l, float h) {\n" + " return step(l, v) * (1.0 - step(h, v));\n" + "}\n" + "float sparkles(vec2 uv, float t) {\n" + " float n = triangleNoise(uv);\n" + " float s = 0.0;\n" + " for (float i = 0; i < 4; i += 1) {\n" + " float l = i * 0.01;\n" + " float h = l + 0.2;\n" + " float o = smoothstep(n - l, h, n);\n" + " o *= abs(sin(PI * o * (t + 0.55 * i)));\n" + " s += o;\n" + " float l = i * 0.1;\n" + " float h = l + 0.025;\n" + " float o = sin(PI * (t + 0.35 * i));\n" + " s += threshold(n + o, l, h);\n" + " }\n" + " return saturate(s) * in_sparkleColor.a;\n" + "}\n" Loading Loading @@ -125,9 +127,6 @@ final class RippleShader extends RuntimeShader { private static final double PI_ROTATE_RIGHT = Math.PI * 0.0078125; private static final double PI_ROTATE_LEFT = Math.PI * -0.0078125; private float mNoisePhase; private float mProgress; RippleShader() { super(SHADER, false); } Loading @@ -143,15 +142,6 @@ final class RippleShader extends RuntimeShader { setUniform("in_maxRadius", radius); } /** * Continuous offset used as noise phase. */ public void setNoisePhase(float phase) { mNoisePhase = phase; setUniform("in_noisePhase", phase); updateTurbulence(); } public void setOrigin(float x, float y) { setUniform("in_origin", new float[] {x, y}); } Loading @@ -161,18 +151,20 @@ final class RippleShader extends RuntimeShader { } public void setProgress(float progress) { mProgress = progress; setUniform("in_progress", progress); updateTurbulence(); } private void updateTurbulence() { final float turbulencePhase = (float) ((mProgress + mNoisePhase * 0.333f) * 5f * Math.PI); setUniform("in_turbulencePhase", turbulencePhase); /** * Continuous offset used as noise phase. */ public void setNoisePhase(float phase) { setUniform("in_noisePhase", phase * 0.001f); // // Keep in sync with: frameworks/base/libs/hwui/pipeline/skia/AnimatedDrawables.h // final float turbulencePhase = phase; setUniform("in_turbulencePhase", turbulencePhase); final float scale = 1.5f; setUniform("in_tCircle1", new float[]{ (float) (scale * 0.5 + (turbulencePhase * 0.01 * Math.cos(scale * 0.55))), Loading libs/hwui/pipeline/skia/AnimatedDrawables.h +12 −4 Original line number Diff line number Diff line Loading @@ -77,6 +77,7 @@ public: setUniform(effectBuilder, "in_radius", params.radius); setUniform(effectBuilder, "in_progress", params.progress); setUniform(effectBuilder, "in_turbulencePhase", params.turbulencePhase); setUniform(effectBuilder, "in_noisePhase", params.turbulencePhase->value * 0.001); SkRuntimeShaderBuilder::BuilderUniform uniform = effectBuilder.uniform("in_color"); if (uniform.fVar != nullptr) { Loading Loading @@ -120,17 +121,24 @@ private: static constexpr float PI_ROTATE_LEFT = PI * -0.0078125; static constexpr float SCALE = 1.5; static void setUniform(SkRuntimeShaderBuilder& effectBuilder, std::string name, static void setUniform(SkRuntimeShaderBuilder& effectBuilder, const char* name, sp<uirenderer::CanvasPropertyPrimitive> property) { SkRuntimeShaderBuilder::BuilderUniform uniform = effectBuilder.uniform(name.c_str()); SkRuntimeShaderBuilder::BuilderUniform uniform = effectBuilder.uniform(name); if (uniform.fVar != nullptr) { uniform = property->value; } } static void setUniform2f(SkRuntimeShaderBuilder& effectBuilder, std::string name, float a, static void setUniform(SkRuntimeShaderBuilder& effectBuilder, const char* name, float value) { SkRuntimeShaderBuilder::BuilderUniform uniform = effectBuilder.uniform(name); if (uniform.fVar != nullptr) { uniform = value; } } static void setUniform2f(SkRuntimeShaderBuilder& effectBuilder, const char* name, float a, float b) { SkRuntimeShaderBuilder::BuilderUniform uniform = effectBuilder.uniform(name.c_str()); SkRuntimeShaderBuilder::BuilderUniform uniform = effectBuilder.uniform(name); if (uniform.fVar != nullptr) { uniform = SkV2{a, b}; } Loading Loading
graphics/java/android/graphics/drawable/RippleShader.java +14 −22 Original line number Diff line number Diff line Loading @@ -50,15 +50,17 @@ final class RippleShader extends RuntimeShader { + "}" + "const float PI = 3.1415926535897932384626;\n" + "\n" + "float threshold(float v, float l, float h) {\n" + " return step(l, v) * (1.0 - step(h, v));\n" + "}\n" + "float sparkles(vec2 uv, float t) {\n" + " float n = triangleNoise(uv);\n" + " float s = 0.0;\n" + " for (float i = 0; i < 4; i += 1) {\n" + " float l = i * 0.01;\n" + " float h = l + 0.2;\n" + " float o = smoothstep(n - l, h, n);\n" + " o *= abs(sin(PI * o * (t + 0.55 * i)));\n" + " s += o;\n" + " float l = i * 0.1;\n" + " float h = l + 0.025;\n" + " float o = sin(PI * (t + 0.35 * i));\n" + " s += threshold(n + o, l, h);\n" + " }\n" + " return saturate(s) * in_sparkleColor.a;\n" + "}\n" Loading Loading @@ -125,9 +127,6 @@ final class RippleShader extends RuntimeShader { private static final double PI_ROTATE_RIGHT = Math.PI * 0.0078125; private static final double PI_ROTATE_LEFT = Math.PI * -0.0078125; private float mNoisePhase; private float mProgress; RippleShader() { super(SHADER, false); } Loading @@ -143,15 +142,6 @@ final class RippleShader extends RuntimeShader { setUniform("in_maxRadius", radius); } /** * Continuous offset used as noise phase. */ public void setNoisePhase(float phase) { mNoisePhase = phase; setUniform("in_noisePhase", phase); updateTurbulence(); } public void setOrigin(float x, float y) { setUniform("in_origin", new float[] {x, y}); } Loading @@ -161,18 +151,20 @@ final class RippleShader extends RuntimeShader { } public void setProgress(float progress) { mProgress = progress; setUniform("in_progress", progress); updateTurbulence(); } private void updateTurbulence() { final float turbulencePhase = (float) ((mProgress + mNoisePhase * 0.333f) * 5f * Math.PI); setUniform("in_turbulencePhase", turbulencePhase); /** * Continuous offset used as noise phase. */ public void setNoisePhase(float phase) { setUniform("in_noisePhase", phase * 0.001f); // // Keep in sync with: frameworks/base/libs/hwui/pipeline/skia/AnimatedDrawables.h // final float turbulencePhase = phase; setUniform("in_turbulencePhase", turbulencePhase); final float scale = 1.5f; setUniform("in_tCircle1", new float[]{ (float) (scale * 0.5 + (turbulencePhase * 0.01 * Math.cos(scale * 0.55))), Loading
libs/hwui/pipeline/skia/AnimatedDrawables.h +12 −4 Original line number Diff line number Diff line Loading @@ -77,6 +77,7 @@ public: setUniform(effectBuilder, "in_radius", params.radius); setUniform(effectBuilder, "in_progress", params.progress); setUniform(effectBuilder, "in_turbulencePhase", params.turbulencePhase); setUniform(effectBuilder, "in_noisePhase", params.turbulencePhase->value * 0.001); SkRuntimeShaderBuilder::BuilderUniform uniform = effectBuilder.uniform("in_color"); if (uniform.fVar != nullptr) { Loading Loading @@ -120,17 +121,24 @@ private: static constexpr float PI_ROTATE_LEFT = PI * -0.0078125; static constexpr float SCALE = 1.5; static void setUniform(SkRuntimeShaderBuilder& effectBuilder, std::string name, static void setUniform(SkRuntimeShaderBuilder& effectBuilder, const char* name, sp<uirenderer::CanvasPropertyPrimitive> property) { SkRuntimeShaderBuilder::BuilderUniform uniform = effectBuilder.uniform(name.c_str()); SkRuntimeShaderBuilder::BuilderUniform uniform = effectBuilder.uniform(name); if (uniform.fVar != nullptr) { uniform = property->value; } } static void setUniform2f(SkRuntimeShaderBuilder& effectBuilder, std::string name, float a, static void setUniform(SkRuntimeShaderBuilder& effectBuilder, const char* name, float value) { SkRuntimeShaderBuilder::BuilderUniform uniform = effectBuilder.uniform(name); if (uniform.fVar != nullptr) { uniform = value; } } static void setUniform2f(SkRuntimeShaderBuilder& effectBuilder, const char* name, float a, float b) { SkRuntimeShaderBuilder::BuilderUniform uniform = effectBuilder.uniform(name.c_str()); SkRuntimeShaderBuilder::BuilderUniform uniform = effectBuilder.uniform(name); if (uniform.fVar != nullptr) { uniform = SkV2{a, b}; } Loading