Direct3D 애플리케이션은 일반적으로 애니메이션의 프레임을 백 버퍼에 생성하고 순서대로 표시하여 애니메이션 시퀀스를 표시합니다. 백 버퍼는 스왑 체인으로 구성됩니다. 스왑 체인은 화면에 하나씩 "대칭 이동"하는 일련의 버퍼입니다. 메모리에서 한 장면을 렌더링한 다음, 렌더링이 완료되면 그 장면을 화면으로 전환하는 데 사용할 수 있습니다. 이렇게 하면 찢어지는 현상을 방지하고 더 부드러운 애니메이션을 사용할 수 있습니다.
Direct3D에서 만든 각 디바이스에는 하나 이상의 스왑 체인이 있습니다. 첫 번째 Direct3D 디바이스를 초기화할 때 D3DPRESENT_PARAMETERSBackBufferCount 멤버를 설정합니다. 이 멤버는 Direct3D에 스왑 체인에 있을 백 버퍼의 수를 알려줍니다. IDirect3D9::CreateDevice 호출하면 Direct3D 디바이스 및 해당 스왑 체인이 만들어집니다.
IDirect3DDevice9::Present를 사용하여 표면 전환 작업을 요청하면 전면 버퍼와 백 버퍼에 대한 표면 메모리 포인터가 교환됩니다. 대칭 이동은 디스플레이 디바이스가 표면 메모리를 복사하는 것이 아니라 메모리 참조에 사용하는 포인터를 전환하여 수행됩니다. 대칭 이동 체인에 전면 버퍼와 둘 이상의 백 버퍼가 포함된 경우 다음 다이어그램과 같이 포인터가 원형 패턴으로 전환됩니다.
플리핑 체인의 프론트 버퍼와 두 개의 백 버퍼가 있는 다이어그램 
IDirect3DDevice9::CreateAdditionalSwapChain호출하여 디바이스에 대한 추가 스왑 체인을 만들 수 있습니다. 애플리케이션은 보기당 하나의 스왑 체인을 만들고 각 스왑 체인을 특정 창과 연결할 수 있습니다. 애플리케이션은 각 스왑 체인의 백 버퍼에 이미지를 렌더링한 다음 개별적으로 표시합니다. IDirect3DDevice9::CreateAdditionalSwapChain 두 매개 변수는 D3DPRESENT_PARAMETERS 구조에 대한 포인터와 IDirect3DSwapChain9 인터페이스에 대한 포인터의 주소입니다. 그런 다음 IDirect3DSwapChain9::P resent 사용하여 다음 백 버퍼의 내용을 전면 버퍼에 표시할 수 있습니다. 디바이스에는 하나의 전체 화면 스왑 체인만 있을 수 있습니다.
반환된 백 버퍼 표면을 나타내는 IDirect3DSurface9 인터페이스에 대한 포인터를 반환하는 IDirect3DDevice9::GetBackBuffer 또는 IDirect3DSwapChain9::GetBackBuffer 메서드를 호출하여 특정 백 버퍼에 액세스할 수 있습니다. 이 메서드를 호출하면 IDirect3DDevice9 인터페이스의 내부 참조 카운트가 증가합니다. 그러므로 이 표면 사용이 끝나면 IUnknown을 호출하여 메모리 누수를 방지해야 합니다.
Direct3D는 표면 자체를 교환하는 것이 아니라 스왑 체인 내에서 표면 메모리 포인터를 교환하여 표면을 대칭 이동합니다. 즉, 항상 다음에 표시될 백 버퍼로 렌더링합니다.
디스플레이 어댑터 드라이버에서 수행하는 "플리핑 작업"과 D3DSWAPEFFECT_FLIP으로 생성된 스왑 체인에 적용되는 "프레젠트 작업" 간의 차이점을 유의해야 합니다.
"flip"이라는 용어는 일반적으로 디스플레이 어댑터가 출력 신호를 생성하는 데 사용하는 비디오 메모리 주소 범위를 변경하는 작업을 나타내므로 이전에 숨겨진 백 버퍼의 내용이 표시됩니다. Direct3D 9에서 이 용어는 일반적으로 D3DSWAPEFFECT_FLIP 스왑 효과로 만든 스왑 체인에서 백 버퍼의 표시를 설명하는 데 더 일반적으로 사용됩니다.
이러한 "Present" 작업은 스왑 체인이 전체 화면일 때 대칭 이동 작업에 의해 거의 변함없이 구현되지만 스왑 체인이 창에 있을 때 반드시 복사 작업에 의해 구현됩니다. 또한 디스플레이 어댑터 드라이버는 플리핑을 사용하여 D3DSWAPEFFECT_DISCARD 및 D3DSWAPEFFECT_COPY 스왑 효과를 기반으로 전체 화면 스왑 체인에 대한 Present 작업을 구현할 수 있습니다.
위의 설명은 D3DSWAPEFFECT_FLIP 사용하여 만든 전체 화면 스왑 체인의 일반적으로 사용되는 사례에 적용됩니다.
창이 있는 스왑 체인과 전체 화면 스왑 체인 모두에 대한 다양한 스왑 효과에 대한 보다 일반적인 논의는 D3DSWAPEFFECT참조하세요.
관련 항목