Merge "Update RuntimeShader users to new setUniform APIs"

This commit is contained in:
Derek Sollenberger
2022-01-10 16:36:28 +00:00
committed by Android (Google) Code Review
7 changed files with 64 additions and 111 deletions

View File

@@ -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) {

View File

@@ -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);
}
}

View File

@@ -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)
}
}

View File

@@ -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

View File

@@ -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();
}

View File

@@ -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

View File

@@ -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));