F.R.I.D.A.Y.

Direct2D - CreateHwndRenderTarget() 본문

DEV/Direct2D

Direct2D - CreateHwndRenderTarget()

F.R.I.D.A.Y. 2021. 4. 4. 05:01
반응형

 렌더 타겟을 생성하는 함수 CreateHwndRenderTarget


Index

  • CreateHwndRenderTarget
    • 함수 원형
      • D2D1_RENDER_TARGET_PROPERTIES
      • D2D1_HWND_RENDER_TARGET_PROPERTIES
      • ID2D1HwndRenderTarget
    • 생성 코드
    • 해석

Script from F.R.I.D.A.Y


CreateHwndRenderTargetcopy^

 리소스(이미지 등)을 그릴 때 그리는 공간을 지정하는 RenderTarget을 의 핸들(HWND)를 생성하는 메서드로, Factory 객체로부터 호출이 가능하다.

 

함수 원형copy^

HRESULT CreateHwndRenderTarget(
  const D2D1_RENDER_TARGET_PROPERTIES &      renderTargetProperties,
  const D2D1_HWND_RENDER_TARGET_PROPERTIES & hwndRenderTargetProperties,
  ID2D1HwndRenderTarget                      **hwndRenderTarget
);

 

D2D1_RENDER_TARGET_PROPERTIEScopy^

 픽셀의 색상 형식 및 알파 모드 정보, 렌더링 대상의 렌더링 형식(소프트웨어/하드웨어), 렌더링 대상의 GDI 호환여부, 하드웨어 렌더링에 필요한 Direct3D[1] 버전의 지정, DPI 설정을 담고 있는 구조체.

 

 여기에서 사용하는 D2D1::RenderTargetProperties()는 기본값을 반환하는 함수이다.

 

D2D1_HWND_RENDER_TARGET_PROPERTIEScopy^

 윈도우 핸들을 포함해 그리기 영역의 크기, 그리기 모드[2]를 담고 있는 구조체.

 

 세가지 중에, 윈도우 핸들과 영역의 크기만 넘겨주면 모드는 기본값이 지정되어 있어서 작성 안해도 된다.

 

ID2D1HwndRenderTargetcopy^

 함수의 결과로 생성된 HwndRenderTarget을 저장할 포인터를 주소로 넘겨준다.

 

 

생성 코드copy^

ID2D1Factory* pFactory;
ID2D1HwndRenderTarget* pRT;

HRESULT hr = D2D1CreateFactory(D2D1_FACTROY_TYPE_SINGLE_THREADED, &pFactory);
// overload + 3

RECT rc;
GetClientRect(hwnd, &rc);

if(SUCCEEDED(hr)){
    pFactory->CreateHwndRenderTarget(D2D1::RenderTargetProperties(),
        D2D1::HwndRenderTargetProperties(
            hwnd,
            D2D1::SizeU(rc.right - rc.left, rc.bottom - rc.top)
            ),
        &pRT);
}

 ID2D1RenderTarget도 있고 ID2D1HwndRenderTarget도 있어서 헷갈릴 수 있다.[3] 작성할 때 주의하자

해석copy^

 코드를 해석해보면 다음과 같다.

  • 먼저 팩토리 객체를 생성한다.
  • 윈도우의 클라이언트 영역을 받아온다.
  • 팩토리 객체가 성공적으로 생성되면 if 구문 내용을 진행한다

 

 if 구문의 해석은 다음과 같다.

  • 팩토리 객체의 CreateHwndRenderTarget 메서드를 이용해 pRT를 생성한다.
  • 두 번째 인자에 D2D1_HWND_RENDER_TARGET_PROPERTIES 구조체를 반환하는 함수를 작성하고, 그 인자로 윈도우 핸들과 윈도우 클라이언트 영역의 크기를 계산해 넣는다.
  • CreateHwndRenderTarget 메서드의 마지막 인자로 생성된 HwndRenderTarget 객체를 담을 포인터를 전달한다.

 

 

728x90
반응형

'DEV > Direct2D' 카테고리의 다른 글

Direct2D - DrawRectangle()  (0) 2021.04.05
Direct2D - Resize()  (0) 2021.04.04
Direct2D - Clear()  (0) 2021.04.04
Direct2D - D2D1CreateFactory()  (0) 2021.04.04
Direct2D 기본 구조(Factory, RenderTarget)  (0) 2021.04.04
Comments