이번 회에서는 일단 소스를 좀 나열해 보겠습니다.
일단 변수들은 다음과 같습니다.
이어지는 상황은 다음과 같습니다
그리고 다음에 이어지는 상황을 다시 보겠습니다.
이어졌던 소스는 Depth-Stencil Buffer 생성을 위한 작업이였습니다.
역시나 낯선 개념이 등장하는데, 바로 'View' 입니다.
우리가 앞서 생성했던 BackBuffer 와 Depth-Stencil Buffer 에는 CreatexxxxxxxView() 형태로
작업을 해주고 있습니다.
하나의 뷰는 렌더링 작업 중에 파이프라인에서 접근할 수 있는 리소스 일부분을 의미합니다.
더 정확한 개념을 위해서 아래의 계층구조를 한번 살펴보시기 바랍니다.
우리가 사용하는 모든 리소스들은 사실 ID3D11Resource 를 상속받아서 구성됩니다.
텍스쳐나 각종 버퍼 등이 이에 속한다고 할 수 있습니다.
( ID3D11Buffer, ID3D11Texture )
ID3D11View 를 상속받아서 구현되는 것들은 ID3D11RenderTargetView, ID3D11DepthStencilView, ID3D11ShaderResourceView 가 있습니다.
나열하고 보니깐 약간 감이 오시지 않으십니까?
이렇게 분리가 되었는데, 사실 ID3D11View 는 ID3D11View::GetResource() 라는 멤버함수를 가지고 있습니다.
결국 ID3D11View는 ID3D11Resource 와 개념적으로 메모리 데이터는 동일하다고 볼 수 있습니다.
그러다 보니 이 두가지 인터페이스를 구별해서 설명하기가 무척 난해합니다.
비슷하면서도 실질적으로 수행되는 역활에는 엄연한 구분이 있으니 말이죠...
‘이렇게 분리함으로써 역할 구분이 명확해서 코드의 품질이 향상되었다’ 라고 말할 수 있습니다.
조금 더 좋은 방향으로 생각해 본다면,
아마도 내부적으로 조금 더 최적화 된 위치에 메모리를 할당해 주지 않을까? 라는 의심도 해봅니다.
( 왜 그런지 이유를 꽤 오래 생각했지만, 답을 찾지 못했습니다..T.T )
참고로 얘기드리면,
DirectX9 버전까지 유용하게 사용되던 메모리 풀의 개념이 이제는 CPU 에서 읽기/쓰기 작업,
GPU 에서 읽기/쓰기 작업이 가능여부를 설정하는 개념형태로 변경되었습니다.
이것에 대한 얘기는 다음 번에 저나 다른 분이 해주실 겁니다.
( DirectX11 파트에는 저 말고도 한분이 더 계십니다…^^ )
위의 코드에서 View 계열들은 GPU 만 읽기/쓰기 작업이 가능한 형태로 그래픽 카드상에
메모리를 할당했습니다.
결국 위의 작업은 바로 아래에 나오는 작업을 위해서 필요했던 것입니다.
보시듯이 모두 View 계열의 인터페이스를 설정했습니다.
< 마치면서... >
다음주는 한주 쉬게 될 것입니다.
스터디 내부 발표가 있어서...쿨럭~
'DirectX 11' 카테고리의 다른 글
[DX11_#2]D3D Buffer( 2 / 2 ) (0) | 2009.10.13 |
---|---|
[DX11_#1]D3D Buffer( 1 / 2 ) (0) | 2009.09.22 |
[JumpToDX11-3] Feature Level (0) | 2009.08.31 |
[JumpToDX11-2]DeviceContext...넌 누구냣!! (1) | 2009.08.24 |
[JumpToDX11-1] 사라진 Direct3D 오브젝트를 찾아서... (8) | 2009.08.17 |