DirectX Graphics 레퍼런스 Direct3D C/C++ 레퍼런스 열거형 D3DSWAPEFFECT   [목차열람] [주소복사] [슬롯비우기]
D3DSWAPEFFECT 열거형
 
Microsoft DirectX 9.0

D3DSWAPEFFECT 열거형


스왑 이펙트를 정의한다.

구문

typedef enum _D3DSWAPEFFECT {
    D3DSWAPEFFECT_DISCARD = 1,
    D3DSWAPEFFECT_FLIP = 2,
    D3DSWAPEFFECT_COPY = 3,
    D3DSWAPEFFECT_FORCE_DWORD = 0xFFFFFFFF
} D3DSWAPEFFECT;

정수

D3DSWAPEFFECT_DISCARD

스왑 이펙트의 D3DSWAPEFFECT_FLIP 또는 D3DSWAPEFFECT_COPY 를 사용해 스왑 체인을 생성 했을 경우, 런타임은 IDirect3DDevice9::Present 처리가 백 버퍼의 내용에 영향을 주지 않는 것을 보증한다. 다만, 특히 윈도우 스왑 체인의 플립 의미들이나, 풀 스크린 스왑 체인의 코피세만티스크를 처리 하는 경우는, 이 보증을 채우기 위해서(때문에) 상당한 비디오 메모리의 오버헤드나 처리의 오버헤드를 수반하는 일이 있다. 애플리케이션은 D3DSWAPEFFECT_DISCARD 스왑 이펙트를 사용하는 것으로, 이러한 오버헤드를 회피할 수가 있어 가장 효율적인 스왑 체인의 표현 방법을 디스플레이 드라이버측에서 선택할 수 있다. 또, 이것은,D3DPRESENT_PARAMETERSMultiSampleType 멤버에 D3DMULTISAMPLE_NONE 이외의 값을 지정했을 때에 사용할 수 있는 유일한 스왑 이펙트이다.

D3DSWAPEFFECT_FLIP 를 사용하는 스왑 체인과 같이, D3DSWAPEFFECT_DISCARD 를 사용하는 스왑 체인은 복수의 백 버퍼를 가지고 있는 일이 있어, 이러한 버퍼에는 IDirect3DDevice9::GetBackBuffer 또는 IDirect3DSwapChain9::GetBackBuffer 를 사용해 액세스 할 수 있다. 스왑 체인은 기다리는 행렬 (큐)로서 볼 수가 있어 이 큐 중(안)에서는, 다음의 Present 명령으로 표시되는 백 버퍼에 항상 인덱스 0 이 붙어, 일단 표시된 버퍼는 큐로부터 파기된다.

이 스왑 이펙트를 사용하는 애플리케이션에서는, 파기되는 백 버퍼의 내용을 추측할 수 없기 때문에, 백 버퍼를 표시하는 Present 처리를 호출하기 전에는, 백 버퍼 전체를 갱신할 필요가 있다. 이것은 강제적인 것은 아니지만, 디버그 버전의 런타임은, 파기되는 백 버퍼의 내용을 임의의 데이터로 덧쓰기할 수 있으므로, 개발자는 애플리케이션이 백 버퍼 표면 전체를 올바르게 갱신하고 있는 것을 확인할 수 있다.

D3DSWAPEFFECT_FLIP

스왑 체인에는 복수의 백 버퍼가 포함되는 일이 있어, 프론트 버퍼를 포함한 순환 기다리는 행렬 (큐)로서 볼 수가 있다. 이 큐내에서는, 백 버퍼에는 항상 0 으로부터 (n - 1)의 순서에 번호가 붙는다. 여기서,n 는 백 버퍼의 수이다. 따라서, 0 은 마지막에 프레젠테이션 하고 나서 가장 긴 시간이 경과하고 있는 버퍼를 나타낸다. Present 가 불려 가면 큐가 "순환" 되어, 프론트 버퍼가 백 버퍼 (n - 1)가 되어, 백 버퍼 0 이 새로운 프론트 버퍼가 된다.

D3DSWAPEFFECT_COPY

이 스왑 이펙트는, 단일의 백 버퍼를 구성하는 스왑 체인 에 대해서만 지정할 수 있다. 윈도우 스왑 체인의 경우도 풀 스크린 스왑 체인의 경우도, 런타임은 복사 베이스의 Present 처리에 의한 의미들을 보증한다. 즉, 백 버퍼의 내용이 변경될 것은 없고, 플립 베이스의 Present 처리로 행해지도록(듯이) 프론트 버퍼의 내용으로 옮겨놓을 수 있을 것은 없다.

풀 스크린 스왑 체인의 경우, 런타임은 플립 처리와 복사 처리의 편성 (필요에 따라서, 은폐 백 버퍼로 지원 된다)을 사용해 Present 처리를 실시한다. 따라서, 프레젠테이션은 디스플레이 어댑터의 수직귀선과 동기 되어 그 속도는 선택된 프레젠테이션 간격에 의해 제어된다. 다만, D3DPRESENT_INTERVAL_IMMEDIATE 플래그로 지정된 스왑 체인은 예외이다. D3DPRESENT_PARAMETERS 구조체의 FullScreen_PresentationInterval 멤버의 설명을 참조할것. 이 경우,Present 처리는 수직귀선을 대기하지 않고 , 백 버퍼의 내용을 프론트 버퍼에 직접 복사 한다.

D3DSWAPEFFECT_FORCE_DWORD

이 열거형을 강제적으로 32 비트 사이즈에 컴파일 한다. 이 값은 사용되지 않았다.

주의

Present 를 호출한 후의 백 버퍼 상태는, 각 스왑 이펙트에 의해 명확하게 정의되고 있어 Microsoft® Direct3D® 장치가 풀 스크린 스왑 체인과 윈도우 스왑 체인의 어디에서 생성 되었는지를 따라, 이 상태가 영향을 받을 것은 없다. 특히, D3DSWAPEFFECT_FLIP 스왑 이펙트는 윈도우에서도 풀 스크린에서도 똑같이 동작해, Direct3D 런타임은 외부 버퍼를 생성 하는 것으로 이것을 보증하고 있다. 결과적으로, 그러한 악영향을 회피할 수 있는 경우는, 항상 애플리케이션으로 D3DSWAPEFFECT_DISCARD 를 사용하는 것을 추천 한다. 메모리의 소비 및 퍼포먼스의 점에 대해, 이 스왑 체인은 항상 가장 효율적인 것이 이유이다.

D3DSWAPEFFECT_FLIP 또는 D3DSWAPEFFECT_DISCARD 를 사용하는 애플리케이션에서는, 풀 스크린의 목적지 알파가 동작 하면 기대해서는 안 된다. 즉,D3DRS_DESTBLEND 렌더링 스테이트는 예측대로 동작하지 않는다. 이것은, 이러한 스왑 이펙트를 가지는 풀 스크린 스왑 체인에는, 드라이버로부터 본 명시적인 픽셀 포맷이 없기 때문에이다. 드라이버는, 알파 채널이 없는 디스플레이 포맷을 맡지 않으면 안 되는 것이라고 추측한다. 이것을 회피하려면 , 다음의 순서를 실행한다.

열거형의 정보

헤더d3d9types.h
최저한의 operating system Windows 98

참조

IDirect3DDevice9::Reset ,D3DPRESENT_PARAMETERS


© 2002 Microsoft Corporation. All rights reserved.
↑TOP