summaryrefslogtreecommitdiff
path: root/services
diff options
context:
space:
mode:
authorDanny Lin <danny@kdrag0n.dev>2021-10-16 05:28:30 -0700
committeralk3pInjection <webmaster@raspii.tech>2022-05-05 00:39:05 +0800
commit2924fb0e9462b8768f90eace669884eb70a68e7a (patch)
tree022501cc5e559ea156d965a402aa258c363a8ca4 /services
parent4c0bd9813c378e9a167258962c2daba225834916 (diff)
display: Render screen-off fade animation in linear sRGB space
The sRGB transfer function is a piecewise function with linear and gamma 2.4 parts, not involving cosine or other magic constants. Fade colors in linear sRGB instead of non-linear sRGB + magic gamma to minimize color distortion as the animation progresses. Change-Id: I57db834f938cc63b7298af1c9dfe8c284dc6abe2
Diffstat (limited to 'services')
-rw-r--r--services/core/java/com/android/server/display/ColorFade.java15
1 files changed, 4 insertions, 11 deletions
diff --git a/services/core/java/com/android/server/display/ColorFade.java b/services/core/java/com/android/server/display/ColorFade.java
index 7cb29215b5bf..5acfb234d14a 100644
--- a/services/core/java/com/android/server/display/ColorFade.java
+++ b/services/core/java/com/android/server/display/ColorFade.java
@@ -112,7 +112,7 @@ final class ColorFade {
private final float mProjMatrix[] = new float[16];
private final int[] mGLBuffers = new int[2];
private int mTexCoordLoc, mVertexLoc, mTexUnitLoc, mProjMatrixLoc, mTexMatrixLoc;
- private int mOpacityLoc, mGammaLoc;
+ private int mOpacityLoc;
private int mProgram;
// Vertex and corresponding texture coordinates.
@@ -288,7 +288,6 @@ final class ColorFade {
mTexMatrixLoc = GLES20.glGetUniformLocation(mProgram, "tex_matrix");
mOpacityLoc = GLES20.glGetUniformLocation(mProgram, "opacity");
- mGammaLoc = GLES20.glGetUniformLocation(mProgram, "gamma");
mTexUnitLoc = GLES20.glGetUniformLocation(mProgram, "texUnit");
GLES20.glUseProgram(mProgram);
@@ -432,12 +431,7 @@ final class ColorFade {
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
// Draw the frame.
- double one_minus_level = 1 - level;
- double cos = Math.cos(Math.PI * one_minus_level);
- double sign = cos < 0 ? -1 : 1;
- float opacity = (float) -Math.pow(one_minus_level, 2) + 1;
- float gamma = (float) ((0.5d * sign * Math.pow(cos, 2) + 0.5d) * 0.9d + 0.1d);
- drawFaded(opacity, 1.f / gamma);
+ drawFaded(level);
if (checkGlErrors("drawFrame")) {
return false;
}
@@ -449,9 +443,9 @@ final class ColorFade {
return showSurface(1.0f);
}
- private void drawFaded(float opacity, float gamma) {
+ private void drawFaded(float opacity) {
if (DEBUG) {
- Slog.d(TAG, "drawFaded: opacity=" + opacity + ", gamma=" + gamma);
+ Slog.d(TAG, "drawFaded: opacity=" + opacity);
}
// Use shaders
GLES20.glUseProgram(mProgram);
@@ -460,7 +454,6 @@ final class ColorFade {
GLES20.glUniformMatrix4fv(mProjMatrixLoc, 1, false, mProjMatrix, 0);
GLES20.glUniformMatrix4fv(mTexMatrixLoc, 1, false, mTexMatrix, 0);
GLES20.glUniform1f(mOpacityLoc, opacity);
- GLES20.glUniform1f(mGammaLoc, gamma);
// Use textures
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);