Direct3D는 low-level 그래픽 api(Application Programming Interface)로, GPU를 제어하고 프로그래밍하는데 사용되며 하드웨어 가속을 사용하여 가상 3d 세계를 렌더링할 수 있게 한다.
이 때, Direct3D는 COM(Component Object Model) 객체를 기반으로 하는 api이다.
이 때, Direct3D는 COM(Component Object Model) 객체를 기반으로 하는 api이다.
COM 객체
COM은 객체 지향적인 인터페이스 표준으로, 여러 언어에서 사용될 수 있도록 설계되었다.
COM은 DirectX가 사용하는 대부분의 객체를 포함한다.
COM 객체는 인터페이스를 통해서만 조작할 수 있다.
COM은 DirectX가 사용하는 대부분의 객체를 포함한다.
COM 객체는 인터페이스를 통해서만 조작할 수 있다.
모든 COM 인터페이스는 IUnknown COM interface를 상속한다.
Comptr class
•#include <wrl.h>, Microsoft::WRL::ComPtr로 선언되어 있다.
#include <wrl.h>
using Microsoft::WRL::ComPtr;
ComPtr<ID3D12Device> device; // 스마트 포인터 선언
•Comptr에는 세가지 중요한 메소드가 존재한다.
•Get : 원래 포인터를 반환한다.
•Reset : Comptr 스마트 포인터가 보유한 COM객체를 해제하고, 내부 포인터를 nullptr로 설정한다.
•GetAddressOf : 포인터의 주소를 반환한다. 현재 보유한 COM 포인터를 초기화할 때 사용되는 함수이다.
using Microsoft::WRL::ComPtr;
ComPtr<ID3D12Device> device; // 스마트 포인터 선언
D3D12CreateDevice(nullptr, D3D_FEATURE_LEVEL_11_0, IID_PPV_ARGS(&device)); // 객체 생성
•Get : 원래 포인터를 반환한다.
ID3D12Device* rawDevice = device.Get();
•GetAddressOf : 포인터의 주소를 반환한다. 현재 보유한 COM 포인터를 초기화할 때 사용되는 함수이다.
device.Reset(); // 기존 객체 해제
// 새로운 ID3D12Device 객체 생성
HRESULT result = D3D12CreateDevice(
nullptr,
D3D_FEATURE_LEVEL_11_0,
IID_PPV_ARGS(device.GetAddressOf()) // 새로운 포인터 할당
// 새로운 ID3D12Device 객체 생성
HRESULT result = D3D12CreateDevice(
nullptr,
D3D_FEATURE_LEVEL_11_0,
IID_PPV_ARGS(device.GetAddressOf()) // 새로운 포인터 할당
); // HRESULT는 COM기반 함수들이 반환하는 에러 코드이다.
댓글 없음:
댓글 쓰기