2011-09-22 11 views
1

저는 DirectX 11의 초보자이고 2 장의 DirectX 11 시작하기 책자에 이어 다음을 사용하여 버퍼를 만드는 코드가 있습니다 코드 :DirectX 11에서 SwapChain (DXGI_SWAP_CHAIN_DESC)에 두 개의 버퍼를 작성하고 등록하는 방법

DXGI_SWAP_CHAIN_DESC swapChainDesc; 
ZeroMemory(&swapChainDesc, sizeof(swapChainDesc)); 
swapChainDesc.BufferCount = 1; 
swapChainDesc.BufferDesc.Width = width; 
swapChainDesc.BufferDesc.Height = height; 
swapChainDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; 
swapChainDesc.BufferDesc.RefreshRate.Numerator = 60; 
swapChainDesc.BufferDesc.RefreshRate.Denominator = 1; 
swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; 
swapChainDesc.OutputWindow = hwnd; 
swapChainDesc.Windowed = true; 
swapChainDesc.SampleDesc.Count = 1; 
swapChainDesc.SampleDesc.Quality = 0; 

내 질문은 하나 BufferDesc (DXGI_MODE_DESC 구조체)가 같이 description of swap chain에 분명히 하나의 버퍼 공간이 있다는 것입니다. 따라서 BufferCount가 2 이상으로 설정된 경우 두 번째 버퍼가 어떻게 등록됩니까? 다른 DXGI_SWAP_CHAIN_DESC를 사용합니까? 몇 가지 예제 코드를 게시하십시오.

또한 BufferCount에는 UNIT 유형이 있습니다. 이는 두 개 이상의 버퍼를 추가 할 수 있음을 의미합니다. 더블 버퍼링 기법에서는 2 개의 버퍼가 사용되지만, 하나의 버퍼가 그려지는 데 사용되며, 다른 버퍼는 장면에 표시되는 데 사용되며 버퍼는 스왑됩니다. 두 개 이상의 버퍼의 사용, 장점은 무엇입니까?

답변

2

버퍼가 많으면 일반적으로 속도가 향상됩니다. 버퍼가 스와핑 중일 때는 버퍼를 모두 렌더링 할 수 없습니다. 완전히 교체 될 때까지 기다려야합니다. 이렇게하면 다른 프레임을 렌더링하는 데 시간이 걸릴 수 있습니다. 트리플 버퍼링이 바로 이것입니다. 입체적인 작업을 할 때 최대 4 (6?) 버퍼까지 갈 수 있습니다. 더 이상 쓸모 없을 것입니다.

잠시 동안 DX를 사용하지 못했지만 swapChainDesc.BufferCount가 값으로 설정된 경우 자동으로 처리하는 것을 기억합니다. 또한, 이것은 2 장만 알고 있지만 2 개의 버퍼를 사용하십시오. 그들이 말하는 것과 상관없이 코드는 변경되지 않으며 속도가 향상됩니다. 어쨌든 두 개의 버퍼를 갖는 것이 좋습니다. 당신의 유일한 버퍼가 다음 번 VBlank에서 완전히 렌더링 될 수 없다면 어떻게 될까요? 죄송합니다. 누락 된 이미지입니다.

+0

"최대 4 개까지 갈 수 있습니까?"-이 번호를 어디에서 가져 왔습니까? – rkellerm

+1

@ rursw1 : 4 개 이상의 버퍼를 사용하면 일반적으로 성능이 저하되고 입력 지연이 심각해집니다. 따라서 "4 개의 버퍼를 넘지 않는 것이 좋습니다.하지만 원하는 경우 완전히 수행 할 수 있습니다". – pikzen