John Kessenich of 3Dlabs was the primary author of the OpenGL Shading Language specification document and the author of Chapter 3 of this book. Some of the material from the OpenGL Shading Language specification document was modified and included in Chapters 3, 4, and 5, and the OpenGL Shading Language grammar written by John for the specification is included in its entirety in Appendix A. John worked tirelessly throughout the standardization effort discussing, resolving, and documenting language and API issues; updating the specification through numerous revisions; and providing insight and education to many of the other participants in the effort. John also did some of the early shader development, including the very first versions of the wood, bump map, and environment mapping shaders discussed in this book.
Barthold Lichtenbelt of 3Dlabs was the primary author and document editor of the OpenGL extension specifications that defined the OpenGL Shading Language API. Some material from those specifications has been adapted and included in Chapter 7. Barthold worked tirelessly updating the specifications; discussing, resolving, and documenting issues; and guiding the participants of the ARB-GL2 working group to consensus. Barthold is also the coauthor of Chapter 4 of this book. Since August 2005, Barthold has been working at NVIDIA, where he is involved in OpenGL standardization efforts.
The industrywide initiative to define a high-level shading effort for OpenGL was ignited by a white paper called The OpenGL 2.0 Shading Language, written by Dave Baldwin (2001) of 3Dlabs. Dave's ideas provided the basic framework from which the OpenGL Shading Language has evolved.
Publication of this white paper occurred almost a year before any publication of information on competing, commercially viable, high-level shading languages. In this respect, Dave deserves credit as the trailblazer for a standard high-level shading language. Dave continued to be heavily involved in the design of the language and the API during its formative months. His original white paper also included code for a variety of shaders. This code served as the starting point for several of the shaders in this book: notably, the brick shaders presented in Chapter 6 and Chapter 17, the traditional shaders presented in Chapter 9, the antialiased checkerboard shader in Chapter 17, and the Mandelbrot shader in Chapter 18. Steve Koren of 3Dlabs was responsible for getting the aliased brick shader and the Mandelbrot shader working on real hardware for the first time.
Mike Weiblen developed and described the GLSL diffraction shader in Chapter 14, contributed a discussion of scene graphs and their uses in Chapter 8, contributed to the shadow volume shader in Section 13.3, and compiled the quick reference card included at the back of the book. Philip Rideout was instrumental in developing frameworks for writing and testing shaders. Many of the illustrations in this book were generated with Philip's GLSLdemo and deLight applications. Philip also contributed several of the shaders in this book, including the shadow shaders in Chapter 13 and the sphere morph and vertex noise shaders in Chapter 16. Joshua Doss developed the initial version of the glyph bombing shader described in Chapter 10. He and Inderaj Bains were the coauthors of ShaderGen, a tool that verified the fixed functionality code segments presented in Chapter 9 and that can automatically generate working shaders from current fixed functionality state. Teri Morrison contributed the OpenGL 1.5 to 2.0 migration guide that appears in Appendix B. Barthold Lichtenbelt took the pictures that were used to create the Old Town Square environment maps.
Hugh Malan of Pandromeda was the primary implementor of an amazing demo called RealWorldz that was developed for 3Dlabs by Pandromeda and is the author of the material that discusses this application in Chapter 20. Ken "Doc Mojo" Musgrave, Craig McNaughton, and Jonathan Dapra of Pandromeda contributed enormously to the success of this effort. Clifton Robin and Mike Weiblen were key contributors from 3Dlabs. Hugh also contributed the initial version of the shadow volume shader discussed in Section 13.3.
Bert Freudenberg of the University of Magdeburg developed the hatching shader described in Chapter 18. As part of this effort, Bert also explored some of the issues involved with analytic antialiasing with programmable graphics hardware. I have incorporated some of Bert's diagrams and results in Chapter 17. Bill Licea-Kane of ATI Research developed the toy ball shader presented in Chapter 11 and provided me with its "theory of operation." The stripe shader included in Chapter 11 was implemented by LightWork Design, Ltd. Antonio Tejada of 3Dlabs conceived and implemented the wobble shader presented in Chapter 16.
William "Proton" Vaughn of Newtek provided a number of excellent models for use in this book. I thank him for the use of his Pug model that appears in Color Plates 19 and 22 and the Drummer model that appears in Color Plate 20. Christophe Desse of xtrm3D.com also allowed me to use some of his great models. I used his Spaceman model in Color Plate 17, his Scoutwalker model in Color Plate 18, and his Ore model in Color Plate 21. Thanks are owed to William and Christophe not only for allowing me to use their models in this book, but for also contributing these models and many others for public use.
I would like to thank my colleagues at 3Dlabs for their assistance with the OpenGL 2.0 effort in general and for help in developing this book. Specifically, the 3Dlabs compiler team has been doing amazing work implementing the OpenGL Shading Language compiler, linker, and object support in the 3Dlabs OpenGL implementation. Dave Houlton and Mike Weiblen worked on RenderMonkey and other shader development tools. Dave also worked closely with companies such as SolidWorks and LightWork Design to enable them to take full advantage of the OpenGL Shading Language. Teri Morrison and Na Li implemented and tested the original OpenGL Shading Language extensions, and Teri, Barthold, and Matthew Williams implemented the official OpenGL 2.0 API support in the 3Dlabs drivers. This work has made it possible to create the code and images that appear in this book. The Fort Collins software team, which I was privileged to lead for several years, was responsible for producing the publicly available specifications and source code for the OpenGL Shading Language and OpenGL Shading Language API.
Dale Kirkland, Jeremy Morris, Phil Huxley, and Antonio Tejada of 3Dlabs were involved in many of the OpenGL 2.0 discussions and provided a wealth of good ideas and encouragement as the effort moved forward. Antonio also implemented the first parser for the OpenGL Shading Language. Other members of the 3Dlabs driver development teams in Fort Collins, Colorado; Egham, U.K.; Madison, Alabama; and Austin, Texas have contributed to the effort as well. The 3Dlabs executive staff should be commended for having the vision to move forward with the OpenGL 2.0 proposal and the courage to allocate resources to its development. Thanks to Osman Kent, Hock Leow, Neil Trevett, Jerry Peterson, Jeff Little, and John Schimpf in particular.
Numerous other people have been involved in the OpenGL 2.0 discussions. I would like to thank my colleagues and fellow ARB representatives at ATI, SGI, NVIDIA, Intel, Microsoft, Evans & Sutherland, IBM, Sun Microsystems, Apple, Imagination Technologies, Dell, Compaq, and HP for contributing to discussions and for helping to move the process along. In particular, Bill Licea-Kane of ATI chaired the ARB-GL2 working group since its creation and successfully steered the group to a remarkable achievement in a relatively short time. Bill, Evan Hart, Jeremy Sandmel, Benjamin Lipchak, and Glenn Ortner of ATI also provided insightful review and studious comments for both the OpenGL Shading Language and the OpenGL Shading Language API. Steve Glanville and Cass Everitt of NVIDIA were extremely helpful during the design of the OpenGL Shading Language, and Pat Brown of NVIDIA contributed enormously to the development of the OpenGL Shading Language API. Others with notable contributions to the final specifications include Marc Olano of the University of Maryland/Baltimore County; Jon Leech of SGI; Folker Schamel of Spinor; Matt Cruikshank, Steve Demlow, and Karel Zuiderveld of Vital Images; Allen Akin, contributing as an individual; and Kurt Akeley of NVIDIA. Numerous others provided review or commentary that helped improve the specification documents.
I think that special recognition should go to people who were not affiliated with a graphics hardware company and still participated heavily in the ARBGL2 working group. When representatives from a bunch of competing hardware companies get together in a room and try to reach agreement on an important standard that materially affects each of them, there is often squabbling over details that will cause one company or another extra grief in the short term. Marc Olano and Folker Schamel contributed enormously to the standardization effort as "neutral" third parties. Time and time again, their comments helped lead the group back to a higher ground. Allen Akin and Matt Cruikshank also contributed in this regard. Thanks, gentlemen, for your technical contributions and your valuable but underappreciated work as "referees."
A big thank you goes to the software developers who have taken the time to talk with us, send us e-mail, or answer survey questions on http://opengl.org. Our ultimate aim is to provide you with the best possible API for doing graphics application development, and the time that you have spent telling us what you need has been invaluable. A few ISVs lobbied long and hard for certain features, and they were able to convince us to make some significant changes to the original OpenGL 2.0 proposal. Thanks, all you software developers, and keep telling us what you need!
A debt of gratitude is owed to the designers of the C programming language, the designers of RenderMan, and the designers of OpenGL, the three standards that have provided the strongest influence on our efforts. Hopefully, the OpenGL Shading Language will continue their traditions of success and excellence.
The reviewers of various drafts of this book have helped greatly to increase its quality. Thanks to John Carey, Steve Cunningham, Bert Freudenberg, Michael Garland, Jeffrey Galinovsky, Dave Houlton, John Kessenich, Slawek Kilanowski, Bob Kuehne, Na Li, Barthold Lichtenbelt, Andy McGovern, Teri Morrison, Marc Olano, Brad Ritter, Philip Rideout, Teresa Rost, Folker Schamel, Maryann Simmons, Mike Weiblen, and two anonymous reviewers for reviewing some or all of the material in this book. Your comments have been greatly appreciated! Clark Wolter worked with me on the design of the cover image, and he improved and perfected the original concepts.
Thanks go to my three children, Rachel, Hannah, and Zachary, for giving up some play time with Daddy for a while, and for the smiles, giggles, hugs, and kisses that helped me get through this project. Finally, thank you, Teresa, the love of my life, for the support you've given me in writing this book. These have been busy times in our personal lives too, but you have had the patience, strength, and courage to see it through to completion. Thank you for helping me make this book a reality.