Introduction

The world of 3D graphics programming has never been more accessible or as easy to get to grips with as it is today. The rapid progression of the state of the art when it comes to pushing pixels means that the beginner can almost jump right in and be reasonably productive from day zero. It also means that the 3D graphics guru has never had it better when it comes to expanding his or her knowledge of how best to go about their work.

However, underneath the easily accessible veneer of obtainable results is still a huge minefield, especially when it comes to debugging and performance optimisation. Documentation isn't always correct or complete, basic techniques or frameworks for getting your pixels on the screen might be too basic to help you extract good performance, and heaven forbid an IHV ever writes the perfect graphics driver for the underlying hardware.

Throw in the operating system sitting somewhere in the middle, usually with a graphics programming API in tow, and the pitfalls and potholes to step in along the way to that perfect 3D application are myriad. Chances are you're going to need some help, then, since the fight will always be there somewhere.

So with the assumption that you're going to need some help, where do you turn for it? Many 3D graphics programmers will already be subscribed to their favourite mailing lists, and they'll have an expert or two that they know that they can turn to for advice. You can have a shelf full of books, a disk drive full of SDKs and code samples, and you can have all the up-to-date documentation for your development platform that you can find. All very good things to have, make no mistake.

If you're lucky, you might be in touch with the IHV directly, too, talking to devtech or ISV relations, and you might even know one of the core API guys at the Khronos Group or Microsoft. But when it comes to performance optimisation and debugging, there's not much that can beat asking the hardware what it's doing and how it's setup, to let you check things are happening in the right order, using the right formats, memory and state, all in the way you programmed it.

Recent years have seen the development of such tools, which sit as thin layers between your application and the underlying stack of driver, API and operating system. They instrument the hardware and let you tap into a rich vein of signals, state and resource information to let you see what's going on.

We've spent some good time with one such enabler of real-time debugging and performance optimisation for 3D graphics recently. NVIDIA PerfHUD has recently seen a version 5 release, indicating some reasonable maturity in the world of Direct3D application analysis, and it integrates into your 3D application at a fundamental level in order to trap execution and give you as much information as possible. Here's how we got on with the latest 5.00.0803.1515 build, on Vista x64.