summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
author Alec Mouri <alecmouri@google.com> 2019-07-26 00:06:05 -0700
committer android-build-merger <android-build-merger@google.com> 2019-07-26 00:06:05 -0700
commitf076c019658cc8b78807dfd7ef8ffdacaea8a6c8 (patch)
treeabd309af501fae42809d30e3553589c30d34195b /libs
parentabab133dbc8772c95e0a9613df816216c0ef42f6 (diff)
parente99a9c03b1cb75561d378ea4196ddd352d28160d (diff)
Merge "[RenderEngine] Allow rounded corners shader to use lower precision." into qt-r1-dev
am: e99a9c03b1 Change-Id: I73694c58d9a2c45b44419dcbfd4a0c2b984f544f
Diffstat (limited to 'libs')
-rw-r--r--libs/renderengine/gl/ProgramCache.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/libs/renderengine/gl/ProgramCache.cpp b/libs/renderengine/gl/ProgramCache.cpp
index 086a324999..d242677f0c 100644
--- a/libs/renderengine/gl/ProgramCache.cpp
+++ b/libs/renderengine/gl/ProgramCache.cpp
@@ -575,10 +575,11 @@ String8 ProgramCache::generateFragmentShader(const Key& needs) {
float applyCornerRadius(vec2 cropCoords)
{
vec2 position = cropCoords - cropCenter;
- // Increase precision here so that a large corner radius doesn't
- // cause floating point error
- highp vec2 dist = abs(position) + vec2(cornerRadius) - cropCenter;
- float plane = length(max(dist, vec2(0.0)));
+ // Scale down the dist vector here, as otherwise large corner
+ // radii can cause floating point issues when computing the norm
+ vec2 dist = (abs(position) - cropCenter + vec2(cornerRadius)) / 16.0;
+ // Once we've found the norm, then scale back up.
+ float plane = length(max(dist, vec2(0.0))) * 16.0;
return 1.0 - clamp(plane - cornerRadius, 0.0, 1.0);
}
)__SHADER__";