A presentation on DirectX® Alex Brill Emil Elazar Noam Monheit 1 Contents What is DirectX? How DirectX really works? Historical Problem and it’s Solution Terminology Brief Components Description DirectX Versions History Architecture Direct3D in Details DirectX Alternatives OpenGL Advantages & Disadvantages or: “Why DirectX”? Installation + SDK Demo + Code Examples 2 What is DirectX? (1) The Problem: Dos vs. Windows 3.1 overhead. The PC architecture was never designed as a gaming platform. Machine can be VERY different from another. The will: Windows a desirable platform for game development. Fast, low-level libraries to allow the developer maintain creative freedom over his games. Shift the burden of hardware support from the game developer to the hardware manufacture. Coexist peacefully with other Windows components. 3 What is DirectX? (2) The Solution: DirectX Direct access to Hardware… A common standard which all games and multimedia applications could follow – a common interface with whatever hardware is installed in the PC. Provides real-time multimedia and gaming services to programs: graphics, sound, music, input (mouse / keyboard / joystick / etc), networking, and movie playback. Done by three Microsoft employees—Craig Eisler, Alex St. John, and Eric Engstrom. 4 What’s DirectX? (3) There are two parts to DirectX; the 'runtime' and the 'SDK' (Software Development Kit). Both are free; the runtime is what players need to have on their computers in order to play a game, and the SDK is what a programmer needs to create games that use DirectX. Windows XP comes with the DirectX 8 runtime automatically installed; it's a 4 MB download if players don't have it. The SDK, is over 100 MB to download, and it contains all the headers and libraries you need, plus documentation, samples, tutorials, and tools. Players don't need the SDK, only the runtime. Most games for Windows nowadays use DirectX in some form or another; it is also the technology which powers Microsoft's XBox. 5 What is DirectX? (4) 6 Terminology (1) API (application program interface)- Set of routines, protocols, and tools for building software applications. Saves the programmer from dealing with implementation. Driver- Program that controls a device. Acts like a translator between the device and programs that use the device. Each device has its own set of specialized commands that only its driver knows. In contrast, most programs access devices by using generic commands. The driver, therefore, accepts generic commands from a program and then translates them into specialized commands for the device. 7 Terminology (2) Sound Card- Enables the computer to output sound through speakers connected to the board, record sound input from a microphone connected to the computer, and manipulate sound stored on a disk. Video Adapter- A board that plugs into a PC to give it display capabilities. Modern video adapters contain memory, so that the computer's RAM is not used for storing displays. In addition, most adapters have their own graphics coprocessor for performing graphics calculations. These adapters are often called graphics accelerators. 8 Terminology (3) Graphics Accelerator- Type of video adapter that contains its own processor to boost performance levels. These processors are specialized for computing graphical transformations, so they achieve better results than the general-purpose CPU used by the computer. In addition, they free up the computer's CPU to execute other commands while the graphics accelerator is handling graphics computations. Other characteristics that differentiate graphics accelerators: memory : Amount of memory determines resolution and colors amount. Two types of memory-DRAM or video RAM (VRAM), which enables the video circuitry and the processor simultaneously access the memory. bus : 1995: PCI bus, nowadays; PCIExpress bus. register width: The wider the register, the more data the processor can manipulate with each instruction. 64-bit accelerators are already becoming common, and we can expect 128-bit accelerators in the near future. 9 Terminology (4) GDI- Graphical Device Interface, a Windows standard for representing graphical objects and transmitting them to output devices, such as monitors and printers. HEL, HAL, COM and more to be discussed later… 10 DirectX Components DirectX Graphics DirectInput DirectPlay DirectAudio DirectDraw Direct3D DirectSound DirectMusic DirectShow DirectSetup 11 DirectX Components (1) DirectX Graphics DirectDraw- A software interface that provides direct access to display devices while maintaining compatibility with the GDI and for transferring video processing from a PC's CPU to the video adapter. The standard was first developed by Intel and called the Display Control Interface (DCI) and later supported by Microsoft. When the CPU is not busy, the GDI updates the video display. If the CPU is busy, the DCI driver allows an application to send update information directly to the video adapter. Direct3D- An API for manipulating and displaying three-dimensional objects. Developed by Microsoft, Direct3D provides programmers with a way to develop 3-D programs that can use whatever graphics acceleration device is installed in the machine. Virtually all 3-D accelerator cards for PCs support Direct3D. Another 3-D standard offering similar functionality is OpenGL. 12 DirectX Components (2) DirectInput- Enables an application to retrieve data from input devices even when the application is in the background. Also provides full support for any type of input device, as well as for force feedback. DirectPlay- A media-independent networking API that provides networking services at the transport protocol and session protocol levels. DirectPlay sessions can be run on TCP/IP networks, IPX networks, and over directly connected modems and serial cables. 13 DirectX Components (3) DirectX Audio DirectSound- Enables the playing of sounds with very low latency and gives applications a high level of control over hardware resources. DirectMusic- In combination with DirectSound, DirectMusic provides a complete solution for playing music and sound effects in games and other applications. 14 DirectX Components (4) DirectShow- An architecture for streaming media on a Windows platform. It provides high-quality capture and playback of multimedia streams. Screeen Saver, Camera.. DirectSetup- Extremely simple library of functions for installing DirectX on a machine. It also provides a way to check the version of DirectX that is present. 15 Versions (1) For each new version of DirectX, Microsoft updated the technology such that the new dll's can communicate with the hardware faster and more efficiently with minimum latency. They’re trying to support the latest features of graphics and sound cards that come on the market. The architecture is updated so as to suit the needs of the day while maintaining backward compatibility. 16 Versions (2) DirectX 1.0 DirectX 6 2 independent SDK's (DirectX SDK and DirectX Media SDK). DirectX 7 released on late 1995. DirectShow- the significant part of Media SDK, merged into the DirectX API and DirectX Media deprecated. DirectX 8 DirectDraw and Direct3D merged into a single DirectX Graphics API for graphics programming. DirectSound and Direct Music merged together as DirectX Audio for sound programming. Programmable Pixel Shader and Vertex Shader introduced. 17 Versions (3) DirectX 9 HLSL (High Level Shader Language), a powerful new programming model that offers the easiest to use graphics creation toolset for developers introduced. DirectX10– Part of Windows Vista. No backward compatibly except via a software layer. Much faster DLL’s Departure from driver model of DirectX 9.0, with the addition of a scheduler and memory virtualization system. DirectX 10 will forego the current DirectX practice of using "capability bits" to indicate which features are active on the current hardware. Instead, DirectX 10 will define a minimum standard of hardware capabilities which must be supported for a display system to be "DirectX 10 compatible". 18 Versions (4) Which version of DirectX do various versions of Windows come with? 95 95B NT NT w/SP 4 98 98SE ME 2000 XP None DX 3(Supports up to DX8) DX2 DX3 DX5 DX6 DX7.1 DX7.1 DX8.1 19 Screenshots Wolfenstein (3D Realms 1992 –> no HAL): 20 DirectX in details 21 DirectX – COM objects DirectX is a set of APIs, available as COM objects. Component Object Model (COM) is a Microsoft platform for software componentry introduced by Microsoft in 1993. It is used to enable crossapplication communication and dynamic object creation in any programming language that supports the technology. All DirectX Interfaces inherit from IUnknown and are COM compliant. IUnKnown: AddRef() Release() QueryInterface() Reference counting 22 Backward Compatibility (1) COM allows Microsoft release an enhanced set of DirectX components that are completely compatible with earlier versions of DirectX. With COM’s independence of a programming language, developers are free to choose whatever COM compliant language and development environment they wish. With COM’s programming model, the programmer is assured that even if the user upgrades or changes hardware configuration and DirectX drivers, the software will work without reconfiguration. 23 Backward Compatibility (2) For example, even though DirectDraw was erased from the DirectX API components after DirectX 7 even in DirectX9, you can access the old interfaces through a DirectDraw7 call. This backward compatibility plays a significant role in DirectX's position as a leading API, as it helps the applications written in older versions to still work smoothly in the newer versions. 24 How it really works? DirectX provides the interface to access the advanced features of the display adapter, which are not provided in the standard Windows GDI graphics interface. It accesses the hardware abstraction layer in Windows directly. When DirectX was introduced, display adapter vendors were quick to develop DirectX drivers that would expose low-level functions of their hardware to the application. 25 Architecture Each chip manufacturer, board producer, or OEM implements a HAL which implements only device-dependent code and performs no emulation. The HAL is implemented using 32-bit code with Microsoft Windows XP, Microsoft Windows NT, and Windows 2000. Windows 98 and Windows Millennium Edition (Windows Me) use a combination of 16-bit and 32-bit code. The HAL can be part of the display driver or a separate dynamiclink library (DLL) that communicates with the display driver through a private interface that the driver's creator defines. HAL is based around the hardware support, and is very fast but might not support everything 26 Architecture When DirectX is initialized, it checks the hardware to see if the hardware supports certain capabilities. If the hardware does support a certain capability, then the HAL will be used to access that hardware function; otherwise, the HEL will be used to emulate the capability through software. HEL bypasses the hardware and implements its own functionality. HEL uses no hardware acceleration. It uses the CPU, software, and normal system RAM. It is usually MUCH slower, but much less problematic 27 Architecture 28 3D - Graphics Rendering - the process of generating an image from a model, by means of a software program . 29 3D - Graphics The Application is your game and is where you do any scene management and any tessellation of mesh etc. You then feed the graphics card with vertices and other data. The graphic card processes the vertices by transforming and lighting them using the matrices supplied by the application. The card then culls any invisible polygons and clips to the viewport. This transformed data is then rasterized and passes through the pixel operations The data is displayed . 30 3D - Graphics 31 Some terms… Rasterisation - The task of taking a twodimensional image described in a vector format and converting it into pixels or dots for output on a video display or printer. A tessellation (tiling) of the plane is a collection of plane figures that fill the plane with no overlaps and no gaps. A shader is a program used to determine the final surface properties of an object or image. 32 Programmable Pipeline One of the most important new features in DirectX Graphics is the addition of a programmable pipeline. It provides an assembly language interface to the transformation and lighting hardware (vertex shader) and the pixel pipeline (pixel shader). This programmable pipeline gives the developer a lot more freedom to do things, which have never been seen in real time applications before. The shader code is loaded into the graphics card memory and plugged directly into the graphics pipeline. Shader code is in assembly however nowadays there are a number of higher level 'C' type languages that can be compiled down to the assembly and making them much easier to program. Microsoft have HLSL (High-Level Shading Language) for use with DirectX and OpenGL has the GLSL (OpenGL Shading Language). 33 Programmable Pipeline When you push vertices through the pipeline, they need to be transformed and lit. This processing stage is known as T&L. Hardware vertex processing means this is done in hardware, if hardware supports it; Software vertex processing is done in software. The general practice is to try creating a Hardware T&L device. If that fails try Mixed, and if that fails try Software. (If software fails, give up and exit with an error). 34 DirectX - Conclusion DirectX gives multimedia applications greater access to advanced features of high-performance hardware such as 3D graphics acceleration chips and sound cards. It controls 2D graphics acceleration; Support for input devices: joysticks / joy-pads, keyboards, mice, controls sound mixing and sound output on a vast range of audio hardware, controls networking and multiplayer gaming, and control over various multimedia streaming formats. 35 DirectX Alternative (1) Open Graphics Library is a specification defining a cross-language crossplatform API for writing applications that produce 3D computer graphics (2D computer graphics as well). The interface consists of over 250 different function calls which can be used to draw complex threedimensional scenes from simple primitives. 36 DirectX Alternative (2) The OpenGL specification is overseen by the OpenGL Architecture Review Board (ARB), which was formed in 1992. The ARB consists of a set of companies with a vested interest in creating a consistent and widely available API. 37 DirectX Alternative (3) OpenGL- platform Independent; supported on Windows, Mac, Linux, and several other UNIX variants. Direct3D- only Windows. OpenGL- function oriented interface. Direct3D- object oriented interface. 38 DirectX Alternative (4) Direct3D- updated very frequently (once a year) and supports the latest card features (Microsoft). OpenGL- takes some time to reach a new standard (open-standard and a community product, Silicon Graphics). Performance : Equal performance!! 39 Where do I start? If you're worried about which one to learn, and which one the pros use, the answer is that more often than not they'll use both. Apart from Direct3D, all the DirectX components can be used alongside OpenGL. If you want to use DirectInput for joystick input and OpenGL for your graphics, that's fine. 40 Games(1) The 3D engine of the game Battlefield 1942 sits solidly on a DirectX 7 foundation. 41 Games(2) Unreal Tournament 2003 uses a number of DirectX 8 shader effects. As a result, the game's graphics look much better than that of older games, and the in-game world seems more alive. 42 Games(3) FarCry can be considered the first game that makes consistent use of shaders. Thanks to DirectX 9, the surfaces look very realistic and react to changes in lighting. 43 Further Reading - Web Resources General International Game Developers Assoc. - www.igda.org GamaSutra - www.gamasutra.com Game Developer - www.gamedev.net Direct X MSDN - www.msdn.com/directx Newsgroup microsoft.public.win32.programmer.directx.managed The Z Buffer - www.thezbuffer.com Tom Miller (main coder/designer) - blogs.msdn.com/tmiller 44 Further Reading - DirectX Books 45 The End 46