I'm racing two threads.
One does:
wait_for_signal() for (...) *p++ = color
The other does:
bzero() color = purple // you don't see this one signal_other_thread_to_start() color = red wait_for_other_thread_to_start() color = green poll_for_XPending() color = halfgreen glClear() color = blue upload_texture_to_video_card()
I've cherry-picked the frame here to catch a glitch on purpose because it's interesting to look at.
![](frame.png)
Most of the frames come out intact, and if you wanted to use this method to measure timings, you'd really want to build a distribution etc etc. When it's animated, Intel Turbo Boost becomes really obvious.
nVidia recommends that I use GL_BGRA as the format in memory. I do the wrong thing on purpose and use GL_RGBA to force the video card to swizzle. This induces the glitches.
Unlike a VGA framebuffer, in OpenGL, positive Y is upwards.