DirectX에서 SwapChain을 생성할때 후면버퍼의 Format을 설정하는 부분이 있다.
1
2
3
4
5
6
7
8
9
|
// Swap chain
DXGI_SWAP_CHAIN_DESC sd;
sd.BufferDesc.Width = m_width;
sd.BufferDesc.Height = m_height;
sd.BufferDesc.RefreshRate.Numerator = 60;
sd.BufferDesc.RefreshRate.Denominator = 1;
sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
sd.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
sd.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
|
cs |
책에서나 다른 예제에서는 대충 "DXGI_FORMAT_R8G8B8A8_UNORM 을 자주 쓴다." 라는 말만 적혀있지, 왜 그걸 자주 쓰며 다른 Format에는 어떤 것이 있는지는 잘 나와있지 않다.
호기심에 DXGI_FORMAT의 다른 값을 넣어봤다.
DXGI_FORMAT_R8G8B8A8_SNORM, DXGI_FORMAT_R8G8B8A8_UINT 등등...
결과는 SwapChain 생성에 실패했다.
구글링을 해보았지만, 대부분 "DXGI_FORMAT_R8G8B8A8_UNORM을 기본으로 사용한다" 라는 튜토리얼 형식의 똑같은 설명 뿐이고 다른 Format을 사용하는 예제는 보이지 않았다.
내가 중간에 잘못 쓴 코드가 있는 것인지, 컴퓨터가 문제인지 알 수 없어서 한참을 찾아본 끝에서야 MSDN에서 관련 내용을 찾을 수 있었다.
This structure is used by the GetDisplayModeList and FindClosestMatchingMode methods. The following format values are valid for display modes and when you create a bit-block transfer (bitblt) model swap chain. The valid values depend on the feature level that you are working with.
|
즉, SwapChain의 후면버퍼와 같이 디스플레이에 관련된 DXGI_FORMAT은 위에 나열된 형식밖에 되지 않는다는 것.
DirectX의 버전이 올라가면서 표현 가능한 색상의 비트수만 커질뿐, 본질적인 형태는 크게 변하지 않은 듯 하다.
그래서 보통 "대부분의 경우에는 DXGI_FORMAT_R8G8B8A8_UNORM을 사용한다" 라고 설명하고 사용한 것 같다.
DXGI_FORMAT_R8G8B8A8_SNORM나 DXGI_FORMAT_R8G8B8A8_UINT와 같은 Format은 아예 지원하지 않는 형식이기 때문에 SwapChain을 만들지 못하고 오류가 발생한 것으로 보인다.
https://docs.microsoft.com/ko-kr/previous-versions/windows/desktop/legacy/bb173064(v=vs.85)
'프로그래밍 > DirectX' 카테고리의 다른 글
DirectX와 HLSL간의 행렬순서와 연산 (0) | 2020.03.06 |
---|---|
DXGI_MODE_SCANLINE_ORDER, DXGI_MODE_SCALING의 Flags 종류 (0) | 2020.02.26 |
게임을 위한 Windows와 DirectX SDK 블로그 (0) | 2019.07.21 |