D2D와 게임엔진

Direct2D 기본 사용법 2 (텍스트 출력)

햄시나 2024. 8. 5. 12:03

D2D1Factory 로 랜더타겟을 생성한 것처럼 Write를 위한 팩토리가 있고, 필수적인 format이 있다.

// 추가적으로 추가해야하는 것들
#include <dwrite.h>
#pragma comment(lib,"dwrite.lib")

// 또 다른 팩토리
IDWriteFactory* g_pDWriteFactory;
IDWriteTextFormat* g_pDWriteTextFormat;

BOOL InitDirect2D()
{
	// 슬슬 형태가 익숙하죠?
    // DirectWrite 팩토리 생성하기 
	hr = DWriteCreateFactory(
    	DWRITE_FACTORY_TYPE_SHARED,
		__uuidof(g_pDWriteFactory),
		reinterpret_cast<IUnknown**>(&g_pDWriteFactory));
    
    // DirectWrite의 텍스트 형식 개체를 만들기
	hr = g_pDWriteFactory->CreateTextFormat(
		L"Cooper", // FontName    제어판-모든제어판-항목-글꼴-클릭 으로 글꼴이름 확인가능
		NULL,
		DWRITE_FONT_WEIGHT_NORMAL,
		DWRITE_FONT_STYLE_NORMAL,
		DWRITE_FONT_STRETCH_NORMAL,
		50.0f,   // Font Size
		L"", //locale
		&g_pDWriteTextFormat
	);
    // 텍스트를 수평 및 수직으로 중앙에 맞추기
	g_pDWriteTextFormat->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_CENTER);
	g_pDWriteTextFormat->SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT_CENTER);
}

int WINAPI WinMain(생략한겁니다)
{
	// 쭉 생략 ...
    
	while (TRUE)
    	{
    		g_pRenderTarget->BeginDraw();
		g_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::CadetBlue));

		D2D1_SIZE_F size = g_pRenderTarget->GetSize();

		WCHAR sc_helloWorld[] = L"Hello, World!";
		g_pRenderTarget->DrawText(
			sc_helloWorld,
			ARRAYSIZE(sc_helloWorld) - 1,
			g_pDWriteTextFormat,
			D2D1::RectF(0, 0, size.width, size.height/2),
			g_pBlackBrush);
		
        	g_pRenderTarget->EndDraw();
	}
}