Windows의 그래픽 API

Windows Vista에는 Windows 98용 WDM(Windows 드라이버 모델)이 도입된 이후 비디오 드라이버 디자인의 주요 수정 버전을 나타내는 완전히 새로운 디스플레이 드라이버 모델이 포함되어 있습니다. 이 새롭게 디자인된 모델은 2D 래스터 작업 및 GDI 애플리케이션의 세계에서 고정 기능 그래픽 하드웨어를 사용하는 3D 게임의 비디오 하드웨어의 진화를 반영하고, 마지막으로 광범위한 고성능 그래픽 애플리케이션을 지원하는 최신 GPU(프로그래밍 가능 그래픽 처리 장치)의 기능을 반영합니다. Windows 7 및 Windows 8은 추가 그래픽 기능 및 API를 제공하여 Windows Vista 그래픽 인프라를 기반으로 합니다. 이 문서에서는 Windows 그래픽 기능 및 API에 대해 설명합니다.

배경

Windows 초기부터 그래픽을 프로그래밍하기 위한 기본 API는 GDI(그래픽 디바이스 인터페이스)였습니다. 이 API는 수많은 2D 출력 디바이스를 처리하도록 설계되었으며 Windows 사용자 인터페이스 환경의 기초가 되었습니다. DirectDraw 및 Direct3D는 전체 화면 게임 및 3D 렌더링을 기존 하드웨어의 확장으로 지원하기 위한 대체 API로 도입되었습니다. GDI와의 상호 작용은 복잡했습니다. Direct3D 요소와 기존 GDI 요소의 효과적인 혼합은 이 디자인에 의해 제한되었습니다. XPDM이라고 하는 WDM의 Windows XP 버전은 GDI 및 Direct3D의 병렬 특성을 반영합니다(그림 1 참조).

그림 1 Windows XP의 그래픽 API

xpdm

수년에 걸쳐, 3D 비디오 카드의 힘은 하드웨어의 대다수가이 기능에 전념하는 지점까지 극적으로 성장했다. 새로운 드라이버 모델인 WDDM(Windows Display Driver Model)은 GPU와 Direct3D를 전면에 내세우며, GDI의 2D 세계를 최신 프로그래밍 가능한 GPU의 기능과 완벽하게 혼합하는 완전히 새로운 환경인 3D 데스크톱을 만들 수 있도록 합니다. WDDM을 사용하면 비디오 하드웨어는 전적으로 Direct3D에 의해 구동되며, 다른 모든 그래픽 인터페이스는 새로운 Direct3D 중심 드라이버 모델을 통해 비디오 하드웨어와 통신합니다(그림 2 참조).

그림 2. Windows Vista의 그래픽 API

wddm

WDDM에 대한 자세한 내용은 WDDM (Windows Vista Display Driver Model) 디자인 가이드를 참조하세요.

Direct3D 9

DirectX 버전 9는 2002년에 Windows용으로 처음 릴리스되었으며, 이후 업데이트는 2003년과 2004년에 출시되었습니다. 이 API는 DirectX 기술의 10년 진화, Direct3D용 보다 강력한 셰이더 프로그래밍 모델 도입, 수천 개의 배송 타이틀이 뒷받침하는 완성도를 나타냅니다. Direct3D 9는 Windows Vista의 기본 그래픽 인터페이스입니다. 광범위한 기존 하드웨어 및 Windows 릴리스에서 실행해야 하는 3D 게임 및 애플리케이션을 작성하는 데 사용할 수 있는 이상적인 API입니다. 새 드라이버 모델의 세부 정보는 Direct3D 9 인터페이스를 사용하여 애플리케이션에서 숨겨지지만 운영 체제는 새로운 기능을 최대한 활용하여 GPU의 진정한 멀티태스킹, 보다 효율적인 리소스 관리 및 강력한 성능을 제공하고 있습니다.

이전 버전의 Windows와 완전히 호환되도록 하려면 새 Windows Vista 디스플레이 드라이버 모델에서도 이전 드라이버 모델의 일부 단점을 에뮬레이트해야 합니다. 예를 들어 전체 화면 애플리케이션에서 포커스가 끊어지면 VRAM(비디오 메모리)의 모든 리소스가 손실된 것으로 가정하고 새 드라이버 모델이 디바이스 컨텍스트에서 리소스를 제거하지 않고 투명하게 처리하더라도 관리되지 않는 리소스로 만든 리소스를 다시 로드해야 합니다. 관리되는 리소스 유형과 기본 리소스 유형의 개념조차도 이전 드라이버 모델과 관련이 있습니다. 또 다른 예로, 새로운 드라이버 모델이 거의 무제한의 가상 비디오 메모리를 제공할 수 있더라도 사용 가능한 VRAM 양을 초과하는 관리되지 않는(기본 풀) 리소스를 할당할 때 오류가 발생할 수 있습니다. 이러한 요구 사항으로 인해 Windows Vista에서 실행되는 Direct3D 애플리케이션은 여전히 이러한 오류 조건을 받습니다. 따라서 기본 Direct3D 9 인터페이스를 사용하여 새 드라이버 모델의 일부 기능을 완전히 사용하는 기능이 제한됩니다.

Windows Vista와 함께 제공되는 새로운 시스템에는 WDDM 드라이버가 포함된 비디오 카드가 포함되고 인기 있는 여러 비디오 카드에 대한 새로운 드라이버가 상자에 포함되어 있지만 Windows Vista는 업그레이드 및 회사 버전에 이전 XPDM 드라이버를 사용하는 기능을 계속 지원합니다. 이전 드라이버 모델을 사용하는 시스템에서 Direct3D 9 및 이전 인터페이스를 사용해야 하며 그래픽 시스템의 작동은 Windows XP와 매우 유사합니다(그림 1). 애플리케이션에서 Direct3D 9Ex, Direct3D 10 이상 버전을 사용하려면 WDDM이 필요합니다.

Direct3D 9Ex

Direct3D 9Ex 인터페이스는 가상화된 리소스 할당, 손실된 새로운 디바이스 의미 체계 및 Windows Vista에서 실행되는 동안 사용할 수 있는 다른 새로운 기능을 노출하는 표준 Direct3D 9 API의 약간의 확장에 대한 액세스를 제공합니다. 이 확장 개체를 만들면 Direct3D 9 API는 새 의미 체계를 사용하므로 애플리케이션에서 리소스 생성, 관리 및 새로운 종류의 조건에 대한 오류 처리를 위해 다른 논리(따라서 다른 코드 경로)를 사용해야 합니다. 이 API는 Windows Vista에서만 사용할 수 있으며 WDDM 드라이버가 필요합니다. Direct3D 9Ex는 Direct3D 9와는 별도의 API 및 드라이버 코드 경로를 사용하므로 이 API를 지원하려면 애플리케이션에 대한 추가 테스트 사례가 필요합니다.

새 Direct3D 9Ex API를 만드는 주된 이유는 기존 Direct3D 애플리케이션에 대한 호환성을 유지하면서 WDDM의 새로운 기능에 대한 모든 액세스를 허용하기 위해서였습니다. 새로운 3D 데스크톱과 많은 Windows Vista 관련 애플리케이션은 이 버전의 Direct3D 9를 사용하지만 이전 XPDM 드라이버에서 실행할 때 작동하지 않습니다. Direct3D 9Ex API는 WDDM에 대한 지원 부족으로 인해 이전 버전의 Windows에 표시되지 않으므로 표준 Direct3D 9 인터페이스는 훨씬 더 광범위한 시스템 집합을 다룹니다. 차세대 비디오 하드웨어를 활용할 수 있는 고성능 애플리케이션의 경우 완전히 새로운 버전의 Direct3D 10은 Direct3D 9Ex에서 노출되지 않는 많은 새로운 기능을 제공합니다. 따라서 게임 및 대부분의 다른 애플리케이션의 경우 Direct3D 9 또는 Direct3D 10이 권장되는 API입니다.

참고 항목

DirectX SDK는 Direct3D 9Ex 인터페이스에 대한 샘플, 헤더 또는 라이브러리를 제공하지 않습니다. Direct3D 9Ex에 대한 자세한 내용은 Windows Vista용 DirectX를 참조하세요.

Direct3D 10

새로운 Windows Vista 드라이버 모델 및 차세대 하드웨어의 잠재력을 완전히 실현하기 위해 완전히 새로운 버전의 Direct3D API가 만들어졌습니다. WDDM은 기존 그래픽 시스템의 성능에 대한 몇 가지 제한 사항을 제거하지만 Direct3D 10은 기존 Direct3D API에서 디자인 병목 상태를 제거하여 더 나아가 GPU 프로그래밍 작업을 크게 간소화합니다.

새 API는 몇 가지 고정 함수 측면을 제외한 모든 요소를 완전히 제거하여 프로그래밍 가능한 구문으로 대체하고 내부 구현을 크게 간소화합니다. 이전 버전의 Direct3D에서 수백 개의 기능 비트가 완전히 제거되고 특정 리소스 형식에 대한 몇 가지 선택적 사용 시나리오만 있는 잘 정의된 포괄 기능 집합으로 대체되었습니다. 이제 CPU를 많이 사용하는 리소스 만들기 및 유효성 검사에 새 API에 명시적 의미 체계가 있습니다. 이렇게 하면 훨씬 더 예측 가능한 성능 동작이 가능하며 그리기당 오버헤드가 크게 줄어듭니다. 다양한 단계에서 효율적으로 사용할 수 있도록 리소스를 여러 양식으로 다시 구성할 수 있으며, 기능 집합은 형식에 대한 사용 시나리오에 훨씬 적은 제한을 적용합니다. 새로운 블록 압축 표준 지도 텍스처 형식도 있습니다.

새 API에서 셰이더 상수 및 디바이스 상태는 명시적 리소스이므로 하드웨어에서 훨씬 더 효율적인 캐싱과 드라이버 유효성 검사를 크게 간소화할 수 있습니다. 프로그래밍 가능한 셰이더 모델은 꼭짓점 및 픽셀 셰이더 둘 다에서 통합되었으며 잘 정의된 계산 모델 및 연산자 집합을 사용하여 더 표현이 가능해졌습니다. 또한 꼭짓점 셰이더 단계 이후 기본 형식에서 작동하도록 새 기하 도형 셰이더 단계가 추가되었습니다. 파이프라인의 꼭짓점 및 기하 도형 셰이더 단계에서 GPU의 작업 결과를 비디오 RAM으로 스트리밍하여 재사용할 수 있으므로 CPU 상호 작용을 최소화하면서 매우 복잡한 다중 패스 GPU 작업을 수행할 수 있습니다.

이러한 모든 향상된 기능을 통해 차세대 그래픽 기술을 사용할 수 있으며 애플리케이션이 GPU로 작업을 오프로드하는 기능을 확장할 수 있습니다. 오프로드를 사용하면 더 복잡한 GPU 기반 문자 스키닝, 가속 모핑 기술, 섀도 볼륨 생성 및 입체, 완전히 GPU 기반의 입자 및 물리학 시스템, 효율적인 대규모 그리기 배치로 결합된 더 복잡한 재료, 절차 세부 정보, 실시간 광선 추적 변위 매핑, 단일 패스 큐브 맵 생성 및 더 많은 기술을 모두 확보하면서 더 복잡한 애플리케이션에 대한 CPU 리소스를 확보할 수 있습니다.

Direct3D 10에서 이러한 수준의 혁신을 제공하기 위해 이전 하드웨어를 새 인터페이스의 부분 구현으로 표현할 수 없습니다. 비디오 카드는 모든 새로운 기능을 지원할 수 있거나 Direct3D 10 지원 카드가 아닙니다. 따라서 Direct3D 9는 많은 누락된 기능 비트 및 사용 제한으로 DirectX7 시대 하드웨어를 구동할 수 있지만 Direct3D 10은 새로운 세대의 비디오 카드에서만 작동합니다. 애플리케이션이 이전 비디오 하드웨어를 지원하려면 Direct3D 9 인터페이스도 지원해야 합니다. 이후 버전의 Direct3D는 버전 10을 기반으로 빌드되어 새 버전의 API로 확장하면서 Direct3D 10 기능의 엄격한 상위 집합을 보장합니다.

Direct3D 10에 대한 자세한 내용은 Direct3D 10을 참조 하세요.

Direct3D 10.1

Windows Vista 서비스 팩 1은 Direct3D 10.1을 사용하여 Direct3D 10 API를 확장하여 선택적 인터페이스와 Direct3D 10.1을 지원하는 비디오 카드의 새로운 하드웨어 기능을 지원하는 추가 셰이더 모델을 추가합니다. Direct3D 10.1을 지원할 수 있는 모든 하드웨어는 Direct3D 10의 모든 기능을 완벽하게 지원하며, 게임 개발자는 사용 가능한 경우 Direct3D 10.1의 추가 기능을 사용할 수 있습니다.

참고 항목

Direct3D 10.1은 Windows 7 데스크톱에서 사용하는 그래픽 API입니다.

 

참고 항목

Windows 7 및 Windows Vista 업데이트는 DXGI 1.1, 10level9 기능 수준 및 WARP10 디바이스에 대한 지원을 기존 Direct3D 10.1 API에 추가합니다.

 

Direct3D 11

Windows 7은 Direct3D 10.1 API의 디자인을 기반으로 하는 Direct3D Direct3D 11의 새로운 수정 버전을 지원합니다. API의 새로운 기능에는 다중 스레드 렌더링 및 리소스 만들기, 컴퓨팅 셰이더, 10level9 기능 수준 및 WARP10 소프트웨어 렌더링 디바이스에 대한 지원, 헐 및 도메인 셰이더를 사용한 테셀레이션, BC6H 및 BC7 텍스처 압축 형식, 셰이더 모델 5.0 및 동적 셰이더 링크와 같은 새로운 Direct3D 11 클래스 하드웨어 기능이 포함됩니다. 새 API는 기존 Direct3D 10 및 10.1 클래스 비디오 카드, 제한된 기능 지원으로 10level9 기능 수준을 통한 일부 Direct3D 9 카드 및 최신 세대 Direct3D 11 클래스 비디오 카드를 사용할 수 있습니다.

Windows 7에는 Direct3D 11 API 외에도 DXGI 1.1, Direct2D, DirectWrite 및 WDDM 1.1 드라이버에 대한 지원이 포함되어 있습니다.

참고 항목

Direct3D 11 및 관련 API는 Windows Vista에 대한 업데이트로도 사용할 수 있습니다(최신 버전의 DirectX 설치 방법 참조).

 

Direct3D 11.1

Windows 8은 Direct3D 11.1을 사용하여 Direct3D 11 API 를 확장합니다. Direct3D 11.1은 새로운 11_1 기능 수준뿐만 아니라 수준 11, 10_x 및 9_x 지원을 제공하는 모든 기존 하드웨어를 지원합니다.

Windows 8에는 Direct3D 11.1 API 외에도 DXGI 1.2, Direct2D 디바이스 컨텍스트 및 WDDM 1.2 드라이버에 대한 지원이 포함되어 있습니다.

참고 항목

Windows 스토어 앱에서 DirectX로 3D 그래픽을 프로그래밍하려면 Direct3D 11.1 API를 사용할 수 있습니다. DirectX를 사용하여 3D 그래픽을 프로그래밍하는 방법에 대한 자세한 내용은 DirectX를 사용한 3D 그래픽 소개를 참조하세요.

 

Windows 7용 플랫폼 업데이트: Windows 7용 플랫폼 업데이트가 설치된 Windows 7 또는 Windows Server 2008 R2의 Direct3D 11.1 API에 대해 부분 지원을 사용할 수 있습니다. Windows 7용 플랫폼 업데이트에 대한 자세한 내용은 Windows 7용 플랫폼 업데이트를 참조하세요.

OpenGL

Windows Vista, Windows 7 및 Windows 8은 Windows XP for OpenGL과 동일한 지원을 제공하므로 비디오 카드 제조업체가 하드웨어 가속 지원을 제공하는 OpenGL용 설치 가능한 클라이언트 드라이버(ICD)를 제공할 수 있습니다. Windows Vista 또는 Windows 7 또는 Windows 8을 완전히 지원하려면 이러한 ICD의 최신 버전이 필요합니다. ICD가 설치되지 않은 경우 시스템은 대부분의 경우 OpenGL v1.1 소프트웨어 계층으로 대체됩니다.

애플리케이션 호환성, GDI 및 이전 버전의 Direct3D

Windows Vista, Windows 7 및 Windows 8 그래픽 시스템은 기존 시스템을 계속 지원하면서 새로운 기술을 사용할 수 있도록 광범위한 하드웨어 및 사용 시나리오를 지원하도록 설계되었습니다. GDI, GDI+, 이전 버전의 Direct3D와 같은 기존 그래픽 인터페이스는 Windows Vista 및 Windows 7에서 계속 작동하지만 가능한 경우 내부적으로 다시 매핑됩니다. 즉, 대부분의 기존 Windows 애플리케이션이 계속 작동합니다.

Windows Vista, Windows 7 및 Windows 8은 Windows XP와 동일한 Direct3D 및 DirectDraw 인터페이스를 계속 지원하며 DirectX 버전 3으로 돌아갑니다(Direct3D의 보존 모드를 제외하고 제거됨). Windows XP Professional x64 Edition과 마찬가지로 최신 버전의 Windows에서 64비트 네이티브 애플리케이션은 Direct3D9, DirectDraw7 또는 최신 인터페이스로 제한됩니다. 고성능 애플리케이션은 Direct3D 9 이상을 사용하여 하드웨어 기능과 가장 일치하는지 확인해야 합니다.

권장 사항

그래픽 애플리케이션에 대한 API를 선택할 때 다음 권장 사항을 고려합니다.

  • 애플리케이션이 Windows XP 또는 이전 버전의 Windows를 지원해야 하는 경우 Direct3D 9를 사용합니다.
  • XPDM 드라이버로 실행되는 Windows Vista 또는 Windows 7을 지원하려면 Direct3D 9를 사용합니다. Direct3D 10 이상의 비디오 하드웨어가 없는 Windows Vista 또는 Windows 7 시스템의 경우 기존 Windows XP Direct3D 9 코드 경로를 사용하거나 Direct3D 10.1 또는 Direct3D 11 API를 통해 10level9 기능 수준을 사용하도록 선택할 수 있습니다.
  • Direct3D 11을 사용하여 Windows Vista, Windows 7 및 Windows 8에서 차세대 비디오 하드웨어를 활용할 수 있습니다. Windows 스토어 앱은 Direct3D 11 이상을 사용해야 합니다.