다음을 통해 공유


Surface 대칭 이동(Direct3D 9)

Direct3D 애플리케이션은 일반적으로 애니메이션의 프레임을 백 버퍼에 생성하고 순서대로 표시하여 애니메이션 시퀀스를 표시합니다. 백 버퍼는 스왑 체인으로 구성됩니다. 스왑 체인은 화면에 하나씩 "대칭 이동"하는 일련의 버퍼입니다. 메모리에서 한 장면을 렌더링한 다음 렌더링이 완료되면 장면을 화면으로 대칭 이동시키는 데 사용할 수 있습니다. 이렇게 하면 찢어지는 현상을 방지하고 더 부드러운 애니메이션을 사용할 수 있습니다.

Direct3D에서 만든 각 디바이스에는 스왑 체인이 하나 이상 있습니다. 첫 번째 Direct3D 디바이스를 초기화할 때 D3DPRESENT_PARAMETERS BackBufferCount 멤버를 설정하면 Direct3D에 스왑 체인에 있을 백 버퍼의 수를 알 수 있습니다. 그런 다음 IDirect3D9::CreateDevice를 호출하면 Direct3D 디바이스와 해당 스왑 체인이 만들어집니다.

IDirect3DDevice9::P resent를 사용하여 표면 대칭 이동 작업을 요청하는 경우 전면 버퍼 및 백 버퍼의 Surface 메모리에 대한 포인터가 교환됩니다. 대칭 이동은 디스플레이 디바이스가 메모리를 참조하는 데 사용하는 포인터를 전환하여 수행되며, 표면 메모리를 복사하는 것이 아닙니다. 대칭 이동 체인에 전면 버퍼와 둘 이상의 백 버퍼가 포함된 경우 다음 다이어그램과 같이 포인터가 원형 패턴으로 전환됩니다.

전면 버퍼와 두 개의 백 버퍼가 있는 대칭 이동 체인 다이어그램

IDirect3DDevice9::CreateAdditionalSwapChain을 호출하여 디바이스에 대한 스왑 체인을 추가할 수 있습니다. 애플리케이션은 보기당 하나의 스왑 체인을 만들고 각 스왑 체인을 특정 창과 연결할 수 있습니다. 애플리케이션은 각 스왑 체인의 백 버퍼에 이미지를 렌더링한 다음 개별적으로 표시합니다. IDirect3DDevice9::CreateAdditionalSwapChain이 사용하는 두 매개 변수는 D3DPRESENT_PARAMETERS 구조체에 대한 포인터와 IDirect3DSwapChain9 인터페이스에 대한 포인터의 주소입니다. 그런 다음 IDirect3DSwapChain9::P resent 를 사용하여 다음 백 버퍼의 내용을 프런트 버퍼에 표시할 수 있습니다. 디바이스에는 하나의 전체 화면 스왑 체인만 있을 수 있습니다.

반환된 백 버퍼 표면을 나타내는 IDirect3DSurface9 인터페이스에 대한 포인터를 반환하는 IDirect3DDevice9::GetBackBuffer 또는 IDirect3DSwapChain9::GetBackBuffer 메서드를 호출하여 특정 백 버퍼 액세스할 수 있습니다. 이 메서드를 호출하면 IDirect3DDevice9 인터페이스의 내부 참조 수가 증가하므로 이 표면을 사용하거나 메모리 누수가 발생할 때 IUnknown 을 호출해야 합니다.

Direct3D는 표면 자체를 교환하는 것이 아니라 스왑 체인 내에서 표면 메모리 포인터를 교환하여 표면을 뒤집습니다. 즉, 다음에 표시될 백 버퍼에 항상 렌더링됩니다.

디스플레이 어댑터 드라이버에서 수행한 "대칭 이동 작업"과 D3DSWAPEFFECT_FLIP 사용하여 만든 스왑 체인에 적용된 "Present" 작업 간의 차이점을 유의해야 합니다.

"flip"이라는 용어는 일반적으로 디스플레이 어댑터가 출력 신호를 생성하는 데 사용하는 비디오 메모리 주소 범위를 변경하는 연산을 나타내므로 이전에 숨겨진 백 버퍼의 내용이 표시됩니다. Direct3D 9에서 이 용어는 일반적으로 D3DSWAPEFFECT_FLIP 스왑 효과로 만든 스왑 체인에서 백 버퍼의 표시를 설명하는 데 더 일반적으로 사용됩니다.

이러한 "현재" 작업은 스왑 체인이 전체 화면일 때 대칭 이동 작업에 의해 거의 변함없이 구현되지만 스왑 체인이 창에 있을 때 반드시 복사 작업으로 구현됩니다. 또한 디스플레이 어댑터 드라이버는 대칭 이동 기능을 사용하여 D3DSWAPEFFECT_DISCARD 및 D3DSWAPEFFECT_COPY 기반으로 전체 화면 스왑 체인에 대해 Present 작업을 구현할 수 있습니다.

위의 설명은 D3DSWAPEFFECT_FLIP 사용하여 만든 전체 화면 스왑 체인의 일반적으로 사용되는 사례에 적용됩니다.

창이 있는 스왑 체인과 전체 화면 스왑 체인 모두에 대한 다양한 스왑 효과에 대한 보다 일반적인 설명은 D3DSWAPEFFECT를 참조하세요.

Direct3D Surface