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

Direct2D 기본 구조(Factory, RenderTarget) 본문

DEV/Direct2D

Direct2D 기본 구조(Factory, RenderTarget)

F.R.I.D.A.Y. 2021. 4. 4. 03:51
반응형

 GDI/GDI+의 후속으로 여겨지는 Direct2D


구조

 Direct2D는 아래의 순서로 진행된다.

  • ID2D1Factory를 생성
  • ID2D1HwndRenderTarget을 생성
  • 브러시 생성 및 RenderTarget에 지정
  • 그리기
  • 리소스 해제(Factory 등)[# 모든 사용이 끝났을 때만 하면 된다. 프로그램을 작동하는 과정에서 계속 사용한다면 굳이 해제할 필요가 없다.]

 

ID2D1Factory

 Direct2D에서 사용하는 리소스를 생성할 수 있는 인터페이스[# 설계도면같은 개념. 클래스 작성에 있어 필수적으로 들어갈 메서드를 선언한다.]를 제공한다. 최상위 인터페이스는 IUnknown.

 

 다음으로 생성할 수 있다.

#pragma comment(lib, "d2d1")
#include <d2d1.h>

ID2D1Factory* CreateFactory(){
    ID2D1Factory* pFactory = nullptr;
    
    D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, __uuid(ID2D1Factory), &pFactory);
    
    return pFactory;
    
}

 

 이 객체로 다른 리소스(RenderTarget이나 브러시 등)를 생성할 수 있기 때문에 Factory란 이름을 가지게 되었나보다

 

D2D1CreateFactory

 ID2D1Factory 객체를 생성하는 함수

 

Direct2D - D2D1CreateFactory()

 Factory 객체를 생성하는 함수 D2D1CreateFactory  Direct2D를 이용할 때, 각종 리소스(이미지) 등을 생성할 수 있도록 제공하는 객체가 바로 ID2D1Factory 인터페이스로 만들어진 객체다. 이 객체를 생성할.

pang2h.tistory.com

 

 

ID2D1HwndRenderTarget

 Direct2D는 그래픽 API로서, 디스플레이에 그리기 위해 존재한다. Factory 객체로 리소스 생성이 가능한 여건을 만들었으므로, 이러한 리소스를 어디에 그릴 것인지 대상을 지정해야한다. 이 때 ID2D1HwndRenderTarget이 그 역할을 한다.

ID2D1Factory* pFactory; // 이미 생성되었다고 가정
ID2D1HwndRenderTarget* pRT;

void CreateRenderTarget(HWND hwnd){ // 그리는 대상 윈도우 핸들값이 넘어옴
	RECT rc;
    
    // GetWindowRect(hwnd, &rc); // 사용하면 뭐가 문제인지 알 수 있음
    GetClientRect(hWnd, &rc);
	pFactory->CreateHwndRenderTarget(D2D1::RenderTargetProperties(),
    	D2D1::HwndRenderTargetProperties(hwnd,
        	D2D1::SizeU(rc.right - rc.left, rc.bottom - rc.top)
        ), &pRT);
        
}

 뭔가 값이 많이 들어가는데 CreateHwndRenderTarget 메서드는 세 개의 인자를 받는다.

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

 그중에 두 번재 인자인 hwndRenderTargetProperties에 

D2D1::HwndRenderTargetProperties(HWND, D2D1::SizeU(rc.right - rc.left, rc.bottom - rc.top));

 이 항목이 들어가는 개념.

 

CreateHwndRenderTarget

 ID2D1HwndRenderTarget을 생성하는 함수

 

Direct2D - CreateHwndRenderTarget()

 렌더 타겟을 생성하는 함수 CreateHwndRenderTarget CreateHwndRenderTarget  리소스(이미지 등)을 그릴 때 그리는 공간을 지정하는 RenderTarget을 의 핸들(HWND)를 생성하는 메서드로, Factory 객체로부터..

pang2h.tistory.com

 

 

# index

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 - CreateHwndRenderTarget()  (0) 2021.04.04
Comments