Bit Block Transfers
How does that make B-L-I-T?
An important term to know when writing data is
blitting, or Bit Block Transfer. The best way to understand blitting is to use an example. Consider a flight simulator that uses a 2D cockpit. This 2D cockpit is really nothing more than a large texture. Rather than rendering that texture onto multiple pixels, a blit occurs. When doing this, the scene is rendered and then the bitmap of the cockpit is transferred one bit at a time, and is written onto the image in the frame-buffer.
Unfortunately, blitting isn't always perfect. When using anti-aliasing, specifically in the form of over-sampling, texture coordinates are changed without the application knowing this. So while an application is set to render at 800x600, the graphics card might be internally rendering the scene at 1600x1200. When this happens, the application has the wrong screen coordinates for the blitting to occur to, and so the blitted image might only be written to the top right corner of the screen.
There are ways to get around this issue both in the application and in the graphics card driver. In the driver, for example, it is possible to lock the frame-buffer from blitting until the image is down-sampled. When the down-sampling occurs, the frame-buffer lock is removed and the blit can take place.
Blitting Issues
This is not too much of an issue on it's own; however poorly coded applications can cause further problems. For example, an application might want to render some of the scene, do a frame-buffer blit and then render the scene further. This can be especially troublesome. In order to work around this, the driver must lock the frame-buffer from blitting and render the requested part of the scene. Then a down-sampling occurs and the lock is removed so that blitting can take place.
After the blit is finished, a lock is placed back on the frame-buffer and the image is over-sampled again. Any additional 3D rendering that must be done takes place when the image is down-sampled and the frame-buffer lock is removed. This process is repeated until the image is finished and can finally be displayed.