Computer Graphics


Direct3D is part of Microsoft's DirectX API. Direct3D is only for use in Microsoft's various Windows operating systems (Windows 95 and above) and, although in a quite different version, in the Xbox and the Xbox 360. Direct3D is used to render three dimensional graphics in applications where performance is important, such as games. Direct3D also allows applications to run fullscreen instead of embedded in a window, though they can still run in a window if programmed for that feature. Direct3D uses hardware acceleration if it is available on the graphic board.

Direct3D is a 3D API. That is, it contains many commands for 3D rendering, but contains few commands for rendering 2D graphics. Microsoft strives to continually update Direct3D to support the latest technology available on 3D graphics cards. Direct3D offers full vertex software emulation but no pixel software emulation for features not available in hardware. For example, if a program programmed using Direct3D requires pixel shaders and the graphics card on the user's computer does not support that feature, Direct3D will not emulate it. The program will most likely exit with an error message. The API does define a Reference Rasterizer (or REF device), which emulates a generic graphics card, although it's too slow to be used in any application to emulate pixel shaders and is usually ignored.

Direct3D's main competitor is OpenGL. There are numerous features and issues that proponents for either API disagree over, see Direct3D vs. OpenGL for a summary.

Version history[]

In DirectX version 7.0, the .dds texture format was introduced.

As of DirectX version 8.0, Direct3D was rolled up into a package called DirectX Graphics. DirectX Graphics was meant to be a combination of DirectDraw and Direct3D, but in reality was just Direct3D with a few DirectDraw features added. Most users still refer to DirectX Graphics as Direct3D.

Direct3D was not considered to be user friendly, but as of DirectX version 8.1, many usability problems were resolved. Direct3D (DX8) contained many very powerful 3D graphics features, such as vertex shaders, pixel shaders, fog, bump mapping and texture mapping.

DirectX version 9.0 added a new version of the High Level Shader Language, support for high dynamic range lighting, multiple render targets, and vertex buffer indexing.

Direct3D 10[]

Template:Future software Microsoft is currently working on a large update to Direct3D API. Originally called Windows Graphics Foundation, DirectX 10, and later DirectX Next, but currently referred to as Direct3D 10, it will appear as part of Windows Vista. Version 10 will represent a departure from the driver model of DirectX Graphics 9.0, with the addition of a scheduler and memory virtualization system. Direct3D 10 will forego the current DirectX practice of using "capability bits" to indicate which features are active on the current hardware. Instead, Direct3D 10 will define a minimum standard of hardware capabilities which must be supported for a display system to be "Direct3D 10 compatible". According to Microsoft, Direct3D 10 will be able to display graphics up to 8 times more quickly than DirectX Graphics 9.0c. In addition, Direct3D 10 will incorporate Microsoft Shader Model 4.0.

Vista will ship with Windows Graphics Foundation (WGF) 1.0. WGF 2.0 will ship later (after Vista). Beneath the WGF is either legacy (XP) drivers with limited functionality or Vista Display Driver Model (VDDM) drivers in one of two flavors: Basic (for existing hardware) and Advanced (for post-Vista hardware). What's currently referred to as DX10 is really WGF 2.0 atop Advanced VDDM drivers running on post-Vista hardware. WGF 1.0 (atop either flavor of VDDM), as shipping with Vista, is referred to by MS as DX9.L -- it's most definitely not DX10. It certainly does have some benefits -- managed resources for "unlimited" memory (limited by virtual memory), better gamma control and text rendering, some performance improvements, etc -- but it's a relatively minor upgrade, and it's not going to drive radical new development in either games or GPUs.

DX10 functionality will require WGF 2.0, and will require the Advanced VDDM, which in turn will require new graphics hardware, even beyond unified shaders and an updated shader model: it includes things like additional pipeline stages (geometry shaders), hardware virtualization (to allow multiple threads/processes time-sliced use of the GPU), demand-paged virtual graphics memory, offload of various operations from the CPU to the GPU, and more. No GPU is going to be available with the full WGF 2.0 featureset in 2006.

Note also that games that take advantage of WGF 1.0 will run successfully on Vista atop existing hardware. However, once they make the transition to WGF 2.0 it's unclear if they'll be able to degrade gracefully to 1.0, meaning that the first "must have" game using WGF 2.0 is going to require not just Vista but a new video card: while there will be XP drivers for "DX10" hardware XP won't support WGF 2.0, and older cards running Vista will at most support WGF 1.0 and Basic VDDM drivers. So the first WGF 2.0 games will be looking at a fairly small market with the requisite hardware base, and thus there may be a bit of delay until such titles are released (fortunately the new hardware should offer enough of an improvement on existing titles that we won't see a chicken-and-egg situation develop).

Related tools[]

DirectX comes with D3DX, a library of tools designed to perform common mathematical calculations and several more complicated tasks, such as compiling or assembling shaders used for 3D graphic programming. It also includes several classes that simplify the use of 3D-models and, for example, particle systems. D3DX is provided as a dynamic link library (DLL) or as a static library (i.e. is included in the executable).

DXUT (also called the sample framework) is a layer built on top of the Direct3D API. The framework is designed to help the programmer spend less time with mundane tasks, such as creating a window, creating a device, processing Windows messages and handling device events.


  • Microsoft DirectX SDK Readme (December 2005): [1]