본문 바로가기

Fun,Fun,Fun

다이렉트 X 엑스(Direct X)에 대한 이야기.

다이렉트 엑스(Microsoft DirectX)



Microsoft DirectX ( 다이렉트 X)는 마이크로 소프트가 개발한 게임 멀티미디어 처리를위한 API의 집합이다.
Windows · Xbox · Xbox 360 · Xbox One 용으로 널리 이용되고 있다. DirectX 호환 비디오 카드를 이용 하여 고품질의 3D 그래픽을 빠르게 렌더링할 수있다. 오버 헤드를 줄인 장치로 가상화를 제공한다. 특히 ' 파이널 판타지 XV '와 같이 DirectX로 개발하고 거기에서 다른 기종에 맞는 이식을 하기 위해 사용되는 경우도 있다.


DirectX 런타임 라이브러리와 SDK는 모두 마이크로 소프트 웹사이트에서 무료로 다운로드할 수 있지만, 독점으로 소스 코드는 비공개 이다. 또한 Windows 8에서는 Windows SDK에 통합 되었다.


2013년 6월 현재 최신 버전은 DirectX 11.2 이다. 이것은 Windows 8.1 · Xbox One 전용 버전 이다. Windows 8 전용은 DirectX 11.1이며, Windows 7 · Windows Vista에서는 DirectX 11.0, Windows XP · 2000 · Me · 98/98SE는 DirectX 9 ( 9.0c ), Windows 95은 DirectX 8 ( 8.0a )가 최신 버전이 된다. 




DirectX Runtime
" . dll 을 찾을 수 없습니다 "라는 오류를 해결 하려면 DirectX Runtime의 업데이트가 필요하다.


DirectX 의 컴포넌트
DirectX 기능은 관리되는 코드 인터페이스 세트와 마찬가지로 COM 인터페이스의 형태로 제공되고 있다.
DirectX Graphics : DirectX 8의 명칭 .
DirectDraw : 2 차원 그래픽 ( DirectX 7까지 존재 ) .
Direct3D : 3 차원 그래픽 .
Direct2D : Windows 7에서 사용할 수있는 새로운 2 차원 그래픽 API .
DirectWrite : Windows 7 에서 사용할 수있는 새로운 고급 텍스트 렌더링 API .
DirectX Audio : DirectX 8의 명칭 .
DirectSound : 사운드 재생및 녹음 .
DirectSound3D ( DS3D ) : 3 차원 사운드 재생 .
DirectMusic : DirectMusic Producer로 생성된 음악 트랙을 재생한다.
XACT
XAudio2
DirectX Input
DirectInput : 키보드, 마우스, 게임 패드, 조이스틱 입력 처리. 8 이상 업데이트 되지 않습니다. 키보드와 마우스는 WM INPUT을 대신 사용 한다.
XInput
DirectPlay 네트워크 통신. 8 이상 업데이트 되지 않습니다.
DirectShow : 각종 음성 · 동영상 재생 · 작성. Windows SDK에 이행.
DirectAnimation : 2D web 애니메이션용.
DirectTransform : web의 상호 작용및 높은 수준의 3D 그래픽을 위한 Direct3D Retained Mode.
DirectX Media Objects : 인코더, 디코더 , 효과같은 스트리밍 개체를 지원합니다.
DirectSetup : DirectX 런타임 설정용이며, 정확하게는 API가 아니다.
DirectX Video Acceleration ( DXVA ) : 동영상 처리 API. 버전 1.0은 DirectShow의 일부였지만, Windows Vista에서 사용할 수있는 버전 2.0 DirectShow및 Media Foundation에서 독립하고 있다.




역사
1994년 종반 Microsoft는 Windows 95를 출시 하려고 했지만 당시 프로그래머는 Windows 95 보다는 오히려 MS- DOS쪽이 게임 프로그래밍에 적합하다고 생각하는 경향이 있었다. '어떤 프로그램을 만들 수 있을까 '라는 것은 OS의 평가 기준으로 큰 비중을 차지한다. 마이크로 소프트의 세 명의 직원 크레이그 아이슬러, 알렉스 존스, 에릭 잉스트롬은 이러한 경향을 우려하고 있었다.


MS- DOS 환경에서 프로그램은 비디오 카드, 키보드, 마우스, 사운드카드등 다양한 시스템 부품에 직접 액세스할 수 있었지만 , Windows 95 메모리 보호를 위해 이러한 직접 액세스가 제한 되어 버리고 말았다. 앞으로 몇개월 동안 Windows 95이 나올때  Microsoft는 Windows 95에서 프로그램의 자유도를 올리는 구조 를 만들어 내야했다. 아이슬러와 존 잉스트롬의 세 사람은 이러한 문제 해결에 나섰다. 이렇게 만들어진 것이 DirectX 이다.


DirectX의 첫 번째 버전은 Windows Games SDK로 1995년 9월에 출시 되었다. 이것은 Windows3.1에 있던 WinG API및 DCI와 32비트용으로 이식한 것이다. 이 때, 마이크로 소프트는 ATI의 개발팀에서 게임 그래픽의 기본 부분에 대한 기술 제공을 받았다. 이후, 아이슬러 ( 개발 리더 ), 존, 잉글스트롬 ( 프로그램 책임자 )의 세팀을 중심으로 DirectX의 개발이 진행되어 결국 이후의 모든 Windows 에서 DirectX가 멀티미디어 기능을 담당하게 되었다. DirectX 1-5 개발의 좌충우돌은 아이슬러 블로그에 자세하게 쓰여져 있다.


DirectX의 등장 이전에 마이크로 소프트는 OpenGL을 Windows NT에 탑재해 버리고 있었다. OpenGL은 동작 ( 당시에는 ) 하이 스펙인 환경이 필요했던데다가, 용도도 CAD및 엔지니어링에 한정되어 있었다. 그런 가운데 Direct3D는 게임용으로는 오버 스펙 기색이었다 OpenGL의 경량 버전으로 디자인되고 여기에서 Direct3D와 OpenGL과 사용자간의 대립이 시작되었다. Windows 전용이었던 Direct3D는 마이크로 소프트 3E 전략( embrace , extend , extinguish - 흡수, 확대, 근절 )으로 OpenGL 사용자로부터 비난 받게 되었다. 그러나 DirectX에는 사운드나 조이스틱등 OpenGL이 커버할 수없는 기능이 포함되어 있었기 때문에, DirectX의 다른 API와 OpenGL를 조합하여 사용되는 경우가 많았다. 후에는 OpenGL과 SDL의 조합도 많다.



게임기는 세가의 드림 캐스트에 Windows CE와 함께 DirectX가 세계에서 처음 사용 되었다. 마이크로 소프트의 Xbox 및 Xbox 360 에도 탑재 되었다. Xbox 콘솔 API는 마이크로 소프트와 NVIDIA ( Xbox 사용자 지정 그래픽칩 개발 업체 )에서 공동 개발 되었다. Xbox API는 DirectX 8.1에 가깝지만, 콘솔에서 업데이트를 허용하지 않으므로 다른 사람과 다르다. Xbox의 코드 네임은 DirectXbox이었지만, 상품명은 단축 하여 Xbox로 되었다.


2002년에 마이크로 소프트는 이전 보다 훨씬더 긴 쉐이더 프로그램을 다룰 픽셀 버텍스 쉐이더 버전 2.0 을 지원하는 DirectX 9을 출시 했다. 2004년 8월에는 셰이더 모델 3.0을 도입한 DirectX 9.0c를 발표하고 그 이후도 DirectX 세트의 업데이트를 계속하고있다.


2005년 4월 현재 DirectShow는 DirectX에서 제거되고 대신 Microsoft Platform SDK로 이동 했다. 그러나 DirectShow샘플을 빌드 하기 위해서는 DirectX가 필요하다.


DirectCompute에 대한 2008년 11월에 개최된 하드웨어 기술을 위한 국제 회의 'WinHEC 2008' 에서 " DirectX 10.1에서 지원 하겠다"고 발표가 있었다. DirectX 10세대의 GPU에서도, DirectCompute를 이용할 수있게 되었다.




릴리스 내역
WinG , Display Control Interface Windows 3.1시대.


DirectX 1.0 게임 제작을위한 API 집 GameSDK로 발표 되었다. 1995년 10월


DirectX 2.0 Direct3D ( Immediate Mode , Retained Mode )의 등장. 1996년 6월


DirectX 3.0 DirectSound3D 등장 , DirectInput 통합. Windows NT 4.0 SP3 이상으로 동고. 1996년 9월 25일


ActiveMovie1 DirectShow의 전신. ActiveX의 구성 요소 이며, DirectX에 포함 되지 않는다. 1996년 11월 5일


DirectX 4.0 등장 예정이었지만 , DirectX 3.0에서 경미한 변화 이며, 이미 DirectX 5.0이 로드맵에 있었기 때문에 공급 업체의 요청에 의해 취소 되었다.


DirectX 5.0 Direct3D 에 DrawPrimitive ( OpenGL 과 같은 기본 단위 그리기 기능 )가 등장. Windows 98 는 DirectX 5.2이 탑재 되었다. 1997년 8월 4일


DirectX Media DirectShow및 DirectAnimation만 배포 . " DirectX " 는 총칭 이지만, 특히 구분하는 경우 " DirectX Foundation " " DirectX Media " 와 구분하여 사용할 수가 있다. 1997년 12월 1일


DirectX 6.0 3D 렌더링을위한 " Direct3D " 강화, AMD 옹호의 3D용 명령어 세트 " AMD 3DNow ! " 에 대한 대응이나 지오메트리 파이프 라인의 재검토 , 텍스처 데이터 압축 기능 지원등으로 고속화를 도모 했으며 단일 경로 멀티 텍스처와 범프 맵핑의 지원등 표현력 향상. 1998년 8월 7일


DirectX 6.1 DirectMusic 등장. SSE지원. Windows 98 SE에 탑재. 1999년 2월 3일


DirectX 7.0 Visual Basic을 지원 , Direct3D 기능 강화 ( 하드웨어 T & L 지원 ). Windows 2000 에 탑재되어 NT 계열 에서도 최신 기능을 사용할 수있게 되었다. 1999년 9월 22일


DirectX 7.1 Windows Me 에 탑재 되었다. 2000 년


DirectX 8.0 DirectDraw 와 Direct3D 가 통합되어 DirectX Graphics 에 DirectSound 와 DirectMusic가 통합되어 DirectX Audio라고 불리게 되었다. Windows 2000 및 9x 계열 에서 사용 가능. 2000년 11월 9일


DirectX 8.1 Windows XP 에 탑재. Windows 2000 · Me · 98  경우 별도 배포되고 있다. 이 버전보다 95 대상에서 제외 되었다. 2001년


DirectX 8.2 Windows 2000및 Windows XP 에서 사용 가능. 단기간 배포 되었다. 2002년


DirectX 9.0 각 구성 요소의 기능 강화 가 중심 . DirectX 9.0c 가 Windows XP SP2 에 탑재 되었다. Windows 2000 · Me · 98 의 경우 별도 배포 도되고 있다.


이 때부터 DirectX 버전이 올라도 업데이트 되는 것은 Direct3D만 되고 있기 때문에 DirectX 9.0이 아닌 Direct3D 9.0라고 불리게 된다. 2002년 12월 20일


Direct3D 9.0Ex Windows Vista에 탑재 되어 , Direct3D 9.0의 향상된 버전 . Windows Vista의 Windows Aero는 Direct3D 10 대신 9Ex로 그려지고있다. 2007년


DirectX 10.0 Windows Vista 이상에서만 사용 가능. 2007년


DirectX 10.1 Windows Vista SP1 이상에서만 사용 가능. GPU 가상화 기술의 구현 . DirectCompute를 지원한다. 2008년


DirectX 11.0 Windows Vista SP2및 Windows 7에서 사용할 수 있다. 고화질 렌더링을 가능하게하는 테셀레이션지원과 새로운 명령어 세트가 추가 되었고 , GPU 컴퓨팅을 실현하는 DirectX Compute Shader 멀티 코어 CPU를 지원하는 멀티 스레딩 처리, HDR 압축등 새로운 기능을 구현 했다. 2009년


DirectX 11.1 Windows 8 에서만 사용할 수 있다. 2012년


DirectX 11.2 Windows 8.1 · Xbox One 에서만 사용할 수 있다. 2013년


DirectX 4
DirectX 4는 출시 되지 않았다. Raymond Chen의 저서 The Old New Thing에 따르면, DirectX 3가 출시 된 후 Microsoft는 4-5의 개발을 동시에 시작했다. Version 5가 더 유익한 일이 될 예정이었던 반면 version 4 는 소폭 개선을 수반, 단기 릴리스 될 예정 이었다.





Managed DirectX
Managed DirectX는 NET Framework에서 실행되는 응용 프로그램에서 Direct 를 호출하는 API이다. Managed DirectX를 사용하면, NET Framework에서 실행되는 어떤 언어에서도 DirectX를 호출 할 수있다. 또한 텍스처 개체를 System.Drawing.Bitmap 개체에서 생성할 수있는 등. NET Framework와의 상호 운용성도 강화되고 있다.
그러나 Managed DirectX 2.0의 개발 은 중단되고 Microsoft XNA ( XNA )에 대체 되었다 ( XNA 는 2014 년 4 월 에 종료 ).


SlimDX
Managed DirectX 는 취소 되었지만 , 후속 XNA는 기본적으로 C #에서 밖에 사용할 수없는 이상, Xbox 360과 Windows 모두에 호환되는 코드를 작성 하는것을 주목적으로 개발 되었으며, Managed DirectX 방향 성과는 약간 다른 API ( 프레임 워크 )가 있다. 따라서 Windows 플랫폼 에서, NET용으로 DirectX의 API 를 캡슐화한 SlimDX 라는 라이브러리가 자발적인 개발 · 제공 되고 있다.



Windows API Code Pack for Microsoft . NET Framework
SlimDX과는 별도로 Microsoft 스스로 오픈 소스라이브러리 / 샘플로 구현이 진행되고 있다.
Windows Vista및 Windows 7의 확장적인 UI 기능등의 대응이 주요 내용이지만, DirectX 10이상 지원도 포함되어 있다.
2009년 4월부터 알파 버전이 공개 되어 있었지만, 같은 해 8 월 6일 버전 1.0로 마이그레이션 했다.
Windows API Code Pack에는 다음과 같은 API를 지원 하고있다.
Direct3D 11.0
Direct3D 10.1/10.0
DXGI 1.0/1.1
Direct2D 1.0
DirectWrite
Windows Imaging Component ( WIC ) APIs .
( DirectWrite and WIC 는 일부 지원 )




OpenGL 과의 관계

DirectX중 DirectX Graphics( Direct3D )는 실시간 3차원 컴퓨터 그래픽 ( 3DCG )치료를위한 API 집합인 OpenGL과 자주 비교된다.
주요 차이점은 DirectX는 기본적으로 3D 그래픽 API에만 한정되는 것이 아니라 사운드처리및 입출력 처리, 네트워크 처리 까지를 내포하는 토탈 게임 제작용 API / SDK를 지향 하는 것이다. 한편 , OpenGL은 단순한 3D 그래픽 API로 디자인된 점이다. 또한 DirectX는 Windows 와 Windows를 채용한 Dreamcast 나 Xbox, Xbox 360등의 게임기의 작동하여 한정된 플랫폼에서만 지원되는 반면 , OpenGL은 크로스 플랫폼이라는 점이다.


DirectX는 그 출신에서 주로 Windows용 게임 분야에서 사용되어 왔지만, Direct3D에 관해서는 같은 환경에서 표준 3D그래픽 API로 사용되게 되어, 게임에 국한되지 않는 일반적인 3D 어플리케이션이나 운영 체제 의 그래픽쉘 환경으로 사용하게 되었다.


OpenGL은 역사및 기능적인 이유로, 3DCG의 제작 공정및 CAD 데이터 시각화 등의 용도에 그래픽 워크 스테이션 이나 EWS등의 전문 분야에서 사용 되어 왔다. 또한 개인 사용자용 3D 데스크탑 환경에서 표준 드로잉 API로 이용되고있어 이러한 환경에서 3D 비디오 게임의 그래픽 API로 표준 적인 입장에 있다. 따라서 양자를 그 용도에 따라 명확하게 구별하는 것은 곤란하다.


또한 Direct3D가 표준 3D 그래픽 API로 정착한 PC / Windows 시스템의 환경에서도 OpenGL은 지금도 공존 하고 실제로 DirectX의 등장 이전부터 등장 초기 무렵에는 PC ( Windows )용 게임 3D그래픽 API로 OpenGL과 OpenGL을 단순화 3dfx사의 그래픽 카드 Voodoo전용 API로한 Glide가 사실상의 표준으로 채택 해온 역사도 있고, 양자를 비교하는 맥락에서 사람들이 말하는 것처럼 단순한 충돌 관계로 설명 하는 실태는 어렵다고 할 수있다. 최근에는 3DCG 제작 소프트의 현재 실시간 미리 보기가 Direct3D와 OpenGL중 어느것을 사용할지 사용자가 선택할 수있는 것도 존재 한다.


또한 Windows Vista 이상에서는 기본적으로 OpenGL은 Direct3D의 래퍼 API로 구현 되어 있다. 장치 드라이버는 모든 계층에서 래퍼 API에서 네이티브 API로 대체 UNIX의 Device Indepence Interface 와 Device Dependence Interface 메커니즘을 Microsoft 독자적인 사양으로 가져온 것으로, OpenGL 응용 프로그램을 실행함에 있어도 사실 Direct3D를 구동하는 경우가 있다. 이기구는 OpenGL외에 Graphics Device Interface ( GDI )에도 적용 되며, Microsoft가 DirectX의 구현을 추진 하는 기반이 되고있다.


DirectX는 GPGPU용 API인 DirectCompute를 그 일부로 포괄적으로 구현 하고, Direct3D와의 상호 연계가 가능 해지고 있지만, OpenGL 또한 크로스 플랫폼 GPGPU용 API인 OpenCL과 긴밀한 제휴를하는 것이 가능 해지고 있다.