diff options
author | Danny Lin <danny@kdrag0n.dev> | 2021-10-16 05:28:30 -0700 |
---|---|---|
committer | alk3pInjection <webmaster@raspii.tech> | 2022-05-05 00:39:05 +0800 |
commit | 2924fb0e9462b8768f90eace669884eb70a68e7a (patch) | |
tree | 022501cc5e559ea156d965a402aa258c363a8ca4 /services | |
parent | 4c0bd9813c378e9a167258962c2daba225834916 (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.java | 15 |
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); |