[SDL] Retrace sync. in Linux
david at olofson.net
Wed Sep 24 10:01:01 PDT 2003
On Wednesday 24 September 2003 12.11, eddie at odense.kollegienet.dk
> I found this old post by Olofson:
> Do anyone know if there has been some progress on the matter?
> Without having to run as root.
Dunno if anything is done to fix DGA, but I'm quite sure it could be
done. However, there's one major difference between DGA and other low
level "direct video" APIs, and OpenGL; the latter is asynchronous,
while the former are synchronous. This means that in the case of
OpenGL, the driver is the only part that has to be in strict "hard
sync" with the retrace, whereas with DGA, the application has to be
sync'ed as well. This turns out to be a real PITA in general purpose
OSes. You basically need an RTOS to do that kind of stuff properly.
Anyway, OpenGL is the way to go. It's the only remotely portable
solution that can reliably provide serious h/w acceleration. OpenGL
also provides asynchronous rendering, which cuts the applications
some more slack, allowing for more scheduling jitter without dropping
frames. Finally, the best part: Most OpenGL drivers for current
hardware (ie the closed source ones...) support retrace sync.
IMNSHO, "traditional" 2D acceleration is effectively obsolete, and s/w
2D rendering directly into VRAM has been an absolute last resort for
a good while. There are many different 2D APIs, most of which are
platform specific and/or have serious limitations and/or very few -
if any - accelerated drivers. As to "pure" s/w rendering, that's
practically useless for high quality animation due to performance
issues with CPU transfers through PCI and AGP. If you really want s/w
rendering, you should use busmaster DMA to transfer the output to the
screen - but unfortutately, virtually no targets, apart from
DirectDraw on reasonably well supported hardware, support this.
That said, s/w 2D rendering can still be useful for less demanding
applications. It allows the applications to run on pretty much
anything, and even though this method scales very poorly (ie your 3+
GHz CPU and 500 MHz GPU won't help much at all), there are ways to
add full h/w acceleration very easily to most such applications.
glSDL (the "compile-in" wrapper) is one way (which is used by Kobo
Deluxe: http://www.olofson.net/kobodl ), and in a not too distant
future, we (the Not So Secret Backend Team ;-) hope to get a true
backend version into SDL, so users can make use of OpenGL without
even recompiling applications.
Another way is to think twice (or more ;-) when designing your
application, so you can snap in an alternative rendering backend
which uses OpenGL natively. There's a very simple demonstration of
that technique in my smoothscroll example:
//David Olofson - Programmer, Composer, Open Source Advocate
.- Audiality -----------------------------------------------.
| Free/Open Source audio engine for games and multimedia. |
| MIDI, modular synthesis, real time effects, scripting,... |
`-----------------------------------> http://audiality.org -'
--- http://olofson.net --- http://www.reologica.se ---
More information about the SDL