일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 알고리즘
- Tips강좌
- Direct2D
- 프로그래밍
- Visual Studio
- tipssoft
- 이지스퍼블리싱
- 김성엽
- Tips프로그래밍강좌
- 함수
- 연산자
- 배열
- Win32
- c#
- 티스토리
- c++
- VS ERROR
- Kotlin
- 문법
- c
- 지식나눔강좌
- Programming
- 포인터
- doit코틀린프로그래밍
- CS
- 리뷰
- Javascript
- Windows
- 백준
- Desktop
Archives
- 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 객체를 생성하는 함수
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을 생성하는 함수
# 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