A variable rendering system is described that automatically transitions
between hardware-accelerated rendering and software rendering of
application data based on system performance and without user interaction
or noticeable impact on the user experience. When hardware-accelerated
rendering is available, the system renders application data using
hardware-accelerated rendering. If an event occurs that causes
hardware-accelerated rendering to fail, then the system dynamically
transitions from hardware-accelerated rendering to software-accelerated
rendering. Periodically, the system attempts to transition back to
hardware-accelerated rendering.