summaryrefslogtreecommitdiff
path: root/libs/input/KeyLayoutMap.cpp
diff options
context:
space:
mode:
author KaiChieh Chuang <kaichieh.chuang@mediatek.com> 2020-12-14 16:49:38 +0800
committer Alec Mouri <alecmouri@google.com> 2020-12-15 18:30:23 -0800
commitda2845cb491d22b5625d4a8c7d4c411c6fb61fcd (patch)
tree7e76a0f75292f21e095bed9918c0e2f9f703a98a /libs/input/KeyLayoutMap.cpp
parent9a715075690f5be3884a89bd369fd89fb8b6e2fe (diff)
Fix the order of applying layer alpha and color matrices in GLESRenderEngine
If the system want to do a color inversion, there is an unexpected result due to applying the layer alpha first. Solution: RenderEngine should apply the layer's alpha after multiplying by the color matrix. For example, given the following color inversion matrix: | r.r r.g r.b | | -1.0 0.0 0.0 | | g.r g.g g.b | = | 0.0 -1.0 0.0 | | b.r b.g b.b | | 0.0 0.0 -1.0 | | Tr Tg Tb | | 1.0 1.0 1.0 | We want to get a black layer when applying the color transform to a white layer; However, the white layer applies layer alpha before color matrix. We can get the below calculation: When layer alpha is 0, R_out value was always Tr. Then we do not get a black layer when the system applies color inversion to a white layer. R_out = (R_in * layer_alpha) * r.r + Tr Therefore we apply the color matrix first, so we can get the below calculation. When the layer alpha is 0, we can get a black layer. R_out = (R_in * r.r + Tr) * layer_alpha = (R_in * r.r * layer_alpha) + (Tr * layer_alpha) adds RenderEngineTest::fillBufferColorTransformZeroLayerAlpha Bug: 157204341 Test: color inversion when switching pages in the Setting app Test: RenderEngineTest Change-Id: I206184aae84042290b00e411709e04e54579780a
Diffstat (limited to 'libs/input/KeyLayoutMap.cpp')
0 files changed, 0 insertions, 0 deletions