D2D와 게임엔진

Direct2D 기본 사용법 1 (기하도형 출력)

햄시나 2024. 8. 5. 11:43

먼저, d2d1.h에 선언된 CreateD2D1Factory 함수로 ID2D1Factory 인터페이스를 얻어야 한다.

바로 이전 포스팅을 다시 보면 _pD2DFactory가 CreateHwndRenderTarget() 해서 얻은 _pRenderTarget.

요게 어떻게 쓰이는지 알 수 있게 된다. 

RenderTarget은 그리기 동작을 수행하거나, 그리기를 위한 리소스들을 생성한다.

 

1. 기하도형 출력하기

저 Brush를 필수로 생성해야한다.

// 아무튼 뭔지 모르겠는 Brush도 Direct2D에 이미 있다.
ID2D1SolidColorBrush* _pBlackBrush;		// 이름은 내멋대로 검은색 브러쉬라 지은것.
ID2D1SolidColorBrush* _pGrayBrush;		// 얜 대충 회색브러쉬.

BOOL InitDirect2D()
{
	//앞 포스팅 참고바람.
    D2D1CreateFactory();	// 일단 이거 하고
    _pD2DFactory->CreateHwndRenderTarget(); //이렇게해서 _pRenderTarget 이거 생성했음.
    
   // 그리고 이제 _pRenderTarget 이거로
   hr = g_pRenderTarget->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::Black),&g_pBlackBrush);
   hr = g_pRenderTarget->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::Gray), &g_pGrayBrush);
   
   if (FAILED(hr))
	return FALSE;
    
   //hr이 뭐냐면 예외처리(오류)를 위해 있는거다.
   //그럴듯한 용어 알게되면 수정해야지...(배웠는데 까먹음)
   
   return TRUE;
}
// 이제 생성한 브러쉬 사용해서 도형그리기
 int WINAPI WinMain()
 {
 	// 윈도우 클래스 구조체 초기화(생략)
    // 윈도우 클래스 등록(생략)
    // 윈도우 생성(생략)
    // 윈도우 표시(생략)
    MSG msg; // ...
    while (TRUE)
    {
    	g_pRenderTarget->BeginDraw(); // 그리기 시작
		g_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::CadetBlue)); //화면을 CadetBlue 이 색으로 초기화한것.

		D2D1_SIZE_F size = g_pRenderTarget->GetSize();
        // 줄무늬처럼 되게끔 줄 여러번 긋기
		for (float y=0 ; y< size.height ; y+=10 )
		{
			g_pRenderTarget->DrawLine(
				D2D1::Point2F(0.0f,y),
				D2D1::Point2F(size.width ,y),
				g_pBlackBrush, 0.5f);
		}
		// 속이 꽉 찬 사각형
		g_pRenderTarget->FillRectangle(
		D2D1::RectF(size.width / 2 - 150.0f, size.height / 2 - 150.0f,
		size.width / 2 + 150.0f, size.height / 2 + 150.0f), g_pGrayBrush);
        
		// 속이 빈 사각형
		g_pRenderTarget->DrawRectangle(
		D2D1::RectF(size.width/2 - 50.0f , size.height / 2 - 50.0f,
		size.width / 2 + 50.0f, size.height / 2 + 50.0f),g_pBlackBrush	);

		g_pRenderTarget->EndDraw(); // 그리기 끝
     }