D2D와 게임엔진

엔진공부 1일차 (feat. Direct2D 사용하기)

햄시나 2024. 8. 5. 10:52

COM (Component Object Model)

개념 : 마이크로소프트가 언어에 상관없이 쓸 수 있게 DLL 내부 개체 함수(인터페이스)를 노출시키는 방식이다.

 

D2D1 DLL의 내부구현이 COM개체이므로, 이를 사용하기 위한 ¹준비과정과 ²생성과정이 필요하다.

 

예)

#include <windows.h>
#include <d2d1.h>
// 코드에서 d2d1.lib 라이브러리를 링크하기
#pragma comment(lib, "d2d1.lib")
// 프로젝트 속성에서 링크하려면 -> 링커 -> 입력 -> 추가 종속성 -> d2d1.lib 추가

// 윈도우 관련 변수,함수
HINSTANCE       _hInst; 
HWND            _hWnd;

//  D2D 개체(객체, object) 인터페이스 포인터 변수들...
ID2D1Factory* 		_pD2DFactory;
ID2D1HwndRenderTarget* 	_pRenderTarget;

BOOL InitDirect2D()
{
	HRESULT hr = S_OK;
	// COM 사용 시작
	hr = CoInitialize(NULL);
    //생성과정
    hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &_pD2DFactory);
    
    RECT rc;
	GetClientRect(g_hWnd, &rc);

	D2D1_SIZE_U size = D2D1::SizeU(rc.right - rc.left,rc.bottom - rc.top);
    //생성과정
    hr = g_pD2DFactory->CreateHwndRenderTarget(
	D2D1::RenderTargetProperties(),
	D2D1::HwndRenderTargetProperties(_hWnd, size),
	&_pRenderTarget);
}

void UninitDirect2D()
{
	if (_pRenderTarget) _pRenderTarget->Release();
	if (_pD2DFactory) _pD2DFactory->Release();

	// COM 사용 끝
	CoUninitialize();
}