먼저, 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(); // 그리기 끝
}
'D2D와 게임엔진' 카테고리의 다른 글
엔진공부 3일차 (ResourceManager 만들기) (0) | 2024.08.08 |
---|---|
엔진공부 2일차 ( Static Library 만들기 ... feat. 윈도우 생성오류) (0) | 2024.08.07 |
Direct2D 기본 사용법 3 (이미지 출력) (1) | 2024.08.05 |
Direct2D 기본 사용법 2 (텍스트 출력) (0) | 2024.08.05 |
엔진공부 1일차 (feat. Direct2D 사용하기) (0) | 2024.08.05 |