Last week, Addison Wesley kindly sent me a copy of the Fifth Edition of the OpenGL SuperBible so that I can write a review of it. So let's do that :-)
The OpenGL SuperBible has been a reference book since the first release and this fifth edition is the first edition to be exclusively focused on modern, shader based, OpenGL programming. That's the great novelty of this edition: it is based on the OpenGL 3.3 API and all discussions about deprecated fixed-function programming has been thrown out of the book.
In addition to make the book a lot lighter (230 pages are gone compared to the 4th edition !), I think it makes it a lot more interesting for educational purpose. Indeed, the approach that concist in teaching OpenGL in computer graphics courses only through shader programing is something I have been pushing for a while. This approach allows to be more focused on fundamental computer graphics and mathematical concepts than on API details that are not so interesting. In addition, it gives students more insight on how the graphics hardware really implement the features provided by the API.
The first chapter of the book is dedicated to absolute beginners in computer graphics. It presents a short introduction of basic 3D graphics concepts, a short history and the needed basic mathematical background. The second chapter starts with an interesting description of the history of OpenGL, how it is developed, the extensions mechanism and the core profile and deprecation mechanism. I am more skeptical about the second part of this chapter that describe how to setup a development environment to use OpenGL under Windows and MacOS. I am not sure this is really needed in a book dedicated to OpenGL, maybe we could expect a reader who knows basic C/C++ programming to know how to configure his development environment. The chapter end with a first example of a full program that draws a triangle on the screen and introduce the window management with glut.
Next chapters are built like a step-by-step tutorial, introducing more and more graphics concept and OpenGL functionalities. The writing seemed very educational to me but still succed in keeping things to the point. Source code is present all along the book with illustrative screenshots to detail and explain concepts. Starting with chapter 6, more advanced topics are detailed and the reader learn how to write his own custom shaders and use advanced texturing features. Buffer objects (VBO, PBO, FBO...) are well detailed in chapter 8 and advanced use of them is explained in chapter 9. Then follow per-pixel operations, and advanced shaders using transform feedback, geometry shaders, multisampling... More advanced geometry management features are described chapter 12, with instancing, queries and fences.
The last part of the book is dedicated to platform specific issues with OpenGL. The first chapters are mainly focused on window management and contexts issues on Windows, MacOS and Linux. This part seemed a little bit too long to me when first read (especially the part on MacOS X and how to use OpenGL with Cocoa), but they bring useful details for real life OpenGL developments. The last chapter descibes mobile devices development and the basics concepts of OpenGL ES. This is also interesting this is the kind of thing that deserve a full book by itself. My last criticism would go to the full OpenGL 3.3 man page printed in appendix. I am not sure it is really useful to spend 280 pages for something available online (and more easily searchable), please save trees !
Overall, I really liked the book, it is easy to follow, very practical, well written and nicely illustrated, a must have for beginners in OpenGL developments or old-school users who want to learn modern OpenGL !
More info there: http://www.opengl.org/sdk/docs/books/SuperBible/
November 15, 2010 at 7:36 PM
Great review, thanks. I also agree with your comment on using shader-based OpenGL for teaching. One reason I think it is slow to catch on is a lot more code is required to get started. What do you suggest for students new to graphics? Providing them with a framework for their first assignment?
November 16, 2010 at 9:32 AM
Yes that's what I did with my students. I provided them with a small framework to load shaders from files and with some utility classes like a 4x4 Matrix to ease matrices manipulation on the C++ side. I also provided them with base shader skeletons depending on what part I wanted them to focus. Finally with these base utilities, it is really as easy as using old fixed functions, and it appears a lot less magical to students !