스왑 체인Swap chains

스왑 체인은 사용자에게 프레임을 표시하는 데 사용되는 버퍼의 컬렉션입니다.A swap chain is a collection of buffers that are used for displaying frames to the user. 응용 프로그램이 표시할 새 프레임을 제공할 때마다, 스왑 체인의 첫 버퍼가 표시되는 버퍼의 자리를 차지합니다.Each time an application presents a new frame for display, the first buffer in the swap chain takes the place of the displayed buffer. 이 프로세스를 스와핑 또는 플리핑이라고 부릅니다.This process is called swapping or flipping.

그래픽 어댑터는 모니터에 표시되는 이미지를 나타내는 표면(전면 버퍼)에 포인터를 유지합니다.A graphics adapter holds a pointer to a surface that represents the image being displayed on the monitor, called a front buffer. 모니터를 새로 고칠 때 그래픽 카드가 전면 버퍼의 내용을 표시될 모니터로 보냅니다.As the monitor is refreshed, the graphics card sends the contents of the front buffer to the monitor to be displayed. 하지만 이로 인해 실시간 그래픽을 렌더링할 때 "화면 잘림(tearing)" 문제가 발생합니다.However, this leads to a "tearing" problem when rendering real-time graphics. 문제의 핵심은 모니터 새로 고침 빈도가 나머지 컴퓨터 작업에 비해 매우 느리다는 것입니다.The heart of the problem is that monitor refresh rates are very slow in comparison to the rest of the computer. 일반적인 새로 고침 빈도는 60Hz(초당 60회)에서 100Hz 사이입니다.Common refresh rates range from 60 Hz (60 times per second) to 100 Hz.

모니터 새로 고침 도중에 응용 프로그램이 전면 버퍼를 업데이트할 경우 표시되는 이미지가 절반으로 잘려 디스플레이 상반부에는 이전 이미지가, 하반부에는 새 이미지가 표시됩니다.If your application is updating the front buffer while the monitor is in the middle of a refresh, the image that is displayed will be cut in half with the upper half of the display containing the old image and the lower half containing the new image. 이 문제를 화면 잘림(tearing) 이라고 합니다.This problem is referred to as tearing.

실행 방지Avoiding tearing

Direct3D는 화면 잘림을 방지하기 위한 두 가지 옵션을 제공합니다.Direct3D implements two options to avoid tearing:

  • 첫 번째 옵션은 수직 리트레이스(수직 동기화) 작업 시에만 모니터 업데이트를 허용합니다.An option to only allow updates of the monitor on the vertical retrace (or vertical sync) operation. 일반적으로 모니터는 라이트 핀을 모니터 왼쪽 상단에서 오른쪽 하단까지 지그재그 방식으로 수평 이동하여 이미지를 새로 고칩니다.A monitor typically refreshes its image by moving a light pin horizontally, zigzagging from the top left of the monitor and ending at the bottom right. 라이트 핀이 하단에 도달하면 모니터가 라이트 핀을 다시 왼쪽 상단으로 이동하여 재보정합니다. 이렇게 프로세스가 다시 시작됩니다.When the light pin reaches the bottom, the monitor recalibrates the light pin by moving it back to the upper left so that the process can start again.

    이 재보정을 수직 동기화라고 합니다. 수직 동기화 도중에는 모니터가 아무것도 그릴 수 없습니다. 따라서 모니터가 다시 그리기 시작할 때까지는 전면 버퍼에 대한 업데이트가 보이지 않습니다.This recalibration is called a vertical sync. During a vertical sync, the monitor is not drawing anything, so any update to the front buffer will not be seen until the monitor starts to draw again. 수직 동기화는 비교적 느리지만 대기하는 도중 복잡한 장면을 렌더링할 수 있을 정도로 느리지는 않습니다.The vertical sync is relatively slow; however, not slow enough to render a complex scene while waiting. 화면 잘림을 방지하고 복잡한 장면을 렌더링할 수 있기 위해 필요한 것이 백 버퍼링이라고 하는 프로세스입니다.What is needed to avoid tearing and be able to render complex scenes is a process called back buffering.

  • 두 번째 옵션은 백 버퍼링이라는 기법을 사용합니다.An option to use a technique called back buffering. 백 버퍼링은 장면은 화면 외부 표면, 즉 백 버퍼에 그리는 프로세스입니다.Back buffering is the process of drawing a scene to an off-screen surface, called a back buffer. 전면 버퍼 이외의 모든 표면은 절대로 모니터에 직접 표시되지 않으므로 화면 외부 표면이라고 부릅니다.Any surface other than the front buffer is called an off-screen surface because it is never directly viewed by the monitor.

    응용 프로그램은 백 버퍼를 사용하여 시스템이 유휴 상태일(즉 대기 중인 Windows 메시지가 없을) 때마다 모니터의 새로 고침 빈도를 고려할 필요 없이 자유롭게 장면을 렌더링할 수 있습니다.By using a back buffer, an application has the freedom to render a scene whenever the system is idle (that is, no windows messages are waiting) without having to consider the monitor's refresh rate. 백 버퍼링은 언제, 어떻게 백 버퍼를 전면 버퍼로 이동하는가라는 문제를 추가로 제기합니다.Back buffering brings in an additional complication of how and when to move the back buffer to the front buffer.

Surface 대칭 이동Surface flipping

백 버퍼가 전면 버퍼로 이동하는 프로세스를 표면 플리핑이라고 합니다.The process of moving the back buffer to the front buffer is called surface flipping. 그래픽 카드는 단순히 표면에 대한 포인터를 사용하여 전면 버퍼를 나타내므로 간단한 포인터 변경이 백 버퍼를 전면 버퍼로 설정하는 데 필요한 전부입니다.Because the graphics card simply uses a pointer to a surface to represent the front buffer, a simple pointer change is all that is needed to set the back buffer to the front buffer. 응용 프로그램이 Direct3D에게 백 버퍼를 전면 버퍼로 전환하도록 요청하면 Direct3D는 두 포인터를 "플립"하기만 합니다.When an application asks Direct3D to present the back buffer to the front buffer, Direct3D simply "flips" the two surface pointers. 그러면 이제 백 버퍼가 새로운 전면 버퍼가 되고, 이전의 전면 버퍼는 새로운 백 버퍼가 됩니다.The result is that the back buffer is now the new front buffer, and the old front buffer is the new back buffer.

응용 프로그램이 Direct3D 장치에 백 버퍼를 표시하도록 요청할 때마다 표면 플립이 호출됩니다. 하지만 수직 동기화가 발생할 때까지 요청을 큐에 넣도록 Direct3D를 설정할 수 있습니다.A surface flip is invoked whenever an application asks the Direct3D device to present the back buffer; however, Direct3D can be set up to queue the requests until a vertical sync occurs. 이 옵션을 Direct3D 장치의 표시 간격이라고 합니다.This option is referred to as the Direct3D device's presentation interval. 응용 프로그램이 어떻게 Direct3D에서 화면 플리핑을 처리하도록 지정했는지에 따라 새 백 버퍼의 데이터를 재사용하지 못할 수 있습니다.The data in the new back buffer may not be reusable, depending on how an application specifies how Direct3D should handle surface flipping.

화면 플리핑은 멀티미디어, 애니메이션, 게임 소프트웨어에서 매우 중요합니다. 애니메이션에서 종이 패드를 사용하는 것과 동일합니다.Surface flipping is key in multimedia, animation, and game software; it is equivalent to the way you can do animation with a pad of paper. 각 페이지에서 아티스트는 그림을 약간씩 변경합니다. 그러면 각 페이지를 빠르게 넘길 때 그림이 애니메이션화되어 보입니다.On each page, the artist changes the figures slightly, so that when you flip rapidly between sheets, the drawing appears animated.

관련된 항목Related topics

디바이스Devices