|
From: Ian P. <ian...@in...> - 2004-03-21 03:07:35
|
On 21 Mar 2004, at 03:52, Tim Rowledge wrote: > In fact there seems to be a little confusion as to which code forces a > display > update right now, which can be deferred by the image and which can be > done lazily by the vm. I'd be interested to know what the design intent > is here! fullDisplayUpdate() calls ioShowDisplay() for the entire Display (or whatever surface, yada yada) area. ioShowDisplay() tells the VM that the Display has changed (and where). (E.g., the Unix/X11 code grabs a PixMap out of the Display object and paints it into the X11 window, but network/server latencies don't guarantee an immediate effect on the physical screen. Other VMs might just add the rectangle to a damage list, in preparation for...) ioForceDisplayUpdate() tells the VM that any screen updates from previous calls to ioShowDisplay that have not as yet been forced into the physical framebuffer should now be forced into the framebuffer. (E.g., the Unix/X11 code calls XFlush() which returns after the server tells us that all pending PixMap writes have been propagated to the framebuffer -- which is kind of pedantic, but it does allow the image to assume the user is now seeing the most recent Display contents at the time the prim returns. Other VMs might defer synchronising the physical screen with the Display explicitly -- e.g., if they blit bits directly out of the Display object and use ioShowDisplay() only to maintain a damage list to avoid repaints of overlapping areas.) Any clearer yet? Ian |