From e26e8c7ba99ad921052aa060356d27dac93dce36 Mon Sep 17 00:00:00 2001 From: Derek Sollenberger Date: Thu, 16 Dec 2021 18:41:25 +0000 Subject: [PATCH] Update RuntimeShader users to new setUniform APIs Remove the deprecated setUniform APIs and replace with the newly public setFloatUniform APIs Bug: 189102731 Bug: 201546136 Test: atest CtsUiRenderingTestCases:RuntimeShaderTests Change-Id: I627d5d7617b2a838a5d0c049f6fa1c2a5763e11f --- .../java/android/graphics/RuntimeShader.java | 30 --------- .../graphics/drawable/RippleShader.java | 61 ++++++++----------- .../statusbar/charging/DwellRippleShader.kt | 21 +++---- .../statusbar/charging/RippleShader.kt | 33 +++++----- .../test/hwui/ColorFiltersMutateActivity.java | 4 +- .../com/android/test/hwui/RippleActivity.java | 2 +- .../test/hwui/StretchShaderActivity.java | 24 ++++---- 7 files changed, 64 insertions(+), 111 deletions(-) diff --git a/graphics/java/android/graphics/RuntimeShader.java b/graphics/java/android/graphics/RuntimeShader.java index 9ca8e3b463178..ef57f4a76007d 100644 --- a/graphics/java/android/graphics/RuntimeShader.java +++ b/graphics/java/android/graphics/RuntimeShader.java @@ -178,36 +178,6 @@ public class RuntimeShader extends Shader { setUniform(uniformName, values, false); } - /** - * Old method signature used by some callers within the platform code - * @hide - * @deprecated use setFloatUniform instead - */ - @Deprecated - public void setUniform(@NonNull String uniformName, float[] values) { - setFloatUniform(uniformName, values); - } - - /** - * Old method signature used by some callers within the platform code - * @hide - * @deprecated use setFloatUniform instead - */ - @Deprecated - public void setUniform(@NonNull String uniformName, float value) { - setFloatUniform(uniformName, value); - } - - /** - * Old method signature used by some callers within the platform code - * @hide - * @deprecated use setFloatUniform instead - */ - @Deprecated - public void setUniform(@NonNull String uniformName, float value1, float value2) { - setFloatUniform(uniformName, value1, value2); - } - private void setFloatUniform(@NonNull String uniformName, float value1, float value2, float value3, float value4, int count) { if (uniformName == null) { diff --git a/graphics/java/android/graphics/drawable/RippleShader.java b/graphics/java/android/graphics/drawable/RippleShader.java index 272b840219c22..53a6731220406 100644 --- a/graphics/java/android/graphics/drawable/RippleShader.java +++ b/graphics/java/android/graphics/drawable/RippleShader.java @@ -17,7 +17,6 @@ package android.graphics.drawable; import android.annotation.ColorInt; -import android.graphics.Color; import android.graphics.RuntimeShader; import android.graphics.Shader; @@ -37,8 +36,8 @@ final class RippleShader extends RuntimeShader { + "uniform vec2 in_tRotation1;\n" + "uniform vec2 in_tRotation2;\n" + "uniform vec2 in_tRotation3;\n" - + "uniform vec4 in_color;\n" - + "uniform vec4 in_sparkleColor;\n" + + "layout(color) uniform vec4 in_color;\n" + + "layout(color) uniform vec4 in_sparkleColor;\n" + "uniform shader in_shader;\n"; private static final String SHADER_LIB = "float triangleNoise(vec2 n) {\n" @@ -134,78 +133,68 @@ final class RippleShader extends RuntimeShader { if (shader != null) { setInputShader("in_shader", shader); } - setUniform("in_hasMask", shader == null ? 0 : 1); + setFloatUniform("in_hasMask", shader == null ? 0 : 1); } public void setRadius(float radius) { - setUniform("in_maxRadius", radius * 2.3f); + setFloatUniform("in_maxRadius", radius * 2.3f); } public void setOrigin(float x, float y) { - setUniform("in_origin", new float[] {x, y}); + setFloatUniform("in_origin", x, y); } public void setTouch(float x, float y) { - setUniform("in_touch", new float[] {x, y}); + setFloatUniform("in_touch", x, y); } public void setProgress(float progress) { - setUniform("in_progress", progress); + setFloatUniform("in_progress", progress); } /** * Continuous offset used as noise phase. */ public void setNoisePhase(float phase) { - setUniform("in_noisePhase", phase * 0.001f); + setFloatUniform("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); + setFloatUniform("in_turbulencePhase", turbulencePhase); final float scale = 1.5f; - setUniform("in_tCircle1", new float[]{ + setFloatUniform("in_tCircle1", (float) (scale * 0.5 + (turbulencePhase * 0.01 * Math.cos(scale * 0.55))), - (float) (scale * 0.5 + (turbulencePhase * 0.01 * Math.sin(scale * 0.55))) - }); - setUniform("in_tCircle2", new float[]{ + (float) (scale * 0.5 + (turbulencePhase * 0.01 * Math.sin(scale * 0.55)))); + setFloatUniform("in_tCircle2", (float) (scale * 0.2 + (turbulencePhase * -0.0066 * Math.cos(scale * 0.45))), - (float) (scale * 0.2 + (turbulencePhase * -0.0066 * Math.sin(scale * 0.45))) - }); - setUniform("in_tCircle3", new float[]{ + (float) (scale * 0.2 + (turbulencePhase * -0.0066 * Math.sin(scale * 0.45)))); + setFloatUniform("in_tCircle3", (float) (scale + (turbulencePhase * -0.0066 * Math.cos(scale * 0.35))), - (float) (scale + (turbulencePhase * -0.0066 * Math.sin(scale * 0.35))) - }); + (float) (scale + (turbulencePhase * -0.0066 * Math.sin(scale * 0.35)))); final double rotation1 = turbulencePhase * PI_ROTATE_RIGHT + 1.7 * Math.PI; - setUniform("in_tRotation1", new float[]{ - (float) Math.cos(rotation1), (float) Math.sin(rotation1) - }); + setFloatUniform("in_tRotation1", + (float) Math.cos(rotation1), (float) Math.sin(rotation1)); final double rotation2 = turbulencePhase * PI_ROTATE_LEFT + 2 * Math.PI; - setUniform("in_tRotation2", new float[]{ - (float) Math.cos(rotation2), (float) Math.sin(rotation2) - }); + setFloatUniform("in_tRotation2", + (float) Math.cos(rotation2), (float) Math.sin(rotation2)); final double rotation3 = turbulencePhase * PI_ROTATE_RIGHT + 2.75 * Math.PI; - setUniform("in_tRotation3", new float[]{ - (float) Math.cos(rotation3), (float) Math.sin(rotation3) - }); + setFloatUniform("in_tRotation3", + (float) Math.cos(rotation3), (float) Math.sin(rotation3)); } /** * Color of the circle that's under the sparkles. Sparkles will always be white. */ public void setColor(@ColorInt int colorInt, @ColorInt int sparkleColorInt) { - Color color = Color.valueOf(colorInt); - Color sparkleColor = Color.valueOf(sparkleColorInt); - setUniform("in_color", new float[] {color.red(), - color.green(), color.blue(), color.alpha()}); - setUniform("in_sparkleColor", new float[] {sparkleColor.red(), - sparkleColor.green(), sparkleColor.blue(), sparkleColor.alpha()}); + setColorUniform("in_color", colorInt); + setColorUniform("in_sparkleColor", sparkleColorInt); } public void setResolution(float w, float h) { final float densityScale = 2.1f; - setUniform("in_resolutionScale", new float[] {1f / w, 1f / h}); - setUniform("in_noiseScale", new float[] {densityScale / w, densityScale / h}); + setFloatUniform("in_resolutionScale", 1f / w, 1f / h); + setFloatUniform("in_noiseScale", densityScale / w, densityScale / h); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/charging/DwellRippleShader.kt b/packages/SystemUI/src/com/android/systemui/statusbar/charging/DwellRippleShader.kt index 73d3e2afac7ca..8dc01f0141920 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/charging/DwellRippleShader.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/charging/DwellRippleShader.kt @@ -16,7 +16,6 @@ package com.android.systemui.statusbar.charging -import android.graphics.Color import android.graphics.PointF import android.graphics.RuntimeShader import android.util.MathUtils @@ -40,7 +39,7 @@ class DwellRippleShader internal constructor() : RuntimeShader(SHADER, false) { uniform float in_time; uniform float in_radius; uniform float in_blur; - uniform vec4 in_color; + layout(color) uniform vec4 in_color; uniform float in_phase1; uniform float in_phase2; uniform float in_distortion_strength;""" @@ -98,7 +97,7 @@ class DwellRippleShader internal constructor() : RuntimeShader(SHADER, false) { var origin: PointF = PointF() set(value) { field = value - setUniform("in_origin", floatArrayOf(value.x, value.y)) + setFloatUniform("in_origin", value.x, value.y) } /** @@ -107,9 +106,9 @@ class DwellRippleShader internal constructor() : RuntimeShader(SHADER, false) { var progress: Float = 0.0f set(value) { field = value - setUniform("in_radius", + setFloatUniform("in_radius", (1 - (1 - value) * (1 - value) * (1 - value))* maxRadius) - setUniform("in_blur", MathUtils.lerp(1f, 0.7f, value)) + setFloatUniform("in_blur", MathUtils.lerp(1f, 0.7f, value)) } /** @@ -118,7 +117,7 @@ class DwellRippleShader internal constructor() : RuntimeShader(SHADER, false) { var distortionStrength: Float = 0.0f set(value) { field = value - setUniform("in_distortion_strength", value) + setFloatUniform("in_distortion_strength", value) } /** @@ -127,9 +126,9 @@ class DwellRippleShader internal constructor() : RuntimeShader(SHADER, false) { var time: Float = 0.0f set(value) { field = value * 0.001f - setUniform("in_time", field) - setUniform("in_phase1", field * 3f + 0.367f) - setUniform("in_phase2", field * 7.2f * 1.531f) + setFloatUniform("in_time", field) + setFloatUniform("in_phase1", field * 3f + 0.367f) + setFloatUniform("in_phase2", field * 7.2f * 1.531f) } /** @@ -138,8 +137,6 @@ class DwellRippleShader internal constructor() : RuntimeShader(SHADER, false) { var color: Int = 0xffffff.toInt() set(value) { field = value - val color = Color.valueOf(value) - setUniform("in_color", floatArrayOf(color.red(), - color.green(), color.blue(), color.alpha())) + setColorUniform("in_color", value) } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/charging/RippleShader.kt b/packages/SystemUI/src/com/android/systemui/statusbar/charging/RippleShader.kt index 5175977d4e81b..22fbf9139f1d6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/charging/RippleShader.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/charging/RippleShader.kt @@ -15,7 +15,6 @@ */ package com.android.systemui.statusbar.charging -import android.graphics.Color import android.graphics.PointF import android.graphics.RuntimeShader import android.util.MathUtils @@ -43,7 +42,7 @@ class RippleShader internal constructor() : RuntimeShader(SHADER, false) { uniform float in_fadeRing; uniform float in_blur; uniform float in_pixelDensity; - uniform vec4 in_color; + layout(color) uniform vec4 in_color; uniform float in_sparkle_strength;""" private const val SHADER_LIB = """float triangleNoise(vec2 n) { n = fract(n * vec2(5.3987, 5.4421)); @@ -122,7 +121,7 @@ class RippleShader internal constructor() : RuntimeShader(SHADER, false) { var radius: Float = 0.0f set(value) { field = value - setUniform("in_maxRadius", value) + setFloatUniform("in_maxRadius", value) } /** @@ -131,7 +130,7 @@ class RippleShader internal constructor() : RuntimeShader(SHADER, false) { var origin: PointF = PointF() set(value) { field = value - setUniform("in_origin", floatArrayOf(value.x, value.y)) + setFloatUniform("in_origin", value.x, value.y) } /** @@ -140,10 +139,10 @@ class RippleShader internal constructor() : RuntimeShader(SHADER, false) { var progress: Float = 0.0f set(value) { field = value - setUniform("in_progress", value) - setUniform("in_radius", + setFloatUniform("in_progress", value) + setFloatUniform("in_radius", (1 - (1 - value) * (1 - value) * (1 - value))* radius) - setUniform("in_blur", MathUtils.lerp(1.25f, 0.5f, value)) + setFloatUniform("in_blur", MathUtils.lerp(1.25f, 0.5f, value)) val fadeIn = subProgress(0f, 0.1f, value) val fadeOutNoise = subProgress(0.4f, 1f, value) @@ -153,9 +152,9 @@ class RippleShader internal constructor() : RuntimeShader(SHADER, false) { fadeCircle = subProgress(0f, 0.2f, value) fadeOutRipple = subProgress(0.3f, 1f, value) } - setUniform("in_fadeSparkle", Math.min(fadeIn, 1 - fadeOutNoise)) - setUniform("in_fadeCircle", 1 - fadeCircle) - setUniform("in_fadeRing", Math.min(fadeIn, 1 - fadeOutRipple)) + setFloatUniform("in_fadeSparkle", Math.min(fadeIn, 1 - fadeOutNoise)) + setFloatUniform("in_fadeCircle", 1 - fadeCircle) + setFloatUniform("in_fadeRing", Math.min(fadeIn, 1 - fadeOutRipple)) } /** @@ -164,7 +163,7 @@ class RippleShader internal constructor() : RuntimeShader(SHADER, false) { var time: Float = 0.0f set(value) { field = value - setUniform("in_time", value) + setFloatUniform("in_time", value) } /** @@ -173,9 +172,7 @@ class RippleShader internal constructor() : RuntimeShader(SHADER, false) { var color: Int = 0xffffff.toInt() set(value) { field = value - val color = Color.valueOf(value) - setUniform("in_color", floatArrayOf(color.red(), - color.green(), color.blue(), color.alpha())) + setColorUniform("in_color", value) } /** @@ -186,7 +183,7 @@ class RippleShader internal constructor() : RuntimeShader(SHADER, false) { var sparkleStrength: Float = 0.0f set(value) { field = value - setUniform("in_sparkle_strength", value) + setFloatUniform("in_sparkle_strength", value) } /** @@ -195,14 +192,14 @@ class RippleShader internal constructor() : RuntimeShader(SHADER, false) { var distortionStrength: Float = 0.0f set(value) { field = value - setUniform("in_distort_radial", 75 * progress * value) - setUniform("in_distort_xy", 75 * value) + setFloatUniform("in_distort_radial", 75 * progress * value) + setFloatUniform("in_distort_xy", 75 * value) } var pixelDensity: Float = 1.0f set(value) { field = value - setUniform("in_pixelDensity", value) + setFloatUniform("in_pixelDensity", value) } var shouldFadeOutRipple: Boolean = true diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ColorFiltersMutateActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ColorFiltersMutateActivity.java index 46d3a3d669c0d..65d168bd52385 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/ColorFiltersMutateActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ColorFiltersMutateActivity.java @@ -84,7 +84,7 @@ public class ColorFiltersMutateActivity extends Activity { mBlendPaint.setColorFilter(new PorterDuffColorFilter(0, PorterDuff.Mode.SRC_OVER)); mRuntimeShader = new RuntimeShader(sSkSL, false); - mRuntimeShader.setUniform("param1", mShaderParam1); + mRuntimeShader.setFloatUniform("param1", mShaderParam1); mRuntimeShader.setInputShader("bitmapShader", new BitmapShader(mBitmap1, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP)); @@ -177,7 +177,7 @@ public class ColorFiltersMutateActivity extends Activity { public void setShaderParam1(float value) { mShaderParam1 = value; - mRuntimeShader.setUniform("param1", mShaderParam1); + mRuntimeShader.setFloatUniform("param1", mShaderParam1); invalidate(); } diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/RippleActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/RippleActivity.java index 83e2de925cebb..73c4b8af99dea 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/RippleActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/RippleActivity.java @@ -110,7 +110,7 @@ public class RippleActivity extends Activity { mPaint = CanvasProperty.createPaint(p); mRuntimeShader = new RuntimeShader(sSkSL, false); - mRuntimeShader.setUniform("in_maxRadius", MAX_RADIUS); + mRuntimeShader.setFloatUniform("in_maxRadius", MAX_RADIUS); } @Override diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/StretchShaderActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/StretchShaderActivity.java index fcdee63a99a8c..12e338c96aea8 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/StretchShaderActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/StretchShaderActivity.java @@ -357,18 +357,18 @@ public class StretchShaderActivity extends Activity { float uScrollX = mScrollX; float uScrollY = mScrollY; - mRuntimeShader.setUniform("uMaxStretchIntensity", mMaxStretchIntensity); - mRuntimeShader.setUniform("uStretchAffectedDist", mStretchAffectedDistance); - mRuntimeShader.setUniform("uDistanceStretchedX", distanceStretchedX); - mRuntimeShader.setUniform("uDistanceStretchedY", distanceStretchedY); - mRuntimeShader.setUniform("uDistDiffX", diffX); - mRuntimeShader.setUniform("uDistDiffY", diffY); - mRuntimeShader.setUniform("uOverscrollX", normOverScrollDistX); - mRuntimeShader.setUniform("uOverscrollY", normOverScrollDistY); - mRuntimeShader.setUniform("uScrollX", uScrollX); - mRuntimeShader.setUniform("uScrollY", uScrollY); - mRuntimeShader.setUniform("viewportWidth", width); - mRuntimeShader.setUniform("viewportHeight", height); + mRuntimeShader.setFloatUniform("uMaxStretchIntensity", mMaxStretchIntensity); + mRuntimeShader.setFloatUniform("uStretchAffectedDist", mStretchAffectedDistance); + mRuntimeShader.setFloatUniform("uDistanceStretchedX", distanceStretchedX); + mRuntimeShader.setFloatUniform("uDistanceStretchedY", distanceStretchedY); + mRuntimeShader.setFloatUniform("uDistDiffX", diffX); + mRuntimeShader.setFloatUniform("uDistDiffY", diffY); + mRuntimeShader.setFloatUniform("uOverscrollX", normOverScrollDistX); + mRuntimeShader.setFloatUniform("uOverscrollY", normOverScrollDistY); + mRuntimeShader.setFloatUniform("uScrollX", uScrollX); + mRuntimeShader.setFloatUniform("uScrollY", uScrollY); + mRuntimeShader.setFloatUniform("viewportWidth", width); + mRuntimeShader.setFloatUniform("viewportHeight", height); mImageView.setRenderEffect(RenderEffect.createShaderEffect(mRuntimeShader));