             break;
 
         case VIDEO_FILTER_SCANLINES:
-            if (mod_y == 0)
-            {
-                pixel = vec4 (0.0, 0.0, 0.0, 1.0);
-            }
-            else
-            {
-                pixel = get_pixel (video_x, video_y);
-            }
+
+            /* Interpolate in the X axis */
+            x_mix = smoothstep (0.0, 1.0, float (mod_x) / float (scale));
+            vec4 pixel_l = get_pixel (video_x,     video_y);
+            vec4 pixel_r = get_pixel (video_x + 1, video_y);
+            pixel = mix (pixel_l, pixel_r, x_mix);
+
+            /* Apply scanlines */
+            pixel = mix (BLACK, pixel, scanline_mix (mod_y));
+
             break;
 
         case VIDEO_FILTER_DOT_MATRIX:

    return BLACK;
}

void main()
{
    /* Screen location of this fragment. */

uniform ivec3 options; /* x = video_filter, y = show_border, z = blank_left */
uniform int scale;


/*
 * Given a pixel coordinate into the video-out, return the colour value.
 * This  function handles the dimming of the border area.
 */
vec4 get_pixel (int x, int y)
{
    bool active_area;
