텍스처 관련

DirectX11/Direct3D 초기화 2016. 7. 3. 17:31

자원 뷰 (Resource View)

자원 뷰는 자원을 파이프라인에 묶는데(bind) 사용되는 객체이다.


자원뷰의 종류

렌더 타겟 뷰 ( ID3D11RenderTargetView )

깊이/스텐실 뷰 ( ID3D11DepthStencilView )

셰이더 자원 뷰 ( ID3D11ShaderResourceView )

순서 없는 접근 뷰 ( ID3D11UnordereAccessView )


각각의 자원뷰에 대한 설명은 참고 링크에 있다.


자원 뷰들은 독립적으로 두가지 일을 한다.

1. Direct3D에게 자원의 사용방식(즉, 파이프라인의 어떤 단계에 묶을 것인지)을 알려주는 것

2. 생성 시점에서 무형식을 지정한 자원 형식의 구체적인 형식을 결정하는 것

( 무형식 자원의 경우 텍스처 원소를 한 파이프 라인 단계에서는 부동소수점 값으로서 사용하고 다른 단계에서는 정수로서 사용하는 것이 가능함을 뜻한다.)


D3D11 에선 리소스를 생성하고 자원 뷰를 사용해서 파이프 라인에 묶는다.

묶는 방법은

D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE 

위 처럼 단계를 지정한 결속 플래그를 사용해서 묶는다.


즉, 텍스처를 사용하기 위해선 그 텍스처에 자원뷰가 필요하고 자원뷰를 파이프라인에 묶어서 사용한다.(텍스처가 파이프라인에 묶이는것이 아니라 자원뷰가 묶이는 것)


텍스처의 플래그가 설정되지 않은 뷰에 대해선 뷰를 생성할 수 없다.

텍스처가 D3D11_BIND_DEOTG_STENCIL 플래스가 설정되지 않았으면 ID3D11DepthStencilView를 생성할 수 없다.


D3D11에서 이렇게 하는 이유는?

실행시점 모듈(런타임)과 구동기(드라이버)가 유효성 점검과 매핑을 뷰 생성 시점에서 수행할 수 있기 때문에 결속 시점에서의 형식 점검이 최소화된다.

따라서 텍스처를 렌더대상과 쉐이더 자원으로 사용할 때는 두 개의 뷰를 생성할 필요가 있다.


* 참고

[리소스 뷰에 대한 대략적인 설명]

http://grandstayner.tistory.com/entry/DirectX11%EC%9D%98-%EC%9E%90%EC%9B%90-%EB%B7%B0


[D3D11 텍스쳐 생성]

http://blog.naver.com/sorkelf/40169749877


[자원의 종류 등등]

http://grandstayner.tistory.com/entry/DirectX-11%EC%9D%98-%EC%9E%90%EC%9B%90%EB%93%A4%EC%9D%98-%EA%B0%9C%EC%9A%94


그 외 : 다중 표본화


이해한 것으로는 다중 표본화란 픽셀 하나만 가지고 하나의 픽셀을 출력하는 것이 아니라 화면을 부드럽게 만들기 위해 픽셀의 인접 픽셀들을 이용해서 화면을 부드럽게 출력하는 것이 아닐까 싶다...

 표본화를 많이 할수록 품질은 좋아지겠지만 속도가 느려진다.

#define D3D11_MAXMULTISAMPLE_SAMPLE_COUNT ( 32 )

 최대 표본 갯수는 32로 정해져 있지만 표본을 4개에서 8개 추출해서 하는 경우가 많다.

(심오한 내용으로 보이니 조금만 알고가는 정도로 넘어가자)

'DirectX11 > Direct3D 초기화' 카테고리의 다른 글

화면 출력  (0) 2016.07.02
Direct3D 기본  (0) 2016.07.02
posted by 알쿠미