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();
}