비트맵 개체

참고

Windows 10 앱의 경우 DirectComposition 대신 Windows.UI.Composition API를 사용하는 것이 좋습니다. 자세한 내용은 시각적 계층을 사용하여 데스크톱 앱 현대화를 참조하세요.

Microsoft DirectComposition은 비트맵 작성 엔진입니다. 이를 통해 애플리케이션 개발자는 여러 비트맵을 결합하고 다양한 방법으로 조작하여 애플리케이션 UI에서 흥미로운 시각적 효과와 애니메이션을 얻을 수 있습니다. 이 항목에서는 DirectComposition에서 지원하는 비트맵 콘텐츠의 형식에 대해 설명합니다.

비트맵 콘텐츠

애플리케이션은 시각적 개체를 만든 다음 해당 개체의 Content 속성을 설정하여 작성하고 애니메이션할 비트맵 콘텐츠가 있는 DirectComposition을 제공합니다. DirectComposition은 래스터화 서비스를 제공하지 않습니다. 애플리케이션은 Direct2D 또는 Direct3D와 같은 다른 소프트웨어 기반 또는 하드웨어 가속 래스터화 라이브러리를 사용하여 구성할 비트맵을 채워야 합니다. 작성 후 DirectComposition은 구성된 비트맵 콘텐츠를 화면에 렌더링하기 위해 DWM(바탕 화면 창 관리자)에 전달합니다.

지원되는 비트맵 콘텐츠 형식 Microsoft DirectComposition은 다음과 같은 종류의 비트맵을 지원합니다.

비디오 메모리 비트맵

비디오 메모리 비트맵은 Microsoft DirectX 메서드(DX-to-GDI interop 모델 포함)를 사용하여 하드웨어에서 래스터화됩니다. 호출 애플리케이션 및 DirectComposition에 표시되는 프로세스 간 공유 표면에서 지원됩니다. 애플리케이션은 DirectComposition 질감의 표면에서만 읽을 수 있으므로 비디오 메모리 비트맵은 해체될 수 없습니다.

비디오 콘텐츠

애플리케이션은 DirectComposition을 사용하여 DirectComposition 표면에 바인딩된 DirectX 창 없는 스왑 체인을 사용하는 비디오 프레임을 작성할 수 있습니다. 개념적으로 DirectComposition은 비디오 콘텐츠를 비트맵 시퀀스로 처리합니다. DirectComposition은 비디오 프레임을 제공하는 수단을 제공하지 않습니다.

DirectComposition은 DirectX 창 없는 스왑 체인, 즉 특정 창에 바인딩되지 않은 스왑 체인을 지원하며, 서로 다른 두 애플리케이션이 프로세스 경계를 넘어 창 없는 스왑 체인을 공유할 수 있도록 합니다. 창 없는 스왑 체인을 공유하면 스왑 체인이 한 프로세스에서 만들어지고 두 번째 프로세스에서 DirectComposition과 함께 사용되는 비디오 시나리오가 가능합니다. 창 없는 스왑 체인은 IDXGIFactory2::CreateSwapChainForCompositionSurface 메서드를 사용하여 만들어집니다.

DirectX 스왑 체인에 대한 자세한 내용은 DXGI 개요를 참조하세요.

스테레오 콘텐츠

개념적으로 스테레오 스왑 체인은 스테레오 3D 콘텐츠의 왼쪽 및 오른쪽 채널을 나타내는 Microsoft DXGI(DirectX Graphic Infrastructure) 표면으로 구성됩니다. 스테레오 스왑 체인이 시각적 개체의 비트맵 리소스로 사용되는 경우 DirectComposition은 스테레오로 구성됩니다. 스테레오가 아닌 모든 콘텐츠(모노 콘텐츠)는 왼쪽 및 오른쪽 채널 콘텐츠가 동일한 것으로 간주됩니다. 즉, 두 채널 모두에 동일한 비트맵 콘텐츠가 사용됩니다. DirectComposition은 모든 왼쪽 콘텐츠와 모든 오른쪽 콘텐츠를 개별적으로 구성합니다. 디스플레이 디바이스가 스테레오를 사용할 수 없는 경우 DirectComposition은 왼쪽 또는 오른쪽 스테레오 채널(애플리케이션에 따라 다름)을 모노 콘텐츠로 처리하고 비트맵 리소스에 해당 데이터만 사용하여 구성합니다.

DirectComposition은 스테레오 콘텐츠 만들기 또는 조작을 지원하지 않으며 모노 스왑 체인을 스테레오 쌍으로 승격할 수 없습니다. DirectComposition에 DirectX 스테레오 콘텐츠를 표시하기 전에 애플리케이션에서 이러한 작업을 수행해야 합니다. 또한 애플리케이션은 깊이 인식을 위해 왼쪽 및 오른쪽 채널 오프셋을 제공해야 합니다. DirectComposition은 DirectX 스테레오 콘텐츠의 인식된 깊이를 수정하기 위해 왼쪽 및 오른쪽 채널 오프셋을 조정할 수 없습니다.

DirectX 스테레오 콘텐츠는 스테레오 지원 하드웨어를 사용할 수 있을 때 구성되고 DWM에 유지됩니다.

창 비트맵

"창 비트맵"은 실제 비트맵이 아니지만 DirectComposition이 계층화된 최상위 또는 자식 창의 래스터화로 실시간으로 대체하는 자리 표시자입니다. 창 비트맵은 DWM 썸네일과 유사합니다. 단, 썸네일은 소유된 비자식 창과 같은 여러 창의 기여를 포함할 수 있지만 DirectComposition 창 비트맵은 항상 하나의 창과 해당 자식에 대한 표현입니다.

DirectComposition은 모든 창 및 모든 시각적 트리의 리디렉션 표면에 액세스할 수 있으므로 여러 시각적 트리의 한 창에서 콘텐츠를 다시 사용할 수 있습니다. 계층화되지 않은 창에는 전용 리디렉션 표면이 없으므로 창을 계층화해야 합니다. 따라서 해당 래스터화를 DirectComposition에서 항상 사용할 수 있는 것은 아닙니다.

창 비트맵을 사용하기 위해 애플리케이션은 시각적 개체를 창 핸들(HWND)과 연결합니다. 그런 다음 DirectComposition은 창과 연결된 시각적 트리의 변경으로 인해 내용이 변경되는 경우를 포함하여 창 내용이 변경될 때마다 시각적 개체를 다시 작성합니다. 즉, DWM 미리 보기와 같이 DirectComposition 창 비트맵은 "라이브"입니다.

시각적 개체와 비트맵 콘텐츠 연결

세 종류의 비트맵 모두에 대해 애플리케이션은 동일한 비트맵을 여러 시각적 개체와 연결할 수 있습니다. 즉, 단일 메모리 할당을 사용하여 동일한 콘텐츠를 여러 번 표시할 수 있습니다.

알파 채널

모든 비트맵은 BPP(픽셀당 32비트) 형식으로 픽셀당 투명도를 위한 8비트까지 포함합니다. 그러나 애플리케이션은 DirectComposition에서 알파 채널을 사용하는 방법을 지정할 수 있습니다. 특히 DirectComposition은 알파 채널을 준수하거나 알파를 모두 무시할 수 있습니다. 이 경우 비트맵은 완전히 불투명한 것으로 간주됩니다.

추가 알파 모드는 알파 채널을 무시하지만 해당 채널의 일반적인 해석 대신 빨간색, 녹색 및 파란색 값을 채널별 알파 값으로 처리합니다. 이 모드는 하위 픽셀 검사 정보가 필요한 ClearType 렌더링에 유용합니다. 채널별 알파 모드를 사용하려면 애플리케이션은 먼저 Direct2DDirectWrite 사용하여 하위 픽셀 검사 데이터를 비트맵에 써야 합니다. 다음으로 애플리케이션은 올바른 알파 모드를 설정하고 비트맵을 시각적 개체와 연결하면 텍스트 색을 지정해야 합니다. DirectComposition은 텍스트 색을 검사 데이터와 혼합하여 배경과 ClearType 혼합을 생성합니다.

ClearType 알고리즘을 적용할 수 없는 경우(예: 비트맵이 픽셀에 맞춰지고 축에 맞춰지지 않은 경우) 또는 중간 표면에 그려야 하는 경우 DirectComposition은 비트맵의 하위 픽셀 검사 데이터를 사용하여 회색조 래스터화를 자동으로 추가 비용 없이 생성할 수 있습니다.

자세한 내용은 IDCompositionDevice::CreateSurface 또는 IDCompositionDevice::CreateVirtualSurface 함수의 alphaMode 매개 변수에 대한 설명을 참조하세요.

DirectComposition 개념