What does update rects really do?

Just curious as to what update rectangles function really does? If I
do writes to the screen buffer (or any other buffer) do these not really get
written to the buffer until I call SDL_UpdateRect?? If not what really goes on?
Are they being cached somewhere so that it can all be done at one time (kind
of like doing a bunch of gl calls and doing gl_Flush() ?? Can I rely on this?
If I write to the buffer can I rely on it not being displayed until I call
SDL_UpdateRect???

Just curious as to what update rectangles function really does? If I
do writes to the screen buffer (or any other buffer) do these not really get
written to the buffer until I call SDL_UpdateRect?? If not what really goes on?
Are they being cached somewhere so that it can all be done at one time (kind
of like doing a bunch of gl calls and doing gl_Flush() ?? Can I rely on this?
If I write to the buffer can I rely on it not being displayed until I call
SDL_UpdateRect???

Yes, in general. Rectangle updates are cached because in some systems
updating a large part of the screen in one go is faster than updating
small areas over and over. This is especially true in X Windows because
of the overhead inherent in the X protocol, and may just as true for
non-DirectX versions of SDL for Win32. Of course, this function call is
superfluous in systems that allow direct access to the frame buffer, so
any buffer writes are automatically displayed. But not all systems allow
direct access to the screen, so if you don’t SDL_UpdateRect some people
won’t see output from your program at all. I don’t think it does harm
when direct access is available, so it’s a good thing to do in any case.
There’s also an art of knowing where to place these calls so as to
optimize your display…On Fri, 20 Aug 1999, Daniel Tabuenca wrote:


| Rafael R. Sevilla @Rafael_R_Sevilla_94 |
| Instrumentation, Robotics, and Control Laboratory |

College of Engineering, University of the Philippines, Diliman