direct3D device는 COM interface를 통해서 direct resource objects에 접근한다.
각 device의 instance는 GPU에 연관되어 있다.
direct3D device context는 그리기 위한 COM interface이다.
또한 resource를 GPU의 고정 메모리 위치에 mapping/unmapping(alloc, release) 하기 위해서도 사용된다.
swap chain은 front buffer와 back buffer를 다루기 위한 interface object이다.
front buffer와 back buffer는 모니터에 그리기 위한 render target resources이다. flip을 통해서 매 시간마다 호출되며 back buffer와 front buffer는 변경된다.
render target view interface는 direct3D에 render target에 대한 속성(properties)이다. 렌더링 파이프라인의 출력을 받을 자원을 연결하는데 사용된다. ex> 2d texture, ...
depth buffer z-buffer를 포함하며, 숨겨진 장면을 제거하는(Hidden Surface Removal, HSV)을 하는데 사용된다.
depth buffer는 옵션으로 stencil 버퍼를 사용하여 shadow를 그리기도 한다.
depth/stencil view interface는 depth/stencil resource를 접근하기 위한 속성(properties)이다.
https://github.com/microsoft/DirectXTK/wiki/The-basic-game-loop
COM이란 바이너리 표준 프로토콜을 통해서 여러 언어에서도 접근이 가능하게 만들어졌다.
COM interface는 가상 함수 테이블과 마찬가지로 내용은 구현되어 있지 않고 함수들만 선언되어 있다. 따라서 COM Client를 통해서 Com Server에 요청하여 COM Object(instance)를 만들고 사용하는 방식이다.
COM 컴포넌트는 시스템 레지스트리에 등록되어 컴포넌트의 CLSID를 통해서 클라이언트가 해당 COM module을 찾을 수 있다.
COM 컴포넌트는 GUID를 통해서 인터페이스 클래스 식별자를 나타내는 16바이트 정수열로 운영체제가 구분한다.
일반적으로 ComPtr을 통해서 C++의 smart pointer와 같이 다룬다.
https://m.blog.naver.com/ymy203/70104910502
https://change-words.tistory.com/entry/Component-Object-Model
https://lipcoder.tistory.com/9
DirectX에서 자원은 buffer와 texture로 나눠서 사용하며, 파이프라인에 attach하며, GPU의 입력과 출력으로 사용되는 메모리 블록이다. 각 자원은 세분화 되며 세분화되면서 생기는 옵션들이 달라 설정해줘야 한다.
모든 메모리 자원의 생성은 IDID11Device interface가 책임진다. 모든 자원 생성 메서드는 세 개의 매개변수를 받는다.
첫 매개변수는 자원 생성에 관한 모든 옵션을 지정하는 resource description 구조체다. (자원 종유마다 description이 다르다.)
두 번째 매개변수는 D3D11_SUBRESOURCE_DATA 구조체 포인터로 초기화하는데 사용된다.
마지막 매개변수는 결과에 대한 포인터가 반환된다.

여러 자원 중 Buffer에 대한 자원을 생성하는 함수이다.


CPU/GPU 접근 여부에 대한 설정이다.
default는 GPU에서만 읽고/쓰기되며 기본 값이다.

Buffer 데이터 중 어떤 것에 대한 버퍼인지 나타낸다.

기타 옵션으로 데이터 공유 용도로 사용할 수 있다.
https://learn.microsoft.com/ko-kr/windows/win32/api/d3d11/nf-d3d11-id3d11device-createbuffer
vertices buffer, indices buffer, constant buffer, etc..를 제외한 나머지 자원은 resource view를 통해서 자원을 렌더링 파이프라인에 연결해야 한다.
render target view(RTV)는 rendering에 대한 output을 받을 자원을 연결하는데 사용된다.
depth stencil view(DSV) depth/stencil에 대한 output을 받을 자원을 연결하는데 사용된다.
shader resource view(SRV)는 programable shadle step에서 자원을 읽을 수 있게 한다. (only-read) ex> texture
undordered access view(UAV)는 shader resource view와 비슷한데 읽기와 쓰기가 모두 가능하다. 이 resource는 pixel shader와 compute shader step에만 사용할 수 있다.
resource view 생성에도 ID3D11Device가 사용된다.

