DirectX 10

Render Target, Depth/Stencil Buffer Clear

공대나온남자 2011. 7. 23. 19:10

DX9 에서는 IDirect3DDevice9::Clear() 함수 호출 한번으로 현재 설정된 모든 렌더타겟, 깊이스텐실 버퍼를 모두 clear 할 수 있다.


하지만 DX10 에서는 명시적으로 개별 버퍼에 대해 Clear를 수행해주어야 한다.


void ClearRenderTargetView(
  ID3D10RenderTargetView *pRenderTargetView,
  const FLOAT ColorRGBA[4]
);

void ClearDepthStencilView(
  ID3D10DepthStencilView *pDepthStencilView,
  UINT ClearFlags,
  FLOAT Depth,
  UINT8 Stencil
);

또 다른 점은, IDirect3DDevice::Clear() 함수를 보면,
HRESULT Clear(
  DWORD Count,
  CONST D3DRECT * pRects,
  DWORD Flags,
  D3DCOLOR Color,
  float Z,
  DWORD Stencil
);
DWORD(D3DCOLOR==DWORD) 값을 Clear 색으로 사용하지만 DX10 에서는 float 값을 사용한다. 
즉, 1보다 큰 값으로 Clear 할 수 있다. 물론 테스트해보진 않았다.
또 IDirect3DDevice::Clear() 에서는 Clear할 영역을 지정할 수 있지만 DX10 함수에는 없다.
근데 이 기능은 한번도 써본적이 없다. 굳이 필요하면 스크린 사각형 그려서 하는 수 밖에 없는 듯 하다.