Merge "Support rendering white pixels." into sc-qpr1-dev am: e2f4ad3e7b
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15676845 Change-Id: Idc0b67471d5a4822c004933443a2c996fff6939c
This commit is contained in:
@@ -127,6 +127,7 @@ static const char VERTEX_SHADER_SOURCE[] = R"(
|
|||||||
})";
|
})";
|
||||||
static const char IMAGE_FRAG_DYNAMIC_COLORING_SHADER_SOURCE[] = R"(
|
static const char IMAGE_FRAG_DYNAMIC_COLORING_SHADER_SOURCE[] = R"(
|
||||||
precision mediump float;
|
precision mediump float;
|
||||||
|
const float cWhiteMaskThreshold = 0.05f;
|
||||||
uniform sampler2D uTexture;
|
uniform sampler2D uTexture;
|
||||||
uniform float uFade;
|
uniform float uFade;
|
||||||
uniform float uColorProgress;
|
uniform float uColorProgress;
|
||||||
@@ -141,10 +142,20 @@ static const char IMAGE_FRAG_DYNAMIC_COLORING_SHADER_SOURCE[] = R"(
|
|||||||
varying highp vec2 vUv;
|
varying highp vec2 vUv;
|
||||||
void main() {
|
void main() {
|
||||||
vec4 mask = texture2D(uTexture, vUv);
|
vec4 mask = texture2D(uTexture, vUv);
|
||||||
vec4 color = mask.r * mix(uStartColor0, uEndColor0, uColorProgress)
|
float r = mask.r;
|
||||||
+ mask.g * mix(uStartColor1, uEndColor1, uColorProgress)
|
float g = mask.g;
|
||||||
+ mask.b * mix(uStartColor2, uEndColor2, uColorProgress)
|
float b = mask.b;
|
||||||
+ mask.a * mix(uStartColor3, uEndColor3, uColorProgress);
|
float a = mask.a;
|
||||||
|
// If all channels have values, render pixel as a shade of white.
|
||||||
|
float useWhiteMask = step(cWhiteMaskThreshold, r)
|
||||||
|
* step(cWhiteMaskThreshold, g)
|
||||||
|
* step(cWhiteMaskThreshold, b)
|
||||||
|
* step(cWhiteMaskThreshold, a);
|
||||||
|
vec4 color = r * mix(uStartColor0, uEndColor0, uColorProgress)
|
||||||
|
+ g * mix(uStartColor1, uEndColor1, uColorProgress)
|
||||||
|
+ b * mix(uStartColor2, uEndColor2, uColorProgress)
|
||||||
|
+ a * mix(uStartColor3, uEndColor3, uColorProgress);
|
||||||
|
color = mix(color, vec4(vec3((r + g + b + a) * 0.25f), 1.0), useWhiteMask);
|
||||||
gl_FragColor = vec4(color.x, color.y, color.z, (1.0 - uFade)) * color.a;
|
gl_FragColor = vec4(color.x, color.y, color.z, (1.0 - uFade)) * color.a;
|
||||||
})";
|
})";
|
||||||
static const char IMAGE_FRAG_SHADER_SOURCE[] = R"(
|
static const char IMAGE_FRAG_SHADER_SOURCE[] = R"(
|
||||||
@@ -1077,6 +1088,8 @@ bool BootAnimation::parseAnimationDesc(Animation& animation) {
|
|||||||
int pause = 0;
|
int pause = 0;
|
||||||
int progress = 0;
|
int progress = 0;
|
||||||
int framesToFadeCount = 0;
|
int framesToFadeCount = 0;
|
||||||
|
int colorTransitionStart = 0;
|
||||||
|
int colorTransitionEnd = 0;
|
||||||
char path[ANIM_ENTRY_NAME_MAX];
|
char path[ANIM_ENTRY_NAME_MAX];
|
||||||
char color[7] = "000000"; // default to black if unspecified
|
char color[7] = "000000"; // default to black if unspecified
|
||||||
char clockPos1[TEXT_POS_LEN_MAX + 1] = "";
|
char clockPos1[TEXT_POS_LEN_MAX + 1] = "";
|
||||||
@@ -1102,14 +1115,17 @@ bool BootAnimation::parseAnimationDesc(Animation& animation) {
|
|||||||
} else {
|
} else {
|
||||||
animation.progressEnabled = false;
|
animation.progressEnabled = false;
|
||||||
}
|
}
|
||||||
} else if (sscanf(l, "dynamic_colors %" STRTO(ANIM_PATH_MAX) "s #%6s #%6s #%6s #%6s",
|
} else if (sscanf(l, "dynamic_colors %" STRTO(ANIM_PATH_MAX) "s #%6s #%6s #%6s #%6s %d %d",
|
||||||
dynamicColoringPartNameBuffer,
|
dynamicColoringPartNameBuffer,
|
||||||
start_color_0, start_color_1, start_color_2, start_color_3)) {
|
start_color_0, start_color_1, start_color_2, start_color_3,
|
||||||
|
&colorTransitionStart, &colorTransitionEnd)) {
|
||||||
animation.dynamicColoringEnabled = true;
|
animation.dynamicColoringEnabled = true;
|
||||||
parseColor(start_color_0, animation.startColors[0]);
|
parseColor(start_color_0, animation.startColors[0]);
|
||||||
parseColor(start_color_1, animation.startColors[1]);
|
parseColor(start_color_1, animation.startColors[1]);
|
||||||
parseColor(start_color_2, animation.startColors[2]);
|
parseColor(start_color_2, animation.startColors[2]);
|
||||||
parseColor(start_color_3, animation.startColors[3]);
|
parseColor(start_color_3, animation.startColors[3]);
|
||||||
|
animation.colorTransitionStart = colorTransitionStart;
|
||||||
|
animation.colorTransitionEnd = colorTransitionEnd;
|
||||||
dynamicColoringPartName = std::string(dynamicColoringPartNameBuffer);
|
dynamicColoringPartName = std::string(dynamicColoringPartNameBuffer);
|
||||||
} else if (sscanf(l, "%c %d %d %" STRTO(ANIM_PATH_MAX) "s%n",
|
} else if (sscanf(l, "%c %d %d %" STRTO(ANIM_PATH_MAX) "s%n",
|
||||||
&pathType, &count, &pause, path, &nextReadPos) >= 4) {
|
&pathType, &count, &pause, path, &nextReadPos) >= 4) {
|
||||||
@@ -1461,11 +1477,16 @@ bool BootAnimation::playAnimation(const Animation& animation) {
|
|||||||
if (shouldStopPlayingPart(part, fadedFramesCount, lastDisplayedProgress)) break;
|
if (shouldStopPlayingPart(part, fadedFramesCount, lastDisplayedProgress)) break;
|
||||||
|
|
||||||
// Color progress is
|
// Color progress is
|
||||||
// - the normalized animation progress between [0, 1] for the dynamic coloring part,
|
// - the animation progress, normalized from
|
||||||
|
// [colorTransitionStart,colorTransitionEnd] to [0, 1] for the dynamic coloring
|
||||||
|
// part.
|
||||||
// - 0 for parts that come before,
|
// - 0 for parts that come before,
|
||||||
// - 1 for parts that come after.
|
// - 1 for parts that come after.
|
||||||
float colorProgress = part.useDynamicColoring
|
float colorProgress = part.useDynamicColoring
|
||||||
? (float)j / fcount
|
? fmin(fmax(
|
||||||
|
((float)j - animation.colorTransitionStart) /
|
||||||
|
fmax(animation.colorTransitionEnd -
|
||||||
|
animation.colorTransitionStart, 1.0f), 0.0f), 1.0f)
|
||||||
: (part.postDynamicColoring ? 1 : 0);
|
: (part.postDynamicColoring ? 1 : 0);
|
||||||
|
|
||||||
processDisplayEvents();
|
processDisplayEvents();
|
||||||
|
|||||||
@@ -111,6 +111,8 @@ public:
|
|||||||
Font progressFont;
|
Font progressFont;
|
||||||
// Controls if dynamic coloring is enabled for the whole animation.
|
// Controls if dynamic coloring is enabled for the whole animation.
|
||||||
bool dynamicColoringEnabled = false;
|
bool dynamicColoringEnabled = false;
|
||||||
|
int colorTransitionStart = 0; // Start frame of dynamic color transition.
|
||||||
|
int colorTransitionEnd = 0; // End frame of dynamic color transition.
|
||||||
float startColors[4][3]; // Start colors of dynamic color transition.
|
float startColors[4][3]; // Start colors of dynamic color transition.
|
||||||
float endColors[4][3]; // End colors of dynamic color transition.
|
float endColors[4][3]; // End colors of dynamic color transition.
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user