Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

codingfarm

기본지식 - 텍스처 자원 뷰(Multisampling) 본문

computer graphics/DirectX11

기본지식 - 텍스처 자원 뷰(Multisampling)

scarecrow1992 2020. 11. 28. 00:37

렌더링 파이프라인에는 텍스처를 묶을(bind) 수 있는 단계(stage)들이 여럿 있다. 흔한 용도는 텍스처를 렌더 대상으로 묶는것(Direct3D가 텍스처에 렌더링 하는경우)과 셰이더 자원으로서 묶는 것(셰이더 안에서 텍스처를 추출하는 경우)이다. 이 두 가지 용도의 텍스처를 생성할 때에는 다음과 같이 텍스처를 묶을 두 파이프라인 단계를 지정한 결속 플래그(bind flag)를 사용한다.

D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE

 

그런데 사실 텍스처 자원이 파이프라인의 단계에 직접 묶이는 것은 아니다. 실제로는 텍스처가 연관된 자원 뷰를 파이프라인 단계에 묶는다. 어떤 용도이든 Direct3D에서 텍스처를 사용하려면 텍스처의 초기화 시점에서 그 텍스처의 자원 뷰(resource view)를 생성해야 한다. 이러한 추가적인 절차는 효율성을 위한것으로 이런방식을 통해 실행시점 모듈(runtime)과 구동기(driver)가 유효성 점검과 매핑을 뷰 생성 시점에서 수행할 수 있기 때문에 결속 시점에서의 형식 점검이 최소화된다. 고 SDK 문서화에 표현되어있다.

 

그러므로 텍스처를 렌더 대상 뷰(ID3D11RenderTargetView)와 셰이더 자원 뷰(ID3D11ShaderResourceView) 2개의 뷰를 생성하여 렌더 대상과 셰이더 자원을 사용하는 예제를 구성해야한다.

 

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

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

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

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

 

어떤 자원에 대해 특정 뷰를 생성할 수 있으려면 그 자원의 생성 시점에서 해당 결속 플래그를 지정해야 한다. 가령 D3D11_BIND_DEPTH_STENCIL 플래그(텍스처가 깊이, 스텐실 버퍼로서 파이프라인에 묶일 것임을 뜻함)을 지정하지 않고 생성한 자원에 대해서는 ID3D11DepthStencilView를 생성할 수 없다. 무작정 생성을 시도하면 디버그 오류가 발생한다. 텍스처를 렌더 대상과 셰이더 자원으로 사용하는 기법은 추후 학습하겠다.

 

Comments