이때의 포인트는 하드웨어에 접근입니다. 왜 하드웨어에 접근하려고 DirectX를 사용하는 걸까요? 간단하게 접근이 불가한 걸까요?
초창기 컴퓨터에서는 Dos 환경에서 작동하고 있었습니다. CUI 시스템으로 말이죠. Dos 환경에서 프로그램을 작동하면 프로그램이 대부분의 하드웨어 자원들(그래픽카드, 사운드카드 등)을 독점할 수 있었습니다.
win95가 출시되면서 CUI가 아닌 GUI 시스템으로 전환되고, 운영체제가 하드웨어 자원들을 항시 사용하게 되었습니다. 이때문에 프로그램에는 많은 제약이 발생했습니다.
멀티태스킹 환경의 win95에서는 프로그램이 사용중이던 자원을 운영체제가 달라고 요청하면 주어야 하고. 운영체제가 사용중이던 부분에 잘못 프로그램 할 경우엔 충돌을 일으켰습니다.
이것을 계기로 DirectX가 탄생하게 되었습니다. 프로그램이 하드웨어에 직접 접근이 가능하면서, 충돌을 야기하지 않도록 방지하여 쉽게 프로그래밍이 가능한 환경을 목적으로 DirectX는 출시되었습니다.
또 하나, 시스템의 호환성 목적도 존재합니다.
오늘날의 하드웨어만 보아도, 다양한 기업이 하드웨어를 판매하고 있는 걸 볼 수 있습니다.
똑같은 사양이라 할 지라도, 각각 다른 체계를 가지고 있기 때문에 똑같은 프로그램이 다른 체계를 전부 지원해야만 정상 작동이 가능했습니다.
반면, DirectX는 고유의 가상 환경에서 작동하는 체계를 가지고 있습니다. 가상 환경(Virtual Machine)은 실제론 존재하진 않지만, 가상으로 존재하고 있는 것처럼 만들어진 환경입니다. 때문에 DirectX로 만들어진 프로그램은 DirectX에서 제공하는 가상환경 이라는 고유의 환경이 존재하기 때문에, 다양한 하드웨어 에서도 똑같이 작동이 가능합니다.
이러한 이유 때문에 게임을 설치할 때마다 DirectX의 설치를 확인하는 것을 볼 수 있었습니다.
DirectX는 여러 하드웨어 자원들을 사용하기 위해서 각각의 역할을 구분지어 두었습니다.
대표적인 예로써, 사운드를 담당하는 DirectSound, 3D 그래픽을 담당하는 Direct3D, 2D 그래픽을 담당하는 DirectDraw, 입출력을 담당하는 DirectInput.