Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8673c2ad authored by Hampus Wessman's avatar Hampus Wessman Committed by Ed Savage-Jones
Browse files

Fix graphical artifact in the fisheye effect

The fisheye effect generates a graphical artifact close to the center of
the picture, due to bad precision and division by zero in the shader.
The problem is fixed by making a small change in the shader, so that the
picture is uniformly scaled close to the center instead. This avoids the
problem and looks as expected, without affecting the performance.

Bug: 64107054

Test: Manual - Install dev sample HelloEffects and use the 'fisheye'
from the overflow.  There is a small artifact in the center of the puppy
without this patch applied. Think of the puppies!!
Change-Id: I063f60facd30708db29ff544fdb47ac896e3d54b
parent 9b9e8230
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -49,6 +49,8 @@ public class FisheyeFilter extends Filter {
    private int mHeight = 0;
    private int mTarget = FrameFormat.TARGET_UNSPECIFIED;

    // The constant min_dist, below, is an arbitrary number that gives good enough precision in
    // the center of the picture without affecting the fisheye effect noticeably.
    private static final String mFisheyeShader =
            "precision mediump float;\n" +
            "uniform sampler2D tex_sampler_0;\n" +
@@ -59,8 +61,10 @@ public class FisheyeFilter extends Filter {
            "varying vec2 v_texcoord;\n" +
            "void main() {\n" +
            "  const float m_pi_2 = 1.570963;\n" +
            "  const float min_dist = 0.01;\n" +
            "  vec2 coord = v_texcoord - vec2(0.5, 0.5);\n" +
            "  float dist = length(coord * scale);\n" +
            "  dist = max(dist, min_dist);\n" +
            "  float radian = m_pi_2 - atan(alpha * sqrt(radius2 - dist * dist), dist);\n" +
            "  float scalar = radian * factor / dist;\n" +
            "  vec2 new_coord = coord * scalar + vec2(0.5, 0.5);\n" +