DirectX

**Microsoft DirectX**()는 마이크로소프트 플랫폼에서 멀티미디어, 특히 비디오 게임과 비디오 관련 작업을 처리하기 위한 API(애플리케이션 프로그래밍 인터페이스) 모음이다. 원래 이 API들의 이름은 Direct3D, 다이렉트드로, 다이렉트뮤직, 다이렉트플레이, 다이렉트사운드 등과 같이 모두 "Direct"로 시작했다. DirectX라는 이름은 이러한 모든 API를 일컫는 약어로 고안되었으며(X는 특정 API 이름을 대신함), 곧 이 컬렉션의 명칭이 되었다. 마이크로소프트가 나중에 비디오 게임 콘솔을 개발하기 시작했을 때, 이 콘솔이 DirectX 기술을 기반으로 한다는 것을 나타내기 위해 X를 이름의 기초로 사용하여 엑스박스(Xbox)라고 명명했다. X라는 이니셜은 XInput이나 크로스 플랫폼 오디오 크리에이션 툴(XACT)과 같이 엑스박스용으로 설계된 API 명칭으로 이어졌고, Direct2D 및 다이렉트라이트와 같은 윈도우용 API에서는 DirectX 패턴이 계속 유지되었다.

Direct3D(DirectX 내의 3D 그래픽 API)는 마이크로소프트 윈도우 및 엑스박스 계열 콘솔용 비디오 게임 개발에 널리 사용된다. Direct3D는 CAD/CAM 공학 등 시각화 및 그래픽 작업을 위한 다른 소프트웨어 응용 프로그램에서도 사용된다. Direct3D는 DirectX에서 가장 널리 알려진 구성 요소이기 때문에 "DirectX"와 "Direct3D"라는 이름을 혼용해서 사용하는 경우가 흔하다.

DirectX 소프트웨어 개발 키트(SDK)는 재배포 가능한 바이너리 형태의 런타임 라이브러리와 코딩에 사용되는 관련 문서 및 헤더로 구성된다. 원래 런타임은 게임에 의해 설치되거나 사용자가 직접 명시적으로 설치해야 했다. 윈도우 95는 DirectX를 포함하여 출시되지 않았으나, 윈도우 95 OEM 서비스 릴리스 2에는 DirectX가 포함되었다. 윈도우 98과 윈도우 NT 4.0은 모두 DirectX를 탑재하여 출시되었으며, 이후 출시된 모든 버전의 윈도우도 마찬가지이다. SDK는 무료로 다운로드할 수 있다. 런타임은 독점적인 폐쇄 소스 소프트웨어이지만, 대부분의 SDK 샘플에 대해서는 소스 코드가 제공된다. 윈도우 8 개발자 프리뷰 출시를 기점으로 DirectX SDK는 윈도우 SDK에 통합되었다.

## 개발 역사
1994년 말, 마이크로소프트는 차기 운영체제인 윈도우 95의 출시를 앞두고 있었다. 소비자에게 주는 가치에 있어 중요한 요소는 그 위에서 실행될 수 있는 프로그램들이었다. 마이크로소프트 직원인 알렉스 세인트 존은 여러 게임 개발자들과 만나 MS-DOS 게임을 윈도우 95로 이식할 가능성을 논의했으나, 대부분 부정적인 답변을 받았다. 비디오 게임 프로그래머들은 윈도우 환경이 MS-DOS에서 바이오스 루틴이나 직접적인 하드웨어 액세스를 통해 가능했던 필수 기능들을 제공하지 않는다고 판단했기 때문이다. 호환성에 대한 극심한 우려도 있었다. 대표적인 사례가 WinG 프로그래밍 인터페이스를 기반으로 한 디즈니 애니메이션 스토리북: 라이온 킹이었다. 게임과 함께 제공된 WinG 인터페이스로 테스트되지 않은 새로운 컴팩 컴퓨터의 수많은 호환되지 않는 그래픽 드라이버로 인해, 많은 데스크톱 시스템에서 게임이 빈번하게 충돌했고 부모들은 디즈니의 도움말 라인에 항의 전화를 쏟아냈다.

또 다른 마이크로소프트 직원인 크레이그 아이슬러는 게임 기술 작업을 위해 윈도우 95 멀티미디어 팀에 합류했다. 세인트 존으로부터 마이크로소프트의 기술이 개발자들에게 반향을 일으키지 못하고 있다는 소식을 들은 아이슬러는, 개발자가 그래픽 하드웨어의 고유 기능을 사용할 수 있게 하고 그래픽 하드웨어 업체들이 개발자가 활용할 수 있는 방식으로 혁신할 수 있도록 하는 새로운 API 세트와 드라이버 모델을 구축하기 시작했다. 프로그램 관리 지원이 필요했던 아이슬러는 에릭 엥스트롬을 영입했고, 두 사람은 DirectX 작업으로 11개의 특허를 획득했다. 이 프로젝트의 코드명은 제2차 세계 대전 당시의 동명 프로젝트 이름을 딴 맨해튼 계획이었으며, 마이크로소프트 운영체제가 실행되는 개인용 컴퓨터로 일본에서 개발된 비디오 게임 콘솔을 대체하려는 의도였다. 초기에는 방사능 표지를 로고로 사용했으나 마이크로소프트 측에서 로고 변경을 요청했다. 경영진은 이미 윈도우를 게임 플랫폼으로서 포기하고 있었기에 프로젝트에 동의하지 않았으나, 이 세 사람은 프로젝트 개발에 매진했다. 그들의 반항적인 기질로 인해 마이크로소프트 오피스 제품 담당 수석 부사장인 브래드 실버버그는 이 트리오를 "비스티 보이즈"(Beastie Boys)라고 불렀다.

세 사람의 작업 대부분은 1994년 말부터 다른 할당된 프로젝트들 사이에서 수행되었다. 4개월 만에 여러 하드웨어 제조업체의 의견을 수렴하여 팀은 1995년 게임 개발자 회의(GDC)에서 발표한 첫 번째 API 세트를 개발했다. 이 SDK에는 비트맵 그래픽 구현을 위한 다이렉트드로, 오디오를 위한 다이렉트사운드, 그리고 네트워크상 플레이어 간 통신을 위한 다이렉트플레이 라이브러리가 포함되었다. 또한 윈도우 95에 이미 존재하던 확장 조이스틱 API가 다이렉트인풋으로 처음 문서화되었으며, CD-ROM 삽입 후 즉시 설치 절차를 시작하는 기능인 자동 실행(AutoPlay) 구현 방법에 대한 설명도 SDK의 일부였다. 라이브러리의 "Direct" 부분은 이 루틴들이 기존의 핵심 윈도우 95 루틴을 우회하고 하드웨어 추상화 계층(HAL)을 통해서만 컴퓨터 하드웨어에 액세스했기 때문에 붙여진 이름이다. 팀에서는 이를 "Game SDK"라고 불렀으나, "DirectX"라는 명칭은 여러 라이브러리의 명명 방식을 조롱하던 한 기자로부터 유래했다. 팀은 그 명명 방식을 유지하기로 하고 프로젝트를 DirectX라고 부르기로 했다.

DirectX의 첫 번째 버전은 1995년 9월 "Windows Game SDK"로 출시되었다. 이 버전의 다이렉트드로 구성 요소는 윈도우 3.1용 DCI 및 WinG API를 대체하는 Win32용 라이브러리였다. DirectX는 윈도우 95를 포함한 모든 버전의 마이크로소프트 윈도우가 고성능 멀티미디어를 통합할 수 있도록 해주었다. 아이슬러는 자신의 블로그에 DirectX 1부터 5까지를 구축하던 당시의 열기에 대해 서술했다.

더 많은 개발자를 DirectX로 끌어들이기 위해 마이크로소프트는 이드 소프트웨어의 존 카맥에게 접근하여 둠과 둠 2를 MS-DOS에서 DirectX로 무료로 이식해 주겠다고 제안했으며, 게임에 대한 모든 출판권은 이드가 갖도록 했다. 카맥은 동의했고, 마이크로소프트의 게이브 뉴얼이 이식 프로젝트를 이끌었다. 1996년 8월에 "Doom 95"가 출시되었는데, 이는 최초로 상용화된 DirectX 게임이었다. 마이크로소프트는 빌 게이츠가 광고에 등장할 정도로 이 게임을 적극적으로 홍보했다.

DirectX 2.0은 1996년 중반 윈도우 95 OSR2와 윈도우 NT 4.0 출시와 함께 윈도우의 기본 구성 요소가 되었다. 윈도우 95 자체가 아직 생소했고 출시된 게임이 적었기 때문에, 마이크로소프트는 윈도우에서 게임 플랫폼을 구축하는 능력을 불신하던 개발자들에게 DirectX를 적극적으로 홍보했다. DirectX 전도사인 알렉스 세인트 존은 1996년 컴퓨터 게임 개발자 회의에서 게임 개발자 제이 반슨이 실제 사자, 토가, 실내 카니발을 방불케 하는 고대 로마 테마라고 묘사한 화려한 행사를 기획했다. 마이크로소프트가 처음으로 Direct3D를 소개하고 인터넷을 통해 멀티플레이어 "MechWarrior 2"를 시연한 곳이 바로 이 행사였다.

DirectX 팀은 수많은 컴퓨터 하드웨어 및 소프트웨어에 대해 각 DirectX 릴리스를 테스트해야 하는 도전적인 과제에 직면했다. 각 베타 및 최종 릴리스마다 다양한 그래픽 카드, 오디오 카드, 메인보드, CPU, 입력 장치, 게임 및 기타 멀티미디어 응용 프로그램을 테스트했다. 또한 DirectX 팀은 하드웨어 업계가 새로운 하드웨어 설계 및 드라이버 릴리스가 DirectX와 호환되는지 확인할 수 있도록 하는 테스트 프로그램을 구축하고 배포했다.

DirectX 이전에 마이크로소프트는 윈도우 NT 플랫폼에 OpenGL을 추가한 바 있었다. OpenGL은 실리콘 그래픽스 사가 3D 그래픽 프로그래밍을 응용 프로그램 프로그래밍의 주류로 끌어들이기 위해 설계한 크로스 플랫폼 및 윈도 시스템 독립적인 그래픽 하드웨어 소프트웨어 인터페이스였다. 2D 그래픽 및 이미징에도 사용될 수 있었으며, 마이크로소프트를 포함한 아키텍처 검토 위원회(ARB)에 의해 제어되었다. Direct3D는 초기에는 게임 사용에 중점을 둔 OpenGL의 마이크로소프트 제어 대안으로 의도되었다. 3D 게임이 성장하면서 게임 개발자들은 OpenGL 역시 게임 개발에 효과적으로 사용될 수 있음을 발견했다. 그 시점에서 크로스 플랫폼인 OpenGL 지지자들과 윈도우 전용인 Direct3D 지지자들 사이에 "전쟁"이 시작되었다. 공교롭게도 마이크로소프트 내에서 OpenGL 지원은 DirectX 팀이 담당했다. 개발자가 컴퓨터 게임에서 OpenGL 3D 그래픽 API를 사용하기로 선택하더라도, OpenGL에는 사운드나 조이스틱 지원과 같은 DirectX의 모든 기능이 포함되어 있지 않았기 때문에 Direct3D를 제외한 DirectX의 다른 API들이 종종 OpenGL과 결합되어 사용되었다.

콘솔 전용 버전에서 DirectX는 마이크로소프트의 엑스박스, 엑스박스 360 및 엑스박스 원 비디오 게임 콘솔 API의 기초로 사용되었다. 이 API는 마이크로소프트와 오리지널 엑스박스용 커스텀 그래픽 하드웨어를 개발한 엔비디아가 공동으로 개발했다. 엑스박스 API는 DirectX 8.1 버전과 유사했지만 다른 콘솔 기술과 마찬가지로 업데이트가 불가능하다. 엑스박스의 코드명은 DirectXbox였으나 상업적 명칭을 위해 엑스박스로 단축되었다.

2002년 마이크로소프트는 픽셀 및 버텍스 셰이더 2.0 버전을 통해 이전보다 훨씬 긴 셰이더 프로그램 사용을 지원하는 DirectX 9를 출시했다. 마이크로소프트는 이후로도 DirectX 제품군을 계속 업데이트하여 2004년 8월에 출시된 DirectX 9.0c에서 셰이더 모델 3.0을 도입했다.

2005년 4월부로 다이렉트쇼는 DirectX에서 제거되어 마이크로소프트 플랫폼 SDK로 옮겨졌다.

DirectX는 마이크로소프트의 윈도우 폰 8에 탑재된 것이 확인되었다.

실시간 광선 추적(ray tracing)은 2018년에 DXR로 발표되었다. 같은 해 DirectX 셰이더 컴파일러에 HLSL을 SPIR-V로 컴파일하는 기능도 추가되었다.

## 구성 요소
DirectX는 여러 API로 구성되어 있다.

* Direct3D (D3D): 실시간 3차원 렌더링 API
* DXGI: 어댑터와 모니터를 나열하고 Direct3D 10 이후 버전의 스왑 체인을 관리한다.
* Direct2D: 2D 그래픽 API
* 다이렉트라이트: 텍스트 렌더링 API
* 다이렉트컴퓨트: 그래픽 처리 장치를 이용한 범용 컴퓨팅용 API
* DirectX 진단 도구(DxDiag): 오디오, 비디오, 입력 드라이버와 같은 DirectX 관련 구성 요소를 진단하고 보고서를 생성하는 도구
* XACT3: 고수준 오디오 API
* XAudio2: 저수준 오디오 API
* DirectX Raytracing (DXR): 실시간 광선 추적 API
* DirectStorage: GPU 지향 파일 I/O API
* DirectML: GPU 가속 머신러닝 및 인공지능 API
* DirectSR: GPU 가속 해상도 업스케일링 API
* 미디어 파운데이션
** 가속 비디오 재생을 위한 DirectX 비디오 가속 (DXVA)

마이크로소프트는 다음 구성 요소의 사용을 중단(deprecated)했다.
* DirectX Media: 다음으로 구성된다.
** 2D/3D 웹 애니메이션을 위한 DirectAnimation, 멀티미디어 재생 및 스트리밍을 위한 다이렉트쇼
** DirectX Media Objects: 인코더, 디코더 및 효과와 같은 스트리밍 객체 지원 (미디어 파운데이션 트랜스폼(MFT)으로 대체됨)
** 웹 인터랙티비티를 위한 DirectX Transform, 고수준 3D 그래픽을 위한 Direct3D Retained Mode
** 오디오 신호 처리를 위한 DirectX 플러그인
* 다이렉트드로: 2D 그래픽 API (Direct2D로 대체됨)
* 다이렉트인풋: 키보드, 마우스, 조이스틱 및 게임 컨트롤러와 인터페이스하기 위한 입력 API (버전 8 이후 엑스박스 360용 컨트롤러를 위한 XInput이나 키보드 및 마우스 입력을 위한 표준 WM_INPUT 윈도우 메시지 처리 방식으로 대체됨)
* 다이렉트플레이: 로컬 영역 또는 광역 네트워크 통신을 위한 네트워크 API (버전 8 이후 Games for Windows Live 및 엑스박스 라이브로 대체됨)
* 다이렉트사운드: 오디오 API (DirectX 8부터 XAudio2 및 XACT3로 대체됨)
* DirectSound3D (DS3D): 3차원 오디오 효과 API
* 다이렉트뮤직: DirectMusic Producer에서 제작된 사운드트랙 재생을 위한 구성 요소

DirectX 기능은 COM 스타일의 객체 및 인터페이스 형태로 제공된다. 또한 DirectX 구성 요소 자체는 아니지만, Direct3D 9를 기반으로 구축된 Managed Direct3D나 마이크로소프트 XNA 그래픽 라이브러리와 같은 관리 객체들이 DirectX의 일부 파트 위에 구축되었다.

마이크로소프트는 "PIX"라고 불리는 DirectX용 디버깅 도구를 배포하고 있다.

## 버전

### DirectX 9

2002년 마이크로소프트가 도입한 DirectX 9는 DirectX 제품군에서 매우 중요한 릴리스였다. 이는 윈도우의 그래픽 성능에 많은 중요한 기능과 향상을 가져왔다. 출시 당시 윈도우 98, 윈도우 미, 윈도우 2000 및 윈도우 XP를 지원했다. 2024년 8월 현재까지 하위 호환성을 위해 이후 모든 버전의 윈도우에서 지원되고 있다.

DirectX 9에서 도입된 주요 기능 중 하나는 픽셀 셰이더 2.0과 버텍스 셰이더 2.0을 포함하는 셰이더 모델 2.0이었다. 이를 통해 더욱 복잡하고 사실적인 그래픽 렌더링이 가능해졌다. 또한 향상된 하드웨어 가속 기능과 GPU 자원의 효율적 활용을 통해 필요한 성능 향상을 가져왔다. 또한 개발자가 셰이더를 제작할 수 있는 접근성 높은 방법인 HLSL을 도입했다.

DirectX 9.0c는 원본의 업데이트 버전으로, 수년에 걸쳐 지속적으로 변경되면서 이전 운영체제와의 호환성에 영향을 미쳤다. 2007년 1월부터는 윈도우 2000 및 윈도우 XP가 최소 사양 운영체제가 되었다. 이는 윈도우 98 및 윈도우 미에 대한 지원이 공식적으로 중단되었음을 의미한다. 2024년 8월 현재 DirectX 9.0c는 여전히 정기적으로 업데이트되고 있다.

윈도우 XP SP2 이상에는 DirectX 9.0c가 포함되어 있으나, 2005년 2월 DirectX 9.0 SDK 이상 버전으로 컴파일된 DirectX 9.0c 응용 프로그램을 위해서는 최신 DirectX 런타임 재배포 가능 패키지 설치가 필요할 수 있다.

DirectX 9는 게임 개발에 지대한 영향을 미쳤다. 2000년대 중반부터 2010년대 초반까지의 많은 게임이 DirectX 9을 사용하여 개발되었으며, 개발자들에게 표준 타겟이 되었다. 오늘날에도 일부 게임은 구형 하드웨어나 성능이 낮은 하드웨어를 위한 옵션으로 DirectX 9를 사용하고 있다.

### DirectX 10

섬네일|마이크로소프트 DirectX 10 로고 워드마크
DirectX API의 대규모 업데이트인 DirectX 10은 2006년 말에 출시된 윈도우 비스타 및 그 이후 버전에서만 사용할 수 있도록 함께 제공되었다. 윈도우 XP와 같은 이전 버전의 윈도우는 DirectX 10 전용 응용 프로그램을 실행할 수 없다. 대신 DirectX 10 하드웨어를 갖춘 윈도우 XP 시스템에서 실행되는 프로그램은 윈도우 XP에서 사용 가능한 최신 버전인 DirectX 9.0c 코드 경로를 사용하게 된다.

DirectX 10의 변경 사항은 광범위했다. 이전 DirectX API의 많은 부분이 최신 DirectX SDK에서 사용 중단되었으며 호환성 유지를 위해서만 보존되었다. 다이렉트인풋은 XInput으로 대체되면서 사용 중단되었고, 다이렉트사운드는 크로스 플랫폼 오디오 크리에이션 툴 시스템(XACT)으로 대체되면서 사용 중단되었다. 또한 비스타 오디오 스택이 사운드를 CPU 소프트웨어에서 렌더링하게 됨에 따라 하드웨어 가속 오디오 지원도 상실되었다. DirectPlay DPLAY.DLL도 제거되어 dplayx.dll로 대체되었으며, 이 DLL에 의존하는 게임은 이를 복제하여 dplay.dll로 이름을 변경해야 한다.

하위 호환성을 달성하기 위해 윈도우 비스타의 DirectX에는 여러 버전의 Direct3D가 포함되어 있다.
* **Direct3D 9**: 윈도우 XP에 있던 Direct3D 9 동작을 에뮬레이션한다. WDDM 드라이버가 설치된 경우 비스타의 윈도우 디스플레이 드라이버 모델의 세부 사항과 장점은 응용 프로그램으로부터 숨겨진다. 예를 들어 비스타로 업그레이드한 후 XP 그래픽 드라이버(XDDM)만 설치된 경우 사용할 수 있는 유일한 API이다.
* **Direct3D 9Ex** (윈도우 비스타 개발 중 내부적으로 9.0L 또는 9.L로 알려짐): 기존 Direct3D 응용 프로그램과의 호환성을 유지하면서 WDDM의 새로운 기능에 대한 전체 액세스를 허용한다(WDDM 드라이버가 설치된 경우). 윈도우 에어로 사용자 인터페이스는 D3D 9Ex에 의존한다.
* **Direct3D 10**: 윈도우 비스타의 새로운 드라이버 모델을 기반으로 설계되었으며 셰이더 모델 4를 포함하여 렌더링 성능과 유연성에 많은 개선 사항을 특징으로 한다.
Direct3D 10.1은 2008년 2월에 출시된 윈도우 비스타 서비스 팩 1에 포함된 Direct3D 10.0의 점진적 업데이트이다. 이 릴리스는 주로 그래픽 벤더를 위한 몇 가지 이미지 품질 표준을 설정하는 동시에 개발자에게 이미지 품질에 대한 더 많은 제어권을 부여한다. 또한 큐브 맵 어레이, MRT당 별도의 블렌드 모드, 픽셀 셰이더에서의 커버리지 마스크 내보내기, 샘플별 픽셀 셰이더 실행 기능, 멀티샘플링된 깊이 버퍼 액세스 지원을 추가했으며, 비디오 카드가 셰이더 모델 4.1 이상 및 32비트 부동 소수점 연산을 지원할 것을 요구한다. Direct3D 10.1은 여전히 Direct3D 10 하드웨어를 완전히 지원하지만, 새로운 기능을 모두 활용하려면 업데이트된 하드웨어가 필요하다.

### DirectX 11

섬네일|마이크로소프트 DirectX 11 로고 워드마크
마이크로소프트는 시애틀에서 열린 Gamefest 08 행사에서 DirectX 11을 공개했다. 최종 플랫폼 업데이트는 2009년 10월 27일 윈도우 비스타용으로 출시되었으며, 이는 Direct3D 11을 기본 표준으로 탑재하여 출시된 윈도우 7의 최초 출시 일주일 후였다.

주요 예정 기능으로는 그래픽 처리 장치 소프트웨어 지원(다이렉트컴퓨트), 테셀레이션 지원을 포함한 Direct3D 11, 그리고 비디오 게임 개발자가 멀티 코어 프로세서를 더 잘 활용하는 게임을 개발할 수 있도록 돕는 개선된 멀티스레딩 지원이 있었다. 멀티스레드 리소스 처리와 같은 새로운 API의 일부는 Direct3D 9/10/10.1 클래스 하드웨어에서도 지원될 수 있다. 하드웨어 테셀레이션 및 셰이더 모델 5.0은 Direct3D 11 지원 하드웨어가 필요하다. Direct3D 11은 Direct3D 10.1의 엄격한 상위 집합으로, 버전 10.1의 모든 하드웨어 및 API 기능을 유지하며 새로운 기능이 필요한 경우에만 기능을 추가한다. 이는 이전 버전의 DirectX와의 하위 호환성을 유지하는 데 도움이 된다.

DirectX 11에 대한 네 가지 업데이트가 출시되었다.
* DirectX 11.1은 윈도우 8에 포함되어 있다. 성능 향상을 위해 WDDM 1.2를 지원하고, Direct2D(현재 버전 1.1), Direct3D, 다이렉트컴퓨트의 통합이 개선되었으며, XNA 프레임워크의 DirectXMath, XAudio2 및 XInput 라이브러리를 포함한다. 또한 게임 및 비디오를 위한 스테레오스코픽 3D 지원 기능도 갖추고 있다. DirectX 11.1은 윈도우 7 플랫폼 업데이트를 통해 윈도우 7으로도 일부 백포트되었다.
* DirectX 11.2는 윈도우 8.1(RT 버전 포함) 및 윈도우 서버 2012 R2에 포함되어 있다. 지오메트리 실현화(geometry realizations)와 같은 몇 가지 새로운 기능을 Direct2D에 추가했다. 또한 장면의 일부 요소를 낮은 해상도로 렌더링한 다음 높은 해상도로 렌더링된 다른 부분과 하드웨어 오버레이를 통해 합성할 수 있는 스왑 체인 컴포지션을 추가했다.
* DirectX 11.X는 엑스박스 원에서 실행되는 DirectX 11.2의 상위 집합이다. 여기에는 나중에 DirectX 12의 일부로 발표된 드로우 번들(draw bundles)과 같은 기능이 실제로 포함되어 있었다.
* DirectX 11.3은 GDC에서 DirectX 12와 함께 발표되었으며 2015년에 출시되었다. 이는 DirectX 12를 보완하는 고수준 대안으로 의도되었다. 윈도우 10에 포함되어 있다.

### DirectX 12

DirectX 12는 2014년 3월 20일 GDC에서 마이크로소프트에 의해 발표되었으며, 2015년 July 29일 윈도우 10과 함께 공식적으로 출시되었다.

새로운 DirectX 릴리스의 주요 특징은 드라이버 오버헤드를 줄일 수 있는 Direct3D 12용 고급 저급 프로그래밍 언어 API의 도입이었다. 개발자는 이제 GPU에 자신만의 명령 목록과 버퍼를 구현할 수 있으며, 이를 통해 병렬 컴퓨팅을 통한 효율적인 자원 활용이 가능해졌다. 수석 개발자인 맥스 맥멀런은 Direct3D 12의 주된 목표가 "폰, 태블릿, PC에서 콘솔 수준의 효율성을 달성하는 것"이라고 밝혔다. Direct3D 12의 출시는 AMD 그래픽 카드용 맨틀, iOS 및 macOS용 애플의 메탈, 그리고 크로노스 그룹의 크로스 플랫폼 벌컨을 포함한 저오버헤드 그래픽 API를 위한 다른 이니셔티브와 함께 이루어졌다.

멀티어댑터 지원은 DirectX 12의 기능으로, 개발자가 시스템의 여러 GPU를 동시에 활용할 수 있게 해준다. 이전에는 멀티 GPU(mGPU) 지원이 AMD 크로스파이어X나 엔비디아 SLI와 같은 벤더 구현에 의존했었다.
* 암시적(Implicit) 멀티어댑터 지원은 이전 버전의 DirectX와 유사한 방식으로 작동하며, 프레임은 유사한 연산 능력을 가진 연결된 GPU들에서 번갈아 가며 렌더링된다.
* 명시적(Explicit) 멀티어댑터는 개발자에게 두 가지 고유한 API 패턴을 제공한다. 연결된 GPU(Linked GPUs)는 DirectX가 SLI 또는 크로스파이어X의 그래픽 카드를 단일 GPU로 간주하고 결합된 자원을 사용할 수 있게 한다. 반면 연결되지 않은 GPU(Unlinked GPUs)는 DirectX가 서로 다른 벤더의 GPU를 활용할 수 있게 하여, CPU의 내장 그래픽으로 외장 GPU를 보조하거나 AMD와 엔비디아 카드를 결합할 수 있게 한다. 그러나 정교한 혼합 멀티 GPU 설정은 훨씬 더 세심한 개발자의 지원이 필요하다.

DirectX 12는 모든 페르미 및 이후 엔비디아 GPU, AMD의 GCN 기반 칩, 그리고 인텔의 하스웰 및 이후 프로세서의 그래픽 유닛에서 지원된다.

SIGGRAPH 2014에서 인텔은 컴퓨터로 생성된 소행성대 데모를 공개했는데, 여기서 DirectX 12는 렌더링 속도와 CPU 전력 소비 면에서 DirectX 11보다 50~70% 더 효율적이라고 주장되었다.

애쉬즈 오브 더 싱귤래리티는 DirectX 12를 활용한 최초의 공개 게임이었다. 2015년 8월 아르스 테크니카의 테스트에 따르면 엔비디아 지포스 980 Ti의 경우 DirectX 11 모드보다 DirectX 12에서 약간의 성능 저하가 나타난 반면, AMD 라데온 R9 290x는 DirectX 12에서 최대 70%의 일관된 성능 향상을 달성했으며 일부 시나리오에서는 AMD가 DirectX 12에서 더 강력한 엔비디아 제품을 능가했다. 이러한 성능 차이는 DirectX 12에 대한 엔비디아의 미흡한 드라이버 최적화 때문이거나, 혹은 DirectX 11 직렬 실행에 최적화된 카드의 하드웨어적 한계 때문일 수 있지만 정확한 원인은 불분명하다.

엑스박스에서 DirectX 12의 성능 향상은 PC만큼 상당하지 않다.

2018년 3월, 지원되는 하드웨어에서 실시간 광선 추적이 가능한 DirectX Raytracing(DXR)이 발표되었으며, DXR API는 윈도우 10 2018년 10월 업데이트에 추가되었다.

2019년 마이크로소프트는 특정 게임 타이틀에 대한 플러그인 형식으로만 윈도우 7에 DirectX 12가 도입됨을 발표했다.

### DirectX 12 Ultimate
마이크로소프트는 2020년 3월 DirectX 12 Ultimate를 공개했다. DirectX 12 Ultimate는 윈도우 10 컴퓨터와 엑스박스 시리즈 X 및 기타 9세대 엑스박스 콘솔 모두에서 공통 라이브러리로 통합된다. Ultimate의 새로운 기능에는 DirectX Raytracing 1.1, 설계 선택에 따라 셰이딩의 세부 수준을 프로그래머가 제어할 수 있는 가변 속도 셰이딩(Variable Rate Shading), 메시 셰이더(Mesh Shaders), 샘플러 피드백(Sampler Feedback) 등이 포함된다.

### 버전 역사

마이크로소프트의 DxDiag 도구(버전 4.09.0000.0900 이상)에서 보고되는 버전 번호는 x.xx.xxxx.xxxx 형식을 사용한다. 그러나 DirectX 및 윈도우 XP MSDN 페이지에서는 레지스트리가 항상 x.xx.xx.xxxx 형식이었다고 주장한다. 따라서 위 표에서 버전이 '4.09.00.0904'로 나열된 경우 마이크로소프트의 DxDiag 도구에서는 '4.09.0000.0904'로 표시될 수 있다.

## 호환성
다양한 버전의 윈도우는 다양한 버전의 DirectX를 포함하고 지원해 왔으며, 이를 통해 새로운 운영체제가 구형 API, 드라이버 및 하드웨어를 대체하며 단계적으로 폐지될 때까지 이전 DirectX 버전용으로 설계된 응용 프로그램을 계속 실행할 수 있게 한다.

Direct3D 및 다이렉트사운드와 같은 API는 하드웨어와 상호 작용해야 하며, 이는 장치 드라이버를 통해 이루어진다. 하드웨어 제조업체는 특정 DirectX 버전의 장치 드라이버 인터페이스(DDI)에 맞는 드라이버를 작성해야 하며, 각 개별 하드웨어가 DirectX와 호환되는지 테스트해야 한다. 일부 하드웨어 장치는 DirectX 호환 드라이버만 제공한다(즉, 해당 하드웨어를 사용하려면 DirectX를 설치해야 함). 초기 버전의 DirectX에는 당시 사용 가능한 모든 DirectX 호환 드라이버의 최신 라이브러리가 포함되어 있었다. 그러나 이후에는 전체 라이브러리 대신 사용자 하드웨어와 관련된 드라이버만 다운로드할 수 있게 하는 웹 기반 윈도우 업데이트 드라이버 업데이트 시스템을 선호함에 따라 이 관행은 중단되었다.

DirectX 10 이전의 DirectX 런타임은 구형 드라이버와 하위 호환되도록 설계되었다. 즉, 새로운 버전의 API는 이전 버전의 DDI에 맞게 작성된 구형 드라이버와 상호 운용되도록 설계되었다. 응용 프로그램 프로그래머는 특정 하드웨어 기능과 연결된 복잡한 "cap bits" 시스템을 사용하여 사용 가능한 하드웨어 성능을 쿼리해야 했다. Direct3D 7 이전 버전은 모든 버전의 DDI에서 작동하지만, Direct3D 8은 최소 DDI 레벨 6을 요구하고 Direct3D 9는 최소 DDI 레벨 7을 요구한다. 그러나 윈도우 비스타의 Direct3D 10 런타임은 대폭 업데이트된 DDI로 인해 구형 하드웨어 드라이버에서 실행될 수 없다. 이 DDI는 통합 기능 세트를 요구하며 "cap bits"의 사용을 중단했다.

Direct3D 10.1은 "기능 수준" 10_0 및 10_1을 도입하여 지정된 버전의 Direct3D API에 정의된 하드웨어 기능만 사용할 수 있도록 했다. Direct3D 11은 레벨 11_0 및 "10 레벨 9"를 추가했다. 10 레벨 9는 Direct3D 9 하드웨어에서 실행되도록 설계된 Direct3D 10 API의 하위 집합으로, 비디오 카드의 성능(저사양, 중사양, 고사양)에 따라 그룹화된 세 가지 기능 수준(9_1, 9_2, 9_3)을 갖는다. 런타임은 모든 WDDM 드라이버에 제공되는 Direct3D 9 DDI를 직접 사용한다. 기능 수준 11_1은 Direct3D 11.1과 함께 도입되었다.

### 닷넷 프레임워크
2002년 마이크로소프트는 닷넷 프레임워크와 호환되는 DirectX 버전을 출시하여, 프로그래머가 관리 코드를 사용하는 C++나 C#과 같은 호환 언어를 사용해 닷넷 응용 프로그램 내에서 DirectX 기능을 활용할 수 있게 했다. 이 API는 "Managed DirectX"(줄여서 MDX)로 알려졌으며 기초가 되는 네이티브 DirectX API 성능의 98% 수준으로 작동한다고 주장되었다. 2005년 12월, 2006년 2월, 4월, 8월에 마이크로소프트는 이 라이브러리에 대한 연속적인 업데이트를 출시했으며, 이는 Managed DirectX 2.0이라는 베타 버전에서 정점에 달했다. Managed DirectX 2.0은 이전에는 여러 어셈블리에 흩어져 있던 기능을 단일 어셈블리로 통합하여 소프트웨어 개발자의 종속성 문제를 단순화했지만, 이후 이 버전의 개발은 중단되었으며 더 이상 지원되지 않는다. Managed DirectX 2.0 라이브러리는 2006년 10월 5일에 만료되었다.

2006년 GDC 기간 중 마이크로소프트는 XNA 프레임워크를 발표했다. 이는 DirectX, HLSL 및 기타 도구를 하나의 패키지로 쉽게 통합할 수 있게 하여 게임 개발을 돕기 위해 의도된 DirectX의 새로운 관리 버전(Managed DirectX와 유사하지만 동일하지는 않음)이다. 또한 엑스박스 360에서의 관리 코드 실행을 지원한다. XNA 게임 스튜디오 익스프레스 RTM은 2006년 12월 11일 윈도우 XP용 무료 다운로드로 제공되었다. DirectX 런타임과 달리 Managed DirectX, XNA 프레임워크 또는 엑스박스 360 API(XInput, XACT 등)는 윈도우의 일부로 제공되지 않았다. 개발자는 자신의 게임이나 응용 프로그램과 함께 런타임 구성 요소를 재배포해야 한다.

최신 XNA 릴리스를 포함한 마이크로소프트의 어떤 제품도 닷넷 프레임워크용 DirectX 10 지원을 제공하지 않는다.

관리 언어에서 DirectX를 사용하기 위한 다른 접근 방식은 다음과 같은 서드파티 라이브러리를 사용하는 것이다.

* SlimDX: 닷넷 프레임워크 기반의 DirectX 프로그래밍을 위한 오픈 소스 라이브러리
* SharpDX:: 모든 윈도우 플랫폼에서 닷넷용 전체 DirectX API를 제공하는 오픈 소스 프로젝트로, 고성능 게임, 2D 및 3D 그래픽 렌더링뿐만 아니라 실시간 사운드 응용 프로그램 개발을 가능하게 한다.
* DirectShow.NET: 다이렉트쇼 하위 집합용
* Windows API CodePack for .NET Framework : 마이크로소프트의 오픈 소스 라이브러리

## 대안
DirectX API 제품군에 대한 대안이 존재하며, OpenGL, 그 후속인 벌컨, 메탈 및 맨틀이 Direct3D와 비교할 만한 가장 많은 기능을 갖추고 있다. 다른 API의 예로는 SDL, 알레그로, OpenMAX, OpenML, OpenAL, OpenCL, FMOD, SFML 등이 있다. 이러한 라이브러리 중 상당수는 크로스 플랫폼이거나 오픈 소스 코드베이스를 가지고 있다. 또한 와인에서 제공하는 것과 같이 동일한 API 제공을 목표로 하는 대안 구현체들도 있다. 나아가 ReactOS 개발자들은 "ReactX"라는 이름으로 DirectX 재구현을 시도하고 있다.

## 같이 보기

* 액티브X
* Direct3D
* 그래픽 장치 인터페이스
* 그래픽스 파이프라인
* 심플 다이렉트미디어 레이어
* 벌컨 (API)

## 각주

## 외부 링크
*  공식 사이트
* 개발자 네트워크
*  DirectX World - DirectX를 배우는 곳. 그래픽 엔진을 만드는 법을 가르쳐 준다.


분류:마이크로소프트 API
분류:API
분류:1995년 소프트웨어