일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- tipssoft
- Tips강좌
- Direct2D
- 연산자
- Kotlin
- VS ERROR
- 배열
- 티스토리
- 알고리즘
- Visual Studio
- 이지스퍼블리싱
- doit코틀린프로그래밍
- 함수
- Programming
- 김성엽
- 프로그래밍
- 지식나눔강좌
- 백준
- Windows
- Desktop
- Javascript
- c#
- Win32
- 포인터
- 리뷰
- CS
- c++
- Tips프로그래밍강좌
- c
- 문법
- Yesterday
- Today
- Total
F.R.I.D.A.Y.
Direct2D 기본 구조(Factory, RenderTarget) 본문
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
'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 |