Learning graphics programming is a lot more difficult than it used to be. The complexity and scale of graphics APIs has grown over the years; the initial learning curve is steeper that in previous versions of DirectX, and the sheer number of different algorithms and techniques that are required for even the more basic features of a typical modern video game mean that it is a daunting prospect for any beginner to aspire to create their own graphics applications or games. Justin Stenning's book will be a valuable reference to anyone who wants to learn graphics programming from the ground up, and it will also be useful to more experienced programmers who want to learn about specific techniques that they may not have implemented before, such as hardware tessellation, deferred contexts and image processing, for example.
The title of the book, and the brief synopsis at the start of the book gave me the impression that this was a book of specific rendering techniques for experienced programmers, akin to the GPU Gems series, for example. However, in the opening chapters, the book is much more geared towards beginners and those who are new to DirectX 11, before exploring an assortment of techniques that will be of wider interest.
I am impressed by the writing style. From start to finish, each topic is explained clearly in detailed step-by-step instructions. Personally, I like the clarity of this approach, but beginners should take note: make sure you read each step thoroughly and understand the purpose of every line of code, otherwise this style of tuition can degenerate into a typing exercise. You might get through each chapter with your code working as intended, but without understanding why it works. Helpfully, after each set of “how to do it” step-by-step instructions, there is a “how it works” section that should help to fill in some of the gaps in understanding. If you are new to programming, it is vital that you learn to write your own code, and don't be too reliant on having all the steps broken down. One thing that would have enhanced the book is to have programming exercises and challenges to encourage the readers to be creative, and to solve problems for themselves.
There are some other “core” topics that I would have liked to see covered, such as billboard rendering, level-of-detail(LOD) transitions, instancing, shadow mapping, stencil buffer techniques and so on. However, the book is already over 400 pages in length, so it is certainly not lacking in topics or depth of coverage. Moreover, anyone aspiring to be a skilled graphics programmer should expect to read many books throughout the course of their learning!
In conclusion, I highly recommend the book for anyone who is new to graphics programming, or even to new to DirectX 11, having come from a different graphics API, or an earlier version of DirectX. Students studying graphics or games development on university courses may like to consider this book as a helpful practical guide to be used alongside more academic and theoretical reading.