본문 바로가기

도서관

Microsoft DircetX에 대하여


Microsoft의 그래픽 처리용 API인 DirectX(이하 DX)에 대한 정리입니다.
전체적으로 DX대한 역사와 전반적인 사항에 대해서 간략하게 알아볼 수 있습니다.


 

Microsoft  DirectX

 

마이크로소프트사에서 개발한 게임 및 멀티미디어 처리용의 API 셋이다.

 

DirectX 컴포넌트 중, 그래픽을 담당하는 DirectX Grahpics Windows, XBOX, XBOX360 용의 게임 개발에 폭넓게 이용되고 있다. DirectX 호환 그래픽카드를 이용한 고품질의 3D 그래픽 렌더링을 통해서 DirectX는 여러 소프트웨어 산업, 특히 엔지니어링 분야에도 널리 사용되고 있다.

 

DirectX의 런타임 라이브러리와 SDK는 모두 마이크로소프트의 웹사이트에서 무료로 다운로드 받을 수 있지만, 유사 프리웨어로써 소스코드는 공개되지 않는다. DirectX Windows에 포함되어 있지만, 최신판을 웹사이트에서 다운로드 받을 수 있다.

 

2010 11월 현재 최신 버전은 11.0이다. 이 버전은 Windows 7에 포함되어 있으며, Windows Vista에서는 Windows Update를 통해서 다운받을 수 있다.(DirectX 10.0 이상 버전은, Windows의 그래픽 아키텍처의 많은 변경과 디스플레이 전용 드라이버 모델인 Windows Display Driver Model의 도입으로 인해 구버전의 Windows에서는 사용할 수 없다. – XP 이전까지는 WDM을 사용)

 

 

 

DirectX 컴퍼넌트

DirectX의 기능은 매니지코드 인터페이스 셋과 비슷한 COM 인터페이스 형태로 제공된다.

l  DirectX Graphics : DirectX 8부터 사용된 명칭으로 아래 4가지로 구성됨

n  DirectDraw : 2D 그래픽(DirectX 7까지 개발, 현재도 널리 사용되고 있음)

n  Direct3D : 3D 그래픽

n  Direct2D : Windows 7부터 이용 가능. 새로운 2D 그래픽 API

n  DirectWrite :  Windows 7부터 이용 가능. 새로운 고품질 텍스트 표시 API

l  DirectX Audio : DirectX 8부터 사용된 명칭으로 아래 3가지로 구성됨

n  DirectSound : 사운드 재생 및 녹음

n  DirectSound3D : 3D 사운드 재생

n  DirectMusic : DirectMusic Producer로 작성된 음악 트랙 재생

l  DirectX Media : 아래의 3가지로 구성됨

n  DirectAnimation : 2D 웹 애니메이션용

n  DirectShow : 각종 음성, 동영상 재생 및 작성

n  DirectTransform : 웹 인터액티브와 고수준의 3D 그래픽을 위한 Direct3D Retained Mode

l  DirectInput : 키보드, 마우스, 게임패드, 조이스틱의 입력 처리(XBOX360을 위해 XInput 제외. DirectX 8이후로 업데이트되지 않음. 키보드나 마우스는 WM INPUT에서 처리)

l  DirectPlay : 게임용 네트워크 통신(DirectInput처럼 DirectX 8이후로 업데이트 되지 않음)

l  DirectX Media Object : 인코더, 디코더, 이펙트 같은 스트리밍 오브젝트를 지원

l  DirectSetup : DirectX 런타임 셋업용이며, 정확히는 API가 아님

l  DirectX Video Acceleration(DXVA) : 동영상 처리용 API. 버전 1.0 DirectShow의 일부였지만, Windows Vista부터 이용 가능한 버전인 2.0 DirectShow Media Foundation에서 독립해서 별도의 컴포넌트가 됨

 

이후로, DirectInput XInput으로, DirectSound XCAT, DirectShow Media Foundation으로 대체될 예정이다.

 

 

 

역사

1994년 후반, Microsoft사에서는 Windows 95의 출시를 계획하고 있었으나, 당시의 프로그래머들은 Windows 95보다는 MS-DOS쪽이 게임 프로그래밍에 적합하다고 생각하고 있었다. [어떻게 프로그램을 만들 것인가?]라는 질문은 OS의 평가기준에 있어서 상당히 큰 비중을 차지하고 있었다. Windows 95의 출시를 계획하고 있는 상황에서 Microsoft 3명의 사원(아이슬러, , 잉스톰)은 프로그래머들의 이런 경향에 대해서 걱정하고 있었다.

 

MS-DOS 환경에서 프로그램은 그래픽카드, 키보드, 마우스, 사운드카드 등의 여러 시스템 장치들을 직접 제어할 수 있었던 것에 비해서 Windows 95에서는 메모리 보호를 위해 이런 직접 제어를 제한하고 있었다. 그리고 수개월 후 Windows 95가 출시됨에 따라 Microsoft사는 Windows 95 환경하에서 메모리 보호를 위해 제한된 프로그래밍 자유도를 증가시킬 방법을 찾아야했다. 아이슬러를 포함한 3명의 사원들은 이 문제를 해결하기 위해서 뛰어들었고, 이렇게 해서 DirectX가 탄생했다.

 

DirectX의 초기 버전은 Windows Game SDK라는 이름으로 199509월 출시되었다. 이것은 Windows 3.1에 있었던 WinG API DCI 32비트 용으로 이식한 것으로, 이때 Microsoft사는 ATI사 개발팀으로부터 게임 그래픽의 기초 부분에 대한 기술을 제공 받았다. 이것을 시작으로 아이슬러(개발 리더), , 잉스톰(프로그램 책임자) 3명의 팀을 중심으로 DirectX 개발이 추진되었고, 최종적으로는 이후의 모든 Windows에서 DirectX가 멀티미디어 기능을 담당하게 되었다.

 

DirectX의 등장 이전에, Microsoft사는 OpenGL Windows NT에 탑재하고 있었다. OpenGL을 쓰기 위해서(당시에는) 높은 성능을 가진 시스템이 필요했을 뿐만 아니라, 그 용도도 CAD나 엔지니어링 프로그램과 같은 전문적인 용도에 한정되어 있었다. 이런 상황에서 Direct3D는 게임용으로써는 상당히 높은 스펙을 가지고 있는 OpenGL을 가볍게 만드는 방향으로 설계되었다. 이런 설계 바탕으로 인해 이후의 Direct3D OpenGL간의 유저간의 대립이 시작되었다. Windows 전용이었던 Direct3DOpenGL 유저들로부터 Microosft사의 3E 전략(흡수, 확대, 근절)의 한 단면이라는 비난을 받기도 했지만, DirectX에는 사운드나 조이스틱 같은 OpenGL에서 처리할 수 없는 기능을 가지고 있었기 때문에 DirectX의 다른 API들과 OpenGL을 섞어서 사용하는 경우가 많았다. 최근에는 OpenGL SDL을 조합하는 경우도 많아졌다.

 

게임기(콘솔)중에는 SEGA Dreamcast Windows CE가 적용되어 DirectX가 최초로 사용되었다. 그 후, Microsoft사의 XBOX XBOX360에도 사용되었고, XBOX의 콘솔 API Microsoft사와 nVidia(XBOX의 커스텀 그래픽칩 개발)에 의해 공동개발 되었다. XBOX API DirectX 8.1 버전과 비슷하지만, 게임기에 적용되었기 때문에 업데이트가 불가능하다는 점이 일반 버전과 다르다. 이와는 별도로 XBOX의 코드네임은 DirectXBOX였지만, 상품명으로 줄여서 XBOX가 되었다.

 

2002 Microsoft사는 이전에 비해서 매우 긴 쉐이더 프로그램을 처리할 수 있는 픽셀/버텍스 쉐이더 버전 2.0을 지원하는 DirectX 9을 출시한다. 200408월에는 쉐이더 모델 3.0을 적용한 DirectX 9.0c를 출시했고, 이후로도 DirectX는 계속 업데이트 되고 있다.

 

200504월에 DirectShow DirectX에서 제거되었고, 대신 Microsoft Platform SDK에 추가되었다. 하지만, DirectShow 샘플을 빌드하기 위해서는 여전히 DirectX가 필요하다.

 

DirectCompute 2008 11월에 개최된 하드웨어 기술자 국제회의(WinHEC 2008)를 통해서  [DirectX 10.1부터 지원] 할 것이라고 발표 되었다. 이에 따라 DirectX 10을 지원하는 GPU에서도 DirectCompute를 사용할 수 있게 되었다.

 

 

 

출시정보

버전

주요사항

출시일

WinG, DCI

Windows 3.1

 

DirectX 1.0

게임 제작용 API 모음인 GameSDK로 발표

1995.10

DirectX 2.0

Direct3D(Immediate/Retained Mode) 추가

1995.06

DirectX 3.0

DirectSound3D 추가, DirectInput 통합

Windows NT 4.0 SP3 이상에 함께 패키징

1996.09.25

ActiveMovie

이후 DirectShow

1996.11.05

DirectX 4.0

3.0에서 큰 변경 없음. 5.0 개발로 인해 개발 취소

 

DirectX 5.0

 

Windows 98에 함께 패키징

Direct3D DrawPrimitive(OpenGL의 해당 기능과 동일) 추가

1997.08.04

DirectX Media

DirectShow DirectAnimation 추가

1997.12.01

DirectX 6.0

3D 이미지용 [Direct3D] 강화

AMD사의 3D 명령어셋 [3DNow!] 대응

지오메트리 파이프라인의 수정, 텍스쳐 데이터 압축 기능 지원 등으로 처리를 보다 고속화

싱글패스/멀티텍스쳐와 범프매핑 지원 등의 표현력 증가

1998.08.07

DirectX 6.1

DirectMusic 추가, SSE 지원, Windows 98 SE에 함께 패키징

1999.02.03

DirectX 7.0

 

VB 지원, Direct3D기능강화(하드웨어 T&L 지원)

Windows 2000에 함께 패키징 되어 NT계열 Windows에도 최신 기능을 사용할 수 있게 됨

1999.09.22

DirectX 7.1

Windows Me에 함께 패키징

2000.

DirectX 8.0

DirectDraw Direct3D DirectX Graphics로 통합

DirectSound DirectMusic DirectX Audio로 통합

Windows 9x계열 및 Windows 2000에서 사용가능

2000.11.09

DirectX 8.1

Windows XP에 함께 패키징

Windows 9x 계열 및 Windows 2000용은 개별배포

이 버전부터 Windows 95는 지원대상에서 제외

2001.

DirectX 8.2

Windows 2000 Windows XP 지원(단기간 동안만 배포)

2002

DirectX 9.0

각 컴포넌트의 기능 강화

DircetX 9.0c Windows XP SP2에 함께 패키징

Windows 9x계열 및 Windows 2000용은 개별배포

이때부터 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

Windows Vista SP2Windows 7에서 이용가능

매우 정밀한 이미지 처리를 위한 테셀레이션 지원

새로운 명령어 셋 추가

GPU 연산을 위한 DirectX Compute Shader 추가

멀티코어 CPU에 대응하는 멀티스레딩 처리

HDR 압축 추가

2009

 

 

 

DirectX 4

DirectX4는 실제로 출시되지 않았다. DirectX3가 출시된 뒤, Microsoft사는 버전 4와 버전 5의 개발을 동시에 진행했다. 버전 5는 많은 기능이 추가될 예정이었던 것에 비해서, 버전 4는 일부 기능 확장판으로 출시할 예정이었기 때문에, DirectX 4에 적용될 기능들은 게임 개발자의 큰 관심을 끌지 못했다. 게다가, Micorosoft사는 이 두 가지 버전에 대해서 문서를 통해 확실하게 기능을 구분해 두었다. 버전 5에 추가되는 기능들은 버전 5에만 적용하기로 결정함에 따라, 버전 4는 재이용 하지 않고 폐기하게 되었다.

 

 

 

Managed DirectX

Managed DirectX dotNet Framework에서 동작하는 어플리케이션에서 DirectX를 호출하기 위한 API이다. Managed DirectX를 사용하면, dotNet Framework 상에서 동작하는 어떤 언어라도 DirectX를 호출할 수 있다. 게다가, 텍스쳐 오브젝트를 System.Drawing.Bitmap 오브젝트로부터 생성할 수 있는 등, dotNet Framework와의 상호연동도 강화된다.

하지만, Managed DirectX 2.0개발은 중지되고, Microsoft XNA로 대체되었다.

 

 

 

SlimDX

Managed DirectX의 개발이 취소되고, 이를 대체하게된 XNA는 기본적으로 C#에서 밖에 사용할 수 없는데다가, XBOX 360 Windows 양쪽에 호환성을 가진 코드를 만드는 것이 XNA의 주목적이었기 때문에 Managed DirectX의 원래 목적과는 조금 다른 목적을 가진 API가 되었다. 이런 문제들에 대한 해결책으로 Windows 플랫폼에서의 dotNet용으로 DirectX API를 캡슐화한 SlimDX라는 라이브러리가 개발되었다.

SlimDX DirectX 10 API로의 접근을 지원하기 때문에 지오메트리 쉐이더 등의 새로운 DirectX API, Windows API DirectShow 등과의 연동, GUI, OGG 재생 등의 서드파티 라이브러리를 이용해 Windows 전용 어플리케이션을 개발할 수 있다.

2007 06 30일에 처음 출시되어 이후 개발이 계속 진행되고 있으며, 2008 06월에는 정식버전이 출시되었다.

SlimDX에서는 아래와 같은 API가 완전히 지원된다.

l  Direct3D 9

l  Direct3D 10

l  DXGI

l  DirectInput

l  XInput

l  RawInput

l  XAudio 2

l  X3DAudio

l  DirectSound

 

 

 

Windows API Code Pack for Microsoft dotNet

SlimDX와는 별개로 Microsoft사에 의해 진행되고 있는 오픈소스 라이브러리/샘플이다.

Windows Vista Windows 7의 확장된 UI 기능 등에 대응하는 것이 주 내용이지만, DirectX 10 이상의 버전에 대한 지원도 포함되어 있다.

2009 04월에 알파버전이 공개되고, 같은 해 08 06일에 버전 1.0이 출시되었다.

Windows API Code Pack에는 아래와 같은  API가 지원된다.

l  Direct3D 11.0

l  Direct3D 10.1/10.0

l  DXGI 1.0/1.1

l  Direct2D 1.0

l  DirectWrite

l  Windows Imaging Component(WIC) APIs

(DirectWrite WIC는 일부 대응)

 

 

 

OpenGL과의 관계

DirectX의 컴포넌트 중 DirectX Graphics는 마찬가지로 3D 그래픽을 지원하는 API 셋인 OpenGL과 종종 비교된다.

이 가지 API의 가장 큰 차이점은, DirectX는 기본적으로 3D 그래픽 API 외에도 사운드 처리와 입출력 처리, 네트워크 처리를 포함하는 게임 제작용 통합 API/SDK인 반면, OpenGL 3D 그래픽 API로써 설계되었다는 점이다. 그리고, DirectX Windows Dreamcast XBOX, XBOX360 등의 게임기처럼 Windows라는 한정적인 플랫폼만을 지원하는 것에 비해, OpenGL은 크로스 플랫폼을 지원한다는 점이 다르다.

DirectX는 처음에는 주로 Windows용 게임 분야에 사용되었지만, 지금에 와서는 Direct3D를 통해서 보편적인 시스템들의 표준적인 3D 그래픽 API으로 사용되고 있을 뿐만 아니라, 일반적인 3D 어플리케이션이나 OS의 그래픽 가젯 환경에도 사용된다.

한편 OpenGL은 역사적이나 기능적인 이유로 주로 3D CG제작이나 CAD, 데이터 가시화 등의 용도로 그래픽 워크스테이션이나 EWS 등의 전문적인 시스템에 사용되어왔다. 물론, 현재는 일반 유저용 데스크탑 환경의 표준적인 3D 그래픽 API으로도 이용되고 있고, 3D 비디오 게임의 그래픽 표준 API로도 사용된다. 이렇게 됨에 따라 두 가지의 용도를 명확하게 구분하기는 어렵게 되었다.

Windows 플랫폼에서 DirectX는 점차적으로 표준적인 3D 그래픽 API로 정착되어 왔고, 이제는 OpenGL과 공존하고 있다.

DirectX가 등장했을 때, Windows 3D 게임 그래픽 API로써 OpenGL과 이를 3dfx사에서 OpenGL을 간략화한 VooDoo 그래픽 카드 전용 API Glide가 주류를 이루며 사용되었던 역사에 비춰보면, 이 두 가지의 API 셋은 단순한 경쟁관계로는 설명하기 어렵다.

그 외에도 Windows Vista 이상에서는 기본적으로 OpenGL DirectX의 래퍼 API를 통해 적용하고 있다. 디바이스 드라이버에 의해, 임의의 레이어에서 래퍼 API가 네이티브 API로 교체되는 방식으로 적용되고 있으며, 이것은 유닉스의 장치 독립형 인터페이스 및 그 메커니즘을 Micorosoft사의 독자적인 사양으로 받아들인 것이다. 그렇기 때문에 OpenGL 어플리케이션을 실행해도 실제로는 Direct3D를 통해 동작하게 되는 경우가 있다.(특히 저가형 그래픽카드는 Microsoft의 이런 기능을 통해서 OpenGL 자체를 DirectX에게 처리하도록 전담시킨다.) 이런 시스템 구조는 OpenGL 외에 GDI에도 적용되어 있으며, Microsoft사에서 DirectX 적용을 추진하는 기반이 되고 있다.