*렌더타겟(render target)
;장면을 그리기 위한 자원들을 생성하고 그리기 연산들을 수행하는 추상화된 핵심 자원.
ID2D1RenderTarget을 상속한 자원으로 표현.
ID2D1HwndRenderTarget: D2D의 대표적인 타입.
ID2D1DCRenderTarget: 한 GDI 장치 컨텍스트에 렌더하는 타입.
*그리기 명령
;획(stroke), 채우기(fill)
대부분 첫 번째 인자로 하나의 기본도형(primitive)나 기하(geometry). 두 번째 인자는 하나의 붓(bruch).
D2D의 렌더링에 있어서 좌표계는 왼손 좌표계를 사용함. +x축: 오른쪽 방향, +y축: 아래쪽 방향.
그리기 함수들 외에도 클리핑, 불투명 마스크(opacity mask) 적용, 좌표 공간 변환 등의 함수들을 제공.
*일괄처리로 동작하는 그리기 함수
;D2D에서 제공하는 모든 그리기 함수들은 일괄처리 함수. 모든 그리기 함수들은 한번에 처리됨.
// 모든 그리기 함수들은 BeginDraw() ~ EndDraw() 사이에 호출되어야 함.
pRenderTarget->BeginDraw();
//
// 모든 그리기 함수 호출..DrawXxx() or FillXxx()
//
HRESULT hr = pRenderTarget->EndDraw(); // EndDraw 함수 호출 시 일괄처리 시작.
|
cs |
*렌더타겟 생성
D2D1_RENDER_TARGET_PROPERTIES
D2D1_HWND_RENDER_TARGET_PROPERTIES
// 지정한 윈도우의 클라이언트 영역에 그림을 그리기 위한 Render Target을 생성.
gp_factory->CreateHwndRenderTarget(
RenderTargetProperties(), // 1.
HwndRenderTargetProperties(hWnd, SizeU(r.right, r.bottom)), // 2.
&gp_render_target);
// 1. D2D1_RENDER_TARGET_PROPERTIES
typedef struct D2D1_RENDER_TARGET_PROPERTIES
{
D2D1_RENDER_TARGET_TYPE type; // DEFAULT, SOFTWARE, HARDWARE
D2D1_PIXEL_FORMAT pixelFormat; // 렌더타겟의 픽셀 포멧을 명시.
FLOAT dpiX; // 렌더타겟의 수평 DPI 명시.
FLOAT dpiY; // 렌더타겟의 수직 DPI 명시.
D2D1_RENDER_TARGET_USAGE sage; // NONE, FORCE_BITMAP_REMOTING, GDI_COMPATIBLE
D2D1_FEATURE_LEVEL minLevel; // DEFAULT, 9, 10
} D2D1_RENDER_TARGET_PROPERTIES;
D2D1_RENDER_TARGET_PROPERTIES RenderTargetProperties(
D2D1_RENDER_TARGET_TYPE type = D2D1_RENDER_TARGET_TYPE_DEFAULT,
_In_ CONST D2D1_PIXEL_FORMAT &pixelFormat = D2D1::PixelFormat(),
FLOAT dpiX = 0.0,
FLOAT dpiY = 0.0,
D2D1_RENDER_TARGET_USAGE usage = D2D1_RENDER_TARGET_USAGE_NONE,
D2D1_FEATURE_LEVEL minLevel = D2D1_FEATURE_LEVEL_DEFAULT
)
// 2. D2D1_HWND_RENDER_TARGET_PROPERTIES
typedef struct D2D1_HWND_RENDER_TARGET_PROPERTIES
{
HWND hwnd; // 렌더타겟의 출력을 보낼 윈도우 핸들.
D2D1_SIZE_U pixelSize; // 렌더타겟의 필셀 단위의 크기.
D2D1_PRESENT_OPTIONS presentOptions; // EndDraw 함수 호출 시에 사용될 DP버퍼가 직전의 내용을 유지할지 여부.
// NONE, RETAIN_CONTENTS, IMMEDIATELY
} D2D1_HWND_RENDER_TARGET_PROPERTIES;
D2D1_HWND_RENDER_TARGET_PROPERTIES HwndRenderTargetProperties(
_In_ HWND hwnd,
_In_ D2D1_SIZE_U pixelSize = D2D1::Size(static_cast<UINT32>(0), static_cast<UINT32>(0)),
_In_ D2D1_PRESENT_OPTIONS presentOptions = D2D1_PRESENT_OPTIONS_NONE
)
|
cs |
*픽셀 포맷
;렌더타겟을 생성할 때에 픽셀 포맷을 명시해야 함. D2D1_PIXEL_FORMAT.
D2D1_PIXEL_FORMAT PixelFormat(
_In_ DXGI_FORMAT dxgiFormat = DXGI_FORMAT_UNKNOWN, // 각 픽셀 포맷을 명시.
_In_ D2D1_ALPHA_MODE alphaMode = D2D1_ALPHA_MODE_UNKNOWN // 알파 정보의 해석 방법을 명시.
)
|
cs |
*자원
;D2D API의 최상위에 있는 인터페이스로 팩토리 객체인 ID2D1Factory 와 ID2D1Resource 가 있음.
D2D1Factory를 제외한 모든 객체들은 ID2D1Resource 인터페이스를 상속하여 구현되어 있음.
-장치 독립적 자원
;CPU에서 관리하는 자원으로 항상 CPU에 상주함. 렌더링 하드웨어와 연관 없음. GPU의 사용과 무관.
ID2D1DrawingStateBlock
ID2D1Factory
ID2D1Geometry 및 이를 상속한 인터페이스들
ID2D1GeometrySink 및 ID2D1SimplifiedGeometrySink
ID2D1StrokeStyle
|
cs |
-장치 의존적 자원
;특정한 렌더링 장치와 연관되어 있는 자원. 하드웨어 가속이 가능한 경우는 GPU를 의미 그 외는 CPU를 의미.
ID2D1Brush와 이를 상속한 것들
ID2D1Layer
ID2D1RenderTarget와 이를 상속한 것들
|
cs |
*자원의 생성
// Direct2D를 구성하는 각종 객체를 생성하는 객체 ID2D1Factory* gp_factory; // Direct2D에서 윈도우의 클라이언트 영역에 그림을 그릴 객체 ID2D1HwndRenderTarget* gp_render_target; RECT r; GetClientRect(hWnd, &r); // 지정한 윈도우의 클라이언트 영역에 그림을 그리기 위한 Render Target을 생성. gp_factory->CreateHwndRenderTarget( RenderTargetProperties(), HwndRenderTargetProperties(hWnd, SizeU(r.right, r.bottom)), &gp_render_target ); | cs |
'::public > 윈도우즈 응용 프로그래밍' 카테고리의 다른 글
Direct2D - 기하 (0) | 2019.09.26 |
---|---|
Direct2D - 변환 (0) | 2019.09.26 |
Direct2D - 그림파일 읽고 출력 (0) | 2019.09.25 |
Direct2D - 오목 만들기 (0) | 2019.09.25 |
Direct2D 사용하기 (0) | 2019.09.25 |