Tricks of the Windows Game Programming Gurus:DirectX Fundamentals and the Dreaded COM

All ITKnowledge Source Code Search Tips Advanced Search |

| Tricks of the Windows Game Programming Gurus by Andre LaMothe Sams, Macmillan Computer Publishing ISBN: 0672313618 Pub Date: 09/27/99

Search this book:

Previous | Table of Contents | Next

## Part II
DirectX and 2D Fundamentals

Chapter 5
  DirectX Fundamentals and the Dreaded COM
Chapter 6
  First Contact: DirectDraw
Chapter 7
  Advanced DirectDraw and Bitmapped Graphics
Chapter 8
  Vector Rasterization and 2D Transformations
Chapter 9
  Uplinking with DirectInput and Force Feedback
Chapter 10
  Sounding Off with DirectSound and DirectMusic

## Chapter 5
DirectX Fundamentals and the Dreaded COM

> “Louie, Louie, Louie… I’ve had to listen to that for centuries!”

> —Lestat, Interview With the Vampire

In this chapter, we’re going to get a gargoyle’s-eye view of DirectX and all the underlying components that make up this incredible technology. In addition, we’re going to take a detailed look at COM (Component Object Model), which all the DirectX components are made of. If you’re a straight C programmer, you should pay close attention. But not to worry, I’ll keep it chill.

However, a word of warning on this material—read the whole chapter before you decide you don’t get it. DirectX and COM are circularly related, so it’s hard to explain one without the other. As an example, try to think how you would explain the concept of zero without using the word itself in the definition. If you think it’s easy, it’s not!

Here’s a list of the main topics we’ll touch upon:

  • An introduction to DirectX
  • The Component Object Model (COM)
  • A working example of a COM implementation
  • How DirectX and COM fit together
  • The future of COM

### DirectX Primer

I’m starting to feel like an evangelist for Microsoft these days (hint to Microsoft: Send me money), trying to turn all my friends to the dark side. But the bad guys always have better technology! Am I right? What would you rather ride around in, one of the Empire’s Super Star Destroyers or some half-converted Rebel transport? See what I’m saying?

DirectX may take a bit more control from you as a programmer, but in truth it’s worth its weight in gold. It’s basically a system of software that abstracts video, audio, input, networking, installation, and more, so no matter what a particular PC’s hardware configuration is, you can use the same code. In addition, DirectX technology is many times faster and more robust than GDI and/or MCI (the Media Control Interface), which is native to Windows.

Figure 5.1 illustrates how you would make a Windows game with and without DirectX. Notice how clean and elegant the DirectX solution is.

Figure 5.1 DirectX versus GDI/MCI.

So how does DirectX work? Well, it gives you almost hardware-level control of all devices. This is possible through a technology called Component Object Model (COM) and a set of drivers and libraries written by both Microsoft and the hardware vendors themselves. Microsoft came up with a set of conventions—functions, variables, data structures, and so on—that must be used by the hardware vendors when implementing drivers to talk to the hardware.

As long as these conventions are followed, you don’t need to worry about the details of the hardware. You just make calls to DirectX and it handles the details for you. No matter the video card, sound card, input device, network card, or whatever, as long as there’s DirectX support, your program will be able to use it without you knowing anything about it!

Currently there are a number of DirectX components. They are listed here and shown graphically in Figure 5.2.

  • DirectDraw
  • DirectSound
  • DirectSound3D
  • DirectMusic
  • DirectInput
  • DirectPlay
  • DirectSetup
  • Direct3DRM
  • Direct3DIM

Figure 5.2 The architecture of DirectX and its relationship to Win32.

#### The HEL and HAL

In Figure 5.2, you may notice that there are two layers under DirectX called the HEL (Hardware Emulation Layer) and the HAL (Hardware Abstraction Layer). Here’s the deal: DirectX is a very forward-looking design, so it assumes that advanced features are implemented by the hardware. However, if the hardware doesn’t support some feature, what happens? This is the basis of the dual-mode HAL and HEL design.

The HAL, or Hardware Abstraction Layer, is the “to the metal” layer. It talks directly to the hardware. This layer is usually the device driver from the vendor, and you communicate to it directly through generic DirectX calls. The bottom line is that HAL is used when the feature you’re requesting is supported directly by the hardware and thus is accelerated. For example, when you request a bitmap to be drawn, the hardware blitter does the work rather than a software loop.

The HEL, or Hardware Emulation Layer, is used when the hardware doesn’t support the feature that you’re requesting. Let’s say that you ask the video card to rotate a bitmap. If the hardware doesn’t support rotation, the HEL kicks in and software algorithms take over. Obviously, this is slower, but the point is that it does not break your program. It will still work—just slower. In addition, the switching between the HAL and HEL is transparent to you. If you ask DirectX to do something and the HAL does it directly, the hardware will do it. Otherwise, a software emulation will be called to get the job done with HEL.

Now, you might be thinking that there are a lot of layers of software here. That’s a concern, but the truth is that DirectX is so clean that the only penalty you take for using it is maybe an extra function call or two. That’s a small price to pay for 2D/3D graphics, network, and audio acceleration. Can you imagine writing drivers to control all the video accelerators on the market? Trust me, it would take literally thousands of man-years—it just can’t be done. DirectX is really a massively distributed engineering effort by Microsoft and all the hardware vendors to bring you an ultra-high-performance standard.

Previous | Table of Contents | Next

Copyright © Macmillan Computer Publishing, Inc.

Products | Contact Us | About Us | Privacy | Ad Info | Home
Use of this site is subject to certain Terms & Conditions, Copyright © 1996-2000 EarthWeb Inc. All rights reserved. Reproduction in whole or in part in any form or medium without express written permission of EarthWeb is prohibited. Read EarthWeb's privacy statement.