DirectX Graphics 프로그래밍 가이드 고정 기능 파이프라인 텍스처 표면 표면의 플립   [목차열람] [주소복사] [슬롯비우기]
표면의 플립
 
Microsoft DirectX 9.0

표면의 플립


Microsoft® Direct3D® 애플리케이션은, 보통, 백 버퍼에 애니메이션의 프레임을 생성해, 연속적으로 표시시키는 것으로, 애니메이션을 표시한다. 백 버퍼는 스왑 체인에 분할된다. 스왑 체인이란, 스크린에 순서에 "플립" 하는 일련의 버퍼이다. 이 스왑 체인을 사용하면 메모리내가 있는 장면(scene)를 렌더링 해, 렌더링이 완료하면 그 장면(scene)를 스크린에 플립 할 수 있다. 이것으로,티어링으로 불리는 현상을 막아, 보다 매끄러운 애니메이션을 얻을 수 있다.

Direct3D 로 생성 된 각 장치는, 스왑 체인을 적어도 1개는 가지고 있다. 최초의 Direct3D 장치를 초기화할 경우에, 스왑 체인내에 있는 백 버퍼의 수를 Direct3D 에 지시하는 D3DPRESENT_PARAMETERS 구조체의 BackBufferCount 멤버를 설정한다. IDirect3D9::CreateDevice 를 호출해, 다음에, Direct3D 장치 및 대응하는 스왑 체인을 생성 한다.

IDirect3DDevice9::Present 메서드를 사용해 표면 플립핑 처리를 요구 하면, 프론트 버퍼와 백 버퍼에 대한 표면 메모리의 포인터가 스왑 된다. 플립핑은, 표면 메모리를 복사 하는 것은 아니고, 메모리를 참조하기 위해서 디스플레이 장치가 사용하는 포인터를 바꾸는 것으로 실행된다. 플립핑 체인에 프론트 버퍼와 1 개 이상의 백 버퍼가 있는 경우, 다음 그림이 나타내듯 포인터는 순환적 패턴으로 교체된다.

3 개의 플립

장치의 추가 스왑 체인을 생성 하려면 ,IDirect3DDevice9::CreateAdditionalSwapChain 를 호출한다. 애플리케이션은 뷰 마다 1 개의 스왑 체인을 생성 해, 그 스왑 체인을 특정의 윈도우에 관련짓는다. 애플리케이션에서는, 각 스왑 체인의 백 버퍼에 이미지를 렌더링 해, 다음에 그것을 개별적으로 제시한다. IDirect3DDevice9::CreateAdditionalSwapChain 가 받는 2 개의 파라미터는,D3DPRESENT_PARAMETERS 구조체의 포인터와 IDirect3DSwapChain9 인터페이스의 포인터 주소이다. 다음에,IDirect3DSwapChain9::Present 를 사용해, 다음의 백 버퍼의 내용을 프론트 버퍼에 표시한다. 각 장치는 풀 스크린 스왑 체인을 1 개 밖에 가질 수 없는 것에 주의 해야 한다.

특정의 백 버퍼에 액세스 하려면 ,IDirect3DDevice9::GetBackBuffer 메서드 또는 IDirect3DSwapChain9::GetBackBuffer 메서드를 호출한다. 이러한 메서드는, 돌려받는 백 버퍼 표면을 나타내는 IDirect3DSurface9 인터페이스의 포인터를 돌려준다. 이 메서드를 호출하면,IDirect3DDevice9 인터페이스의 내부 참조 카운트가 증가하므로, 이 표면을 사용한 후는, 반드시 IUnknown::Release 를 호출하도록(듯이) 주의 해야 한다. 호출하지 않으면 메모리 누수가 발생한다.

Direct3D 는, 표면 자체를 스왑 하는 것이 아니라, 스왑 체인내의 표면 메모리 포인터를 스왑 하는 것으로, 표면의 플립핑을 실시하는 것을 잊어서는 안되는 것. 즉, 다음에 표시되는 백 버퍼에 대해서 항상 렌더링 하면 말하는 것이다.

디스플레이 어댑터 드라이버에 의해 행해지는 "플립핑 처리" 와 D3DSWAPEFFECT_FLIP 를 사용해 생성 된 스왑 체인에 적용되는 "Present" 처리에는, 분명한 차이가 있는 것에 주의 해야 한다가 중요하다.

일반적으로 "플립" 이라고 하는 용어는, 디스플레이 어댑터가 그 출력 신호를 생성하기 위해서 사용하는 비디오 메모리의 주소 범위를 변경하는 처리여, 이것에 의해 숨어 있던 백 버퍼의 내용이 표시된다. Microsoft DirectX® 9.0 의 경우, 이 용어는 보다 일반적으로 사용되어 D3DSWAPEFFECT_FLIP 스왑 이펙트로 생성 된 스왑 체인에 있어서의 백 버퍼의 프레젠테이션을 나타낸다.

스왑 체인이 풀 스크린의 경우,"Present" 와 같은 처리는 거의 플립 처리에 의해 처리 되는 한편, 스왑 체인이 윈도우때는, 반드시 복사 처리에 의해 처리 된다. 게다가 디스플레이 어댑터 드라이버는, D3DSWAPEFFECT_DISCARD 및 D3DSWAPEFFECT_COPY 에 근거하는 풀 스크린 스왑 체인에 대해서 Present 처리를 처리 하기 위해서 플립핑을 사용하는 경우가 있다.

지금까지의 설명은, D3DSWAPEFFECT_FLIP 로 생성 된 풀 스크린 스왑 체인을 사용하는 일반적인 케이스에 적용된다.

윈도우 스왑 체인 및 풀 스크린 스왑 체인의 다양한 스왑 이펙트에 대한보다 일반적인 설명은, 「D3DSWAPEFFECT 」를 참조할것.



© 2002 Microsoft Corporation. All rights reserved.
↑TOP