다음을 통해 공유


Direct2D API 개요

Direct2D는 C 또는 C++에 사용하기 위해 Direct3D와 유사한 API를 제공합니다. API는 다음과 같은 다양한 그리기 관련 기능을 노출합니다.

  • Direct2D, Direct3D 또는 GDI를 사용하여 디스플레이 및 화면 끄기 렌더링 대상을 렌더링합니다.
  • 좌표 공간 변환 및 앤티앨리어싱 모드와 같은 그리기 상태를 관리하기 위한 개체입니다.
  • 기하학적 데이터에 대한 표현 및 기하 도형 처리를 위한 함수입니다.
  • 비트맵, 기하 도형 및 텍스트에 대한 렌더링 기능입니다.
  • GDI 또는 Direct3D를 사용하여 만든 그래픽 콘텐츠를 사용하기 위한 프로비전입니다.

이 항목에서는 Direct2D API를 구성하는 개체에 대한 개요를 제공합니다. 여기에는 다음 단원이 포함되어 있습니다.

Direct2D 헤더 파일

Direct2D API는 다음 헤더 파일로 정의됩니다.

헤더 파일 설명
d2d1.h 기본 Direct2D API의 C 및 C++ 버전을 정의합니다.
d2d1helper.h C++ 도우미 함수, 클래스 및 구조를 정의합니다.
d2dbasetypes.h 점 및 사각형과 같은 Direct2D에 대한 그리기 기본 형식을 정의합니다. 이 헤더는 d2d1.h에 포함되어 있습니다.
d2derr.h Direct2D에 대한 오류 코드를 정의합니다. 이 헤더는 d2d1.h에 포함되어 있습니다.
d2d1_1.h Windows 8 이상용 기본 Direct2D API의 C 및 C++ 버전을 정의합니다.
d2d1_1helper.h Windows 8 이상에 대한 C++ 도우미 함수, 클래스 및 구조를 정의합니다.
d2d1effects.h Windows 8 이상용 Direct2D API의 이미지 효과 부분에 대한 C 및 C++ 버전을 정의합니다.
d2d1effecthelpers.h Windows 8 이상용 Direct2D API의 이미지 효과 부분에 대한 C++ 도우미 함수, 클래스 및 구조를 정의합니다.

 

Direct2D를 사용하려면 애플리케이션에 d2d1.h 헤더 파일이 포함되어야 합니다.

Direct2D 애플리케이션을 컴파일하려면 라이브러리 목록에 d2d1.lib를 추가합니다. Windows 7용 Windows SDK(소프트웨어 개발 키트)에서 d2d1.h 및 d2d1.lib를 찾을 수 있습니다.

다음 섹션에서는 Direct2D API에서 제공하는 몇 가지 일반적인 인터페이스에 대해 설명합니다.

Direct2D 인터페이스

Direct2D API의 루트에는 ID2D1FactoryID2D1Resource 인터페이스가 있습니다. ID2D1Factory 개체는 ID2D1Resource 개체를 만들고 Direct2D를 사용하기 위한 시작점 역할을 합니다. 다른 모든 Direct2D 개체는 ID2D1Resource 인터페이스에서 상속됩니다. Direct2D 리소스에는 디바이스 독립적 리소스와 디바이스 종속 리소스의 두 가지 유형이 있습니다.

  • 디바이스 독립적 리소스는 특정 렌더링 디바이스와 연결되지 않으며 애플리케이션의 수명 동안 지속될 수 있습니다.
  • 디바이스 종속 리소스는 특정 렌더링 디바이스와 연결되며 해당 디바이스가 제거되면 작동이 중단됩니다.

(리소스 및 리소스 공유에 대한 자세한 내용은 리소스 개요를 참조하세요.)

ID2D1Factory 인터페이스

ID2D1Factory 인터페이스는 Direct2D를 사용하기 위한 시작점입니다. ID2D1Factory를 사용하여 Direct2D 리소스를 인스턴스화합니다. ID2D1Factory를 만들려면 CreateFactory 메서드 중 하나를 사용합니다.

팩터리는 다음 그리기 리소스를 생성할 수 있는리소스 만들기 메서드 집합을 정의합니다.

  • 렌더링 대상은 그리기 명령을 렌더링하는 개체입니다.
  • 그리기 상태 블록은 현재 변환 및 앤티앨리어싱 모드와 같은 그리기 상태 정보를 저장하는 개체입니다.
  • 기하 도형은 단순하고 잠재적으로 복잡한 셰이프를 나타내는 개체입니다.

팩터리에서 만들 수 있는 가장 유용한 개체 중 하나는 다음 섹션에 설명된 ID2D1RenderTarget입니다.

렌더링 대상

렌더링 대상은 ID2D1RenderTarget 인터페이스에서 상속되는 리소스입니다. 렌더링 대상은 그리기용 리소스를 만들고 그리기 작업을 수행합니다. 다음과 같은 방법으로 그래픽을 렌더링하는 데 사용할 수 있는 여러 종류의 렌더링 대상이 있습니다.

  • ID2D1HwndRenderTarget 개체는 콘텐츠를 창에 렌더링합니다.
  • ID2D1DCRenderTarget 개체는 GDI 디바이스 컨텍스트에 렌더링됩니다.
  • 비트맵 렌더링 대상 개체는 오프스크립 비트맵에 콘텐츠를 렌더링합니다.
  • DXGI 렌더링 대상 개체는 Direct3D와 함께 사용하기 위해 DXGI 화면에 렌더링됩니다.

렌더링 대상은 특정 렌더링 디바이스와 연결되므로 디바이스 종속 리소스이며 디바이스가 제거되면 작동이 중단됩니다.

렌더링 대상 기능

렌더링 대상에서 하드웨어 가속을 사용해야 하는지 여부와 로컬 또는 원격 컴퓨터에서 원격 디스플레이를 렌더링해야 하는지 여부를 지정할 수 있습니다. 렌더링 대상은 별칭 또는 앤티앨리어싱된 렌더링에 대해 설정할 수 있습니다. 개발자는 기본 형식이 많은 렌더링 장면의 경우 별칭 모드에서 2차원 그래픽을 렌더링하고 D3D 다중 샘플 앤티앨리어싱을 사용하여 확장성을 향상할 수도 있습니다.

렌더링 대상은 그리기 작업을 ID2D1Layer 인터페이스가 나타내는 레이어로 그룹화할 수도 있습니다. 레이어는 프레임을 렌더링할 때 함께 합성할 그리기 작업을 수집하는 데 유용합니다. 일부 시나리오에서는 계층화에 대한 할당 비용이 ID2D1BitmapRenderTarget보다 낮기 때문에 비트맵 렌더링 대상에 렌더링한 다음 비트맵 콘텐츠를 다시 사용하는 데 유용한 대안이 될 수 있습니다.

렌더링 대상은 자신과 호환되는 새 렌더링 대상을 만들 수 있습니다. 이는 원본에 설정된 다양한 렌더링 대상 속성을 유지하면서 중간 화면 외부 렌더링에 유용합니다.

또한 GDI 디바이스 컨텍스트를 검색하는 데 사용할 수 있는 GetDCReleaseDC 메서드가 있는 ID2D1GdiInteropRenderTarget의 렌더링 대상에서 QueryInterface를 호출하여 Direct2D 렌더링 대상에서 GDI를 사용하여 렌더링할 수도 있습니다. GDI를 통한 렌더링은 D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE 플래그 집합을 사용하여 렌더링 대상을 만든 경우에만 가능합니다. 이는 주로 Direct2D로 렌더링되지만 확장성 모델 또는 GDI를 사용하여 렌더링하는 기능이 필요한 기타 레거시 콘텐츠가 있는 애플리케이션에 유용합니다. 자세한 내용은 Direct2D 및 GDI 상호 운용성 개요를 참조하세요.

렌더링 대상 리소스

팩터리처럼 렌더링 대상은 그리기 리소스를 만들 수 있습니다. 렌더링 대상에서 만든 모든 리소스는 렌더링 대상과 마찬가지로 디바이스 종속 리소스입니다. 렌더링 대상은 다음과 같은 유형의 리소스를 만들 수 있습니다.

  • 비트맵
  • 브러시
  • 계층
  • 메시

그리기 명령

콘텐츠를 렌더링하려면 렌더링 대상 그리기 메서드를 사용합니다. 그리기를 시작하기 전에 ID2D1RenderTarget::BeginDraw 메서드를 호출합니다. 그리기를 완료한 후 ID2D1RenderTarget::EndDraw 메서드를 호출합니다. 이러한 호출 사이에 그리기 및 채우기 메서드를 사용하여 그리기 리소스를 렌더링합니다. 대부분의 그리기 및 채우기 메서드는 셰이프(원형 또는 기하 도형)와 브러시를 사용하여 셰이프를 채우거나 윤곽을 그립니다.

렌더링 대상은 클리핑, 불투명 마스크 적용 및 좌표 공간 변환을 위한 메서드도 제공합니다.

Direct2D는 왼손 좌표계를 사용합니다. 양수 x축 값은 오른쪽으로, 양수 y축 값은 아래쪽으로 진행됩니다.

오류 처리

렌더링 대상 그리기 명령은 요청된 작업이 성공했는지 여부를 나타내지 않습니다. 그리기 오류가 있는지 확인하려면 렌더링 대상 Flush 메서드 또는 EndDraw 메서드를 호출하여 HRESULT를 가져옵니다.

그리기 리소스

다음 섹션에서는 렌더링 대상 및 팩터리 인터페이스에서 만들 수 있는 일부 리소스에 대해 설명합니다.

브러시

ID2D1Brush 인터페이스로 표현되는 브러시는 렌더링 대상에서 만든 디바이스 종속 리소스로, 해당 출력으로 영역을 그립니다. 다른 브러시는 다른 유형의 출력 합니다. 일부 브러시는 단색으로 영역을 그리고 다른 브러시는 그라데이션 또는 이미지로 칠합니다. Direct2D는 다음과 같은 네 가지 유형의 브러시를 제공합니다.

  • ID2D1SolidColorBrush 는 단색으로 영역을 그립니다.
  • ID2D1LinearGradientBrush 는 선형 그라데이션으로 영역을 그립니다. 이 그라데이션은 그라데이션 축인 선에 두 개 이상의 색을 혼합합니다.
  • ID2D1RadialGradientBrush 는 타원 주위에 두 개 이상의 색을 혼합하는 방사형 그라데이션으로 영역을 그립니다.
  • ID2D1BitmapBrush 는 비트맵으로 영역을 그립니다.

브러시를 만들려면 ID2D1RenderTarget::Create*Type>*<Brush 메서드(예: CreateRadialGradientBrush) 중 하나를 사용합니다. 브러시는 도형 스트로크 또는 윤곽선을 그리거나 불투명 마스크로 렌더링 대상 그리기 및 채우기 메서드와 함께 사용할 수 있습니다.

브러시에 대한 자세한 내용은 브러시 개요를 참조하세요.

Geometry

Direct2D는 점, 사각형 및 타원과 같은 기본 그리기 기본 형식 외에도 단순하고 복잡한 셰이프를 설명하는 ID2D1Geometry 인터페이스를 제공합니다. ID2D1Geometry에서 상속되는 인터페이스는 사각형을 나타내는 ID2D1RectangleGeometry, 둥근 사각형을 나타내는 ID2D1RoundedRectangleGeometry, 타원을 나타내는 ID2D1EllipseGeometry와 같은 다양한 유형의 셰이프를 정의합니다.

ID2D1GeometrySink 인터페이스를 사용하여 선, 곡선 및 호로 구성된 일련의 그림을 지정하여 더 복잡한 셰이프를 만들 수 있습니다. ID2D1GeometrySink는 복잡한 기하 도형을 생성하기 위해 ID2D1PathGeometry의 Open 메서드에 전달됩니다. ID2D1SimplifiedGeometrySink를 DirectWrite API와 함께 사용하여 꾸밈 렌더링을 위해 서식이 지정된 텍스트의 경로 윤곽선을 추출할 수도 있습니다.

기하 도형 인터페이스는 기존 기하 도형을 확장하거나 단순화하거나 여러 기하 도형의 교집합 또는 합집합을 생성하여 셰이프를 조작하는 메서드를 제공합니다. 또한 기하 도형이 교차하거나 겹치는지 여부를 확인하고, 경계 정보를 검색하고, 기하 도형의 영역 또는 길이를 계산하고, 기하 도형을 따라 위치를 보간하는 메서드를 제공합니다. 또한 Direct2D는 기하 도형에서 테셀레이션되는 삼각형의 메시를 만드는 기능을 제공합니다.

기하 도형을 만들려면 ID2D1Factory::Create*Type>*<Geometry 메서드(예: CreatePathGeometry) 중 하나를 사용합니다. 기하 도형은 디바이스 독립적 리소스입니다.

기하 도형을 렌더링하려면 렌더링 대상의 DrawGeometryFillGeometry 메서드를 사용합니다.

기하 도형에 대한 자세한 내용은 기하 도형 개요를 참조하세요.

비트맵

Direct2D는 비트맵을 로드하거나 저장하는 메서드를 제공하지 않습니다. 대신 WIC(Windows 이미징 구성 요소)를 사용하여 비트맵을 만들 수 있습니다. 비트맵 리소스는 WIC를 사용하여 로드한 다음 ID2D1RenderTarget::CreateBitmapFromWicBitmap 메서드를 통해 ID2D1Bitmap을 만드는 데 사용할 수 있습니다.

다른 방법을 통해 설정된 메모리 내 데이터에서 비트맵을 만들 수도 있습니다. 비트맵을 만든 후에는 렌더링 대상 DrawBitmap 메서드 또는 비트맵 브러시를 사용하여 그릴 수 있습니다.

하드웨어 렌더링 대상에서 비트맵 리소스를 만드는 작업은 비용이 많이 들기 때문에 Direct2D는 CopyFromBitmap, CopyFromRenderTargetCopyFromMemory 메서드를 사용하여 비트맵(또는 비트맵의 일부)의 콘텐츠를 업데이트할 수 있습니다. 이러한 메서드를 사용하면 추가 GPU 텍스처 할당과 관련된 비용을 절감할 수 있습니다.

그리기 텍스트

Direct2D는 DirectWrite 새 텍스트 API의 텍스트 작업을 사용하도록 설계되었습니다. DirectWrite API를 더 간단하게 사용하기 위해 렌더링 대상은 DirectWrite 텍스트 리소스를 렌더링하는 세 가지 메서드인 DrawText, DrawTextLayoutDrawGlyphRun을 제공합니다. Direct2D는 ClearType 텍스트 렌더링 프로세스에 GPU를 사용하기 때문에 Direct2D는 텍스트 작업에 GDI보다 낮은 CPU 사용량을 제공하고 더 많은 GPU 처리 능력을 사용할 수 있으므로 확장성을 향상합니다.

ID2D1RenderTarget::D rawText는 최소한의 서식으로 유니코드 텍스트 문자열을 렌더링하는 가장 간단한 시나리오를 위해 설계되었습니다. IDWriteTextLayout 개체를 사용하여 렌더링할 콘텐츠 및 서식을 지정하는 ID2D1RenderTarget::D rawTextLayout 메서드를 통해 보다 복잡한 레이아웃 및 입력 유연성을 제공합니다. IDWriteTextLayout 을 사용하면 텍스트 및 기타 고급 입력 체계 옵션의 부분 문자열에 대한 개별 서식을 지정할 수 있습니다.

문자 모양 수준 레이아웃을 정확하게 제어해야 하는 시나리오의 경우 ID2D1RenderTarget::D rawGlyphRun 메서드를 DirectWrite 제공하는 측정 기능과 함께 사용할 수 있습니다.

DirectWrite API를 사용하려면 dwrite.h 헤더를 포함합니다. Direct2D와 마찬가지로 DirectWrite 팩터리 IDWriteFactory를 사용하여 텍스트 개체를 만듭니다. DWriteCreateFactory 함수를 사용하여 팩터리를 만든 다음 Create 메서드를 사용하여 DirectWrite 리소스(예: IDWriteTextFormat)를 만듭니다.

DirectWrite 대한 자세한 내용은 소개 DirectWrite 항목을 참조하세요.

Direct2D 기본 형식

Direct2D는 다른 그리기 API에서 제공하는 것과 유사한 기본 형식 집합을 정의합니다. 색 구조, 변환을 수행하기 위한 행렬 구조, 점, 사각형, 타원 및 크기 구조의 부동 소수점 및 정수 버전을 제공합니다. 일반적으로 이러한 구조체의 부동 소수점 버전을 사용합니다.

팩터리 또는 렌더링 대상을 사용하여 Direct2D 기본 형식을 인스턴스화하지 않습니다. 직접 만들거나 d2d1helper.h에 정의된 도우미 메서드를 사용하여 만들 수 있습니다.

Direct2D 참조

DirectWrite HelloWorld

DirectWrite 소개

리소스 개요

WIC(Windows Imaging Component)