[[Microsoft]] [[Direct3D]] implements a 'SwapChain' class. Each host [[Output device|device]] has at least one swap chain assigned to it, and others may be created by the client application.<ref>http://msdn.microsoft.com/en-us/library/microsoft.windowsmobile.directx.direct3d.swapchain.aspx</ref> The API provides three methods of swapping: 'copy', 'discard', and 'flip'. When the SwapChain is set to 'flip', the screenbuffer is copied onto the last backbuffer, then all the existing backbuffers are copied forward in the chain. When 'copy' is set, each backbuffer is copied forward, but the screenbuffer is not wrapped to the last buffer, leaving it unchanged. 'Flip' does not work when there is only one backbuffer, as the screenbuffer is copied over the only backbuffer before it can be presented. In 'discard' mode, the driver selects the best method.<ref>http://nexe.gamedev.net/directKnowledge/default.asp?p=Swap%20Chains</ref>