DirectX 10

Rendering to multi window in DX10

공대나온남자 2011. 3. 13. 01:08

* 윈도우별로 SwapChain을 생성하여 사용하면 된다. DX10에서는 SwapChain에 윈도우를 직접 지정할 수 있다.

 

 

* 처리 순서

   1. 윈도우별로 SwapChain과 RenderTargetView를 생성

   2. RenderTarget 설정

   3. 렌더링

   4. IDXGISwapChain::Present() 호출

   5. 윈도우별로 2~4 수행

 

 

* 코드 예

 

   1. SwapChain, RenderTargetView 생성

 RECT rc;
 GetClientRect( hWnd, &rc );
 UINT nScreenWidth = rc.right - rc.left;
 UINT nScreenHeight = rc.bottom - rc.top;


 DXGI_SWAP_CHAIN_DESC sd;
 ZeroMemory( &sd, sizeof( sd ) );

 sd.BufferCount = 1;
 sd.BufferDesc.Width = nScreenWidth;
 sd.BufferDesc.Height = nScreenHeight;
 sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
 sd.BufferDesc.RefreshRate.Numerator = 60;
 sd.BufferDesc.RefreshRate.Denominator = 1;
 sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
 sd.OutputWindow = hWnd;
 sd.SampleDesc.Count = 1;
 sd.SampleDesc.Quality = 0;
 sd.Windowed = TRUE; 


 IDXGISwapChain* pSwapChain;
 pDXGIFactory->CreateSwapChain(pd3dDevice, &sd, &pSwapChain); 

 

 

 ID3D10Resource * pBB;

 pSwapChain->GetBuffer( 0, __uuidof( ID3D10Texture2D ), ( LPVOID* )&pBB);

 ID3D10RenderTargetView * pView;
 D3D10_RENDER_TARGET_VIEW_DESC rtd;
 rtd.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
 rtd.ViewDimension = D3D10_RTV_DIMENSION_TEXTURE2D;
 rtd.Texture2D.MipSlice = 0;

 

pD3D10Device->CreateRenderTargetView(pBB, &rtd, &pView), 

 

 

   2. RenderTarget 설정 

  pD3D10Device->OMSetRenderTargets(1, &pView, 0);

 

 

   3. IDXGISwapChain::Present() 호출 

pSwapChain->Present( 0, 0 );