자원 뷰 (Resource View)
자원 뷰는 자원을 파이프라인에 묶는 데 사용되는 객체이다.
자원 뷰의 종류
자원 뷰는 4개의 종류가 있다.
렌더 타겟 뷰 ( ID3D11RenderTargetView )
깊이/스텐실 뷰 ( ID3D11DepthStencilView )
셰이더 자원 뷰 ( ID3D11ShaderResourceView )
순서 없는 접근 뷰 ( ID3D11UnordereAccessView )
같은 자원이라도 어떤 자원 뷰로 연결되는가에 따라 자원의 용도가 달란진다.
렌더 타겟 뷰 ( ID3D11RenderTargetView )는 렌더링 파이프라인의 출력을 받을 자원을 연결하는 데 쓰인다. 전통적으로 렌더 타겟은 2차원 텍스처이나, 다른 종류의 자원을 렌더 타게으로 연결하는 것도 가능하다. 렌더 타겟 뷰의 구성 옵션으로는 자원의 DXGI 형식이 있으며, 그 외에도 자원의 종류에 따라 다양한 구성 옵션들이 존재한다. 렌더 대상 뷰는 또한 자원의 일부분을 파이프라인에 노출시키는 다양한 메서드들도 제공한다.
깊이/스텐실 뷰 ( ID3D11DepthStencilView )도 렌더 타겟 뷰처럼 렌더링 파이프라인의 출력을 받는 자원을 위한 것이다. 차이는, 렌더 대상 뷰가 색상 값들을 담는 버퍼를 위한 것인 반면 깊이/스텐실 뷰는 깊이와 스텐실 값들을 담는 버퍼를 위한 것이라는 점이다. 깊이/스텐실 버퍼 자원은 빈번하게 쓰이는 렌더링 연산이 깊이 판정과 스텐실 판정을 수행하는 데 사용되며, 이 때문에 파이프라인의 효율성에 아주 중요한 요인이 된다.
셰이더 자원 뷰 ( ID3D11ShaderResourceView )는 파이프라인의 프로그램 가능 셰이더 단계가 자원을 읽을 수 있게 한다. 이 뷰는 예전에 픽셀 셰이더에서 텍스처가 하던 역할, 즉 셰이더 프로그램 안에서 읽고 사용할 수는 있지만 기록하지는 못하는 자료에 해당하는 것이다.
순서 없는 접근 뷰 ( ID3D11UnordereAccessView )는 셰이더 프로그램안에서 자원을 읽음과 동시에 쓰기도 할 수 있다. 게다가, 출력 장소가 미리 정해져 있지 않기 때문에 셰이더 프로그램 안에서 자원 안의 임의의 위치에 scatter 연산을 수행하는 것도 가능하다. 이 자원 뷰는 픽셀 셰이더 단계와 계산 셰이더 단계에만 사용할 수 있다.
자원 뷰의 생성
자원 뷰의 생성에도 ID3D11Device가 사용된다. 이 인터페이스는 각 자원 종류별 생성 메서드를 제공하는데, 이 생성 메서드들은 모두 같은 패턴을 따른다. 자원 뷰 생성 메서드들은 모두 세 개의 매개변수를 받는데, 첫 매개변수는 자원 뷰를 적용할 자원(예를 들면 Texture)을 가리키는 포인터이다. 둘째 매개변수는 자원 뷰를 서술하는 구조체를 가리키는 포인터로, 그 구조체는 해당 종류의 자원 뷰를 위한 모든 옵션을 담는다. 셋째이자 마지막 매개변수는 해당 종류의 자원 뷰 객체에 대한 포인터로, 호출이 성공한 경우 그 포인터가 가리키는 곳에 자원 뷰 객체가 만들어진다.
자원 뷰의 사용
자원 뷰의 구조체는 사용 용도가 다르기 때문에 정의된 구조체도 모두 다르다.
각 해당 자원에 대해 자원 뷰를 이용하여 접근하면 된다.
자원 뷰의 해제
자원과 마찬가지로 COM 인터페이스를 따라가므로, 참조를 해제해야 한다.
'Visualization Programming > DirectX11' 카테고리의 다른 글
DirectX11 - DirectCompute의 스레드 (0) | 2016.03.09 |
---|---|
DirectX11 - 계산 파이프라인란? (0) | 2016.03.08 |
DirectX11 - 자원들의 개요 (2) | 2016.02.18 |
DirectX11 - Device와 DeviceContext (0) | 2015.12.07 |
DirectX11 - Rendering Pipeline의 대략적인 모습 (0) | 2015.12.07 |