Public bug reported:
Binary package hint: usplash
this is more a "glitch" than a real bug, but one that is easily avoidable, and
it would imho greatly enhance the visual quality of the bootsplash when fixed.
I get this most drastically visible when using 640*480 resolution, though this
is something that I think any bootsplash theme in any resolution should be
effected by.
it is best visible while booting, when the progress bar is "pulsating":
in intervals the upper part of the animated progress bar is one frame
behind the lower part, leading to ugly visual artefacts. this is due to
the plugins drawing their graphics directly to the framebuffer (the put
methods do so) while the video memory is currently scanned for
transmission to the display: if the currently displayed scanline is
somewhere in between the area currently updated by the splash, the next
scanlines will be the newly drawn ones, while the ones above remain
being displayed with the image before the update, tearing the ouput
apart for one frame when the difference between the 2 frames is big
enough. at high animation refresh rates this is most visible, because
like every 2nd or 3rd frame the display is updated, leading to constant
flickering - with the percentage bar in the standard plug this is barely
noticeable because the bar gets seldomly updated compared to the
"pulser".
this could be avoided by syncronizing the drawing functions to the vertical
retrace - the time when the last scanline has been transmitted from video
memory to the display, after wich there is a short pause before the next frame
is transmitted. this would best be done by the splash plugin itself, in the
animate_step and draw_progressbar functions before drawing any graphics to the
screen - doing so would produce glitchless graphics without any annoying
tearing effects.
my suggestion to implement this would be to supply a function that waits for
the retrace with the other function in usplash_backend.h. as for the svgalib
driver, there already exists such a function, vga_waitretrace() in vga.h,
though as for the bogl backend there would be the need to implement a new
function to bogl itself. as a pointer for this, so you don't have to reinvent
the wheel, would be to look at the allegro library framebuffer driver, in
src/linux/fbcon.c there exits a function called fb_vsync() that does the trick
and should be easy to transport to the usplash sources.
** Affects: usplash (Ubuntu)
Importance: Undecided
Status: New
--
flicker/tearing in bootsplashanimations could be avoided with retrace-syncing
https://bugs.launchpad.net/bugs/371591
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs