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

Direct3D의 초기화 - 렌더 대상 뷰의 생성 본문

computer graphics/DirectX11

Direct3D의 초기화 - 렌더 대상 뷰의 생성

scarecrow1992 2020. 11. 28. 21:02

어떤 자원을 파이프라인의 단계에 직접 묶는것이 아니다. 대신 자원에 대한 뷰를 생성하고 그 뷰를 파이프라인 단계에 묶어야 한다. 좀더 구체적으로, 후면 버퍼를 파이프라인의 출력 병합기(output merger) 단계에 묶으려면(그래야 Direct3D가 버퍼에 뭔가를 그릴 수 있다) 우선 후면 버퍼에 대한 렌더 대상 뷰를 생성해야 한다.

다음은 렌더대상뷰를 생성하는 코드의 예이다.

ID3D11RenderTargetView* mRenderTargetView;
ID3D11Texture2D* backBuffer;
mSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D),
reinterpret_cast<void**>(&backBuffer));
md3dDevice->CreateRenderTargetView(backBuffer, 0, &mRenderTargetView);
ReleaseCOM(backBuffer);   

위 코드의 의미는 아래와 같다.

 

1. IDXGISwapChain::GetBuffer 메서드를 호출해서 교환 사슬을 가리키는 포인터를 얻는다. 이 메서드의 첫 매개변수는 얻고자 하는 후면 버퍼의 색인이다. 지금예에서는 후면 버퍼가 하나이므로 그냥 0을 지정하면 된다. 둘째 매개변수는 버퍼의 인터페이스 형식을 지정하는 것으로, 일반적으로는 항상 2차원 텍스처를 위한 ID3D11Texture2D가 쓰인다. 셋째 매개변수는 후면 버퍼를 가리키는 포인터를 돌려준다.

 

2. 렌더 대상 뷰를 생성하는 메서드는 ID3D11Device::CreateRenderTargetView이다.

이 메서드의 첫 매개변수는 렌더 대상으로 사용할 자원이다. 지금 예는 후면 버퍼에 대한 렌더 대상 뷰를 생성하는 것이므로 방금 얻은 후면 버퍼를 지정한다.

둘째 매개변수는 D3D11_RENDER_TARGET_VIEW_DESC 구조체를 가리키는 포인터이다. 이 구조체는 특히 자원에 담긴 원소들의 자료 형식을 서술한다. 형식을 완전히 지정해서 자원을 생성했다면(즉 무형식 자원이 아니라면) 이 매개변수에 NULL 값을 지정해도 된다. 그러면 메서드는 주어진 자원을 생성했을 때 지정한 형식을 적용해서, 자원의 첫 번째 밈맵 수준에 대한 뷰를 생성한다(후면 버퍼는 밉맵 수준이 하나뿐이다, 밉맵에 대해서는 추후 배울것이다.). 지금 예의 경우 후면 버퍼는 형식을 지정해서 생성한 자원이므로 NULL 값을 지정했다.

셋째 매개변수는 생성된 렌더 대상 뷰를 돌려준다.

 

3. IDXGISwapChain::GetBuffer를 호출하면 후면 버퍼에 대한 COM 참조 횟수(reference count)가 증가한다. 후면 버퍼를 다 사용하고 난 후 코드의 끝에서 후면 버퍼를 해제하는(ReleaseCom)이유가 바로 이것이다.

 

 

Comments