diff options
author | TreeHugger Robot <treehugger-gerrit@google.com> | 2019-07-26 06:34:45 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-07-26 06:34:45 +0000 |
commit | e99a9c03b1cb75561d378ea4196ddd352d28160d (patch) | |
tree | abd309af501fae42809d30e3553589c30d34195b | |
parent | 6cabc2a4edf74d132ad66c21189ee7d0e7886dd7 (diff) | |
parent | 0d0e16e96f9af3941c719cbfb1d06a7694dc7b5a (diff) | |
download | native-e99a9c03b1cb75561d378ea4196ddd352d28160d.tar.gz |
Merge "[RenderEngine] Allow rounded corners shader to use lower precision." into qt-r1-dev
-rw-r--r-- | libs/renderengine/gl/ProgramCache.cpp | 9 |
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__"; |