| You're an ass. Check out some of the latest research into functional reactive programming. They're pretty far along that track. Edit: if you want a hint at an actual solution, one need only send logical local timestamps along with each request, and introduce a timestamp handshake. The server very simply then need not swap in the backing store until it and the client have acknowledged that the logical timestamp should increment. Your convo then looks like this: U - user / S - server / C - client U->S: resize to 800x600 S->C: resize to 800x600, timestamp 12345 C->S: GL commands, timestamp 12345 C->S: more GL commands, timestamp 12345 C->S: more GL commands, timestamp 12345 C->S: OK, I'm done with timestamp 12345 S: render window decorations on C's backing buffer S: push C's backing buffer from 12345 to the front S->C: OK, it's now timestamp 12346 |