프레젠테이션 파라미터를 기술한다.
구문
typedef struct _D3DPRESENT_PARAMETERS_ {
UINT BackBufferWidth, BackBufferHeight;
D3DFORMAT BackBufferFormat;
UINT BackBufferCount;
D3DMULTISAMPLE_TYPE MultiSampleType;
DWORD MultiSampleQuality;
D3DSWAPEFFECT SwapEffect;
HWND hDeviceWindow;
BOOL Windowed;
BOOL EnableAutoDepthStencil;
D3DFORMAT AutoDepthStencilFormat;
DWORD Flags;
UINT FullScreen_RefreshRateInHz;
UINT PresentationInterval;
}
구문은 위와 같고 총14정도의 인자를 받을수 있는 구조체이다.
중요한 인자를 굳이 선택하라면 위의 빨간색 부분들
1. BackBufferFormat
- 백버퍼의 포맷, 다양한 포맷방법이 있으나 그 방법들은 D3DFORMAT를 참조하기로 한다.
실제 기본 튜토리얼에는 포맷 방식으로 D3DFMT_UNKNOWN 을 지정하고 있다. 현재의 디스플레이 모드 포맷을 사용한다는 의미이다.
2. SwapEffect
- D3DSWAPEFFECT열거형에는 다음과 같은 3가지 타입이 있고, 하나를 선택해서 사용할 수 있다.
1) D3DSWAPEFFECT_DISCARD
: 오버헤드를 회피할 수가 있어 가장 효율적인 스왑 체인의 표현 방법을 디스플레이 드라이버측에서 선택할 수 있다. 또, 이것은,D3DPRESENT_PARAMETERS 의 MultiSampleType 멤버에 D3DMULTISAMPLE_NONE 이외의 값을 지정했을 때에 사용할 수 있는 유일한 스왑 이펙트이다
2) D3DSWAPEFFECT_FLIP
: 스왑 체인에는 복수의 백 버퍼가 포함되는 일이 있어, 프론트 버퍼를 포함한 순환 기다리는 행렬 (큐)로서 볼 수가 있다. 이 큐내에서는, 백 버퍼에는 항상 0 으로부터 (n - 1)의 순서에 번호가 붙는다. 여기서,n 는 백 버퍼의 수이다. 따라서, 0 은 마지막에 프레젠테이션 하고 나서 가장 긴 시간이 경과하고 있는 버퍼를 나타낸다. Present 가 불려 가면 큐가 "순환" 되어, 프론트 버퍼가 백 버퍼 (n - 1)가 되어, 백 버퍼 0 이 새로운 프론트 버퍼가 된다.
3) D3DSWAPEFFECT_COPY
: 이 스왑 이펙트는, 단일의 백 버퍼를 구성하는 스왑 체인 에 대해서만 지정할 수 있다. 윈도우 스왑 체인의 경우도 풀 스크린 스왑 체인의 경우도, 런타임은 복사 베이스의 Present 처리에 의한 의미들을 보증한다. 즉, 백 버퍼의 내용이 변경될 것은 없고, 플립 베이스의 Present 처리로 행해지도록(듯이) 프론트 버퍼의 내용으로 옮겨놓을 수 있을 것은 없다.
3. Windowed
- 애플리케이션이 윈도우 모드로 동작하는 경우는 TRUE, 풀 스크린 모드로 동작하는 경우는 FALSE 이다.
4. EnableAutoDepthStencil
- 이 값이 TRUE 의 경우, Microsoft® Direct3D® 는 애플리케이션에 대한 깊이 버퍼를 관리한다.
생성되면 스텐실버퍼를 생성한다.(EnableAutoDepthStencil 가 TRUE 의 경우,AutoDepthStencilFormat 는 유효한 스텐실 포맷이 아니면 안된다. )
5. AutoDepthStencilFormat
- D3DFORMAT 열거형의 멤버. 장치가 생성 하는 자동 스텐실 표면의 포맷이다. EnableAutoDepthStencil 가 TRUE 가 아닌 경우, 이 멤버는 무시된다.
위의 다섯인자들이 주로 사용되거나 중요한 인자들이다.
다이렉트 SDK의 첫번째 튜토를 보면 아래와 같이 사용되어 짐을 알수 있다.
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
위의 d3dpp 다이렉트 디바이스를 만드는데 사용되어 진다.