Game development papers books Orange book OpenGL shading language 2nd edition Orange book OpenGL shading language 2nd edition Orange book OpenGL shading language 2nd edition Orange book OpenGL shading language 2nd edition
OpenGL® Shading Language, Second Edition By Randi J. Rost Publisher: Addison Wesley Professional Pub Date: January 25, 2006 Print ISBN-10: 0-321-33489-2 Print ISBN-13: 978-0-321-33489-3 Pages: 800 Table of Contents | Index "As the 'Red Book' is known to be the gold standard for OpenGL, the 'Orange Book' is considered to be the gold standard for the OpenGL Shading Language. With Randi's extensive knowledge of OpenGL and GLSL, you can be assured you will be learning from a graphics industry veteran. Within the pages of the second edition you can find topics from beginning shader development to advanced topics such as the spherical harmonic lighting model and more." David Tommeraasen, CEO/Programmer, Plasma Software "This will be the definitive guide for OpenGL shaders; no other book goes into this detail. Rost has done an excellent job at setting the stage for shader development, what the purpose is, how to do it, and how it all fits together. The book includes great examples and details, and good additional coverage of 2.0 changes!" Jeffery Galinovsky, Director of Emerging Market Platform Development, Intel Corporation "The coverage in this new edition of the book is pitched just right to help many new shader- writers get started, but with enough deep information for the 'old hands.'" Marc Olano, Assistant Professor, University of Maryland "This is a really great book on GLSLwell written and organized, very accessible, and with good real-world examples and sample code. The topics flow naturally and easily, explanatory code fragments are inserted in very logical places to illustrate concepts, and all in all, this book makes an excellent tutorial as well as a reference." John Carey, Chief Technology Officer, C.O.R.E. Feature Animation OpenGL® Shading Language, Second Edition, extensively updated for OpenGL 2.0, is the experienced application programmer's guide to writing shaders. Part reference, part tutorial, this book thoroughly explains the shift from fixed-functionality graphics hardware to the new era of programmable graphics hardware and the additions to the OpenGL API that support this programmability. With OpenGL and shaders written in the OpenGL Shading Language, applications can perform better, achieving stunning graphics effects by using the capabilities of both the visual processing unit and the central processing unit. In this book, you will find a detailed introduction to the OpenGL Shading Language (GLSL) and the new OpenGL function calls that support it. The text begins by describing the syntax and semantics of this high-level programming language. Once this foundation has been established, the book explores the creation and manipulation of shaders using new OpenGL function calls. OpenGL® Shading Language, Second Edition, includes updated descriptions for the language and all the GLSL entry points added to OpenGL 2.0; new chapters that discuss lighting, shadows, and surface characteristics; and an under-the-hood look at the implementation of RealWorldz, the most ambitious GLSL application to date. The second edition also features 18 extensive new examples of shaders and their underlying algorithms, including z Image-based lighting z Lighting with spherical harmonics z Ambient occlusion z Shadow mapping z Volume shadows using deferred lighting z Ward's BRDF model The color plate section illustrates the power and sophistication of the OpenGL Shading Language. The API Function Reference at the end of the book is an excellent guide to the API entry points that support the OpenGL Shading Language. Also included is a convenient Quick Reference Card to GLSL. OpenGL® Shading Language, Second Edition By Randi J. Rost Publisher: Addison Wesley Professional Pub Date: January 25, 2006 Print ISBN-10: 0-321-33489-2 Print ISBN-13: 978-0-321-33489-3 Pages: 800 Table of Contents | Index Copyright Praise for OpenGL® Shading Language, Second Edition Praise for the First Edition of OpenGL® Shading Language Foreword Foreword to the First Edition Preface Intended Audience A bout This Book A bout the Shader Examples Errata Typographical Conventions A bout the Author A bout the Contributors A cknowledgments Chapter 1. Review of OpenGL Basics Section 1.1. OpenGL History Section 1.2. OpenGL Evolution Section 1.3. Execution Model Section 1.4. The Frame Buffer Section 1.5. State Section 1.6. Processing Pipeline Section 1.7. Drawing Geometry Section 1.8. Drawing Images Section 1.9. Coordinate Transforms Section 1.10. Texturing Section 1.11. Summary Section 1.12. Further Information Chapter 2. Basics Section 2.1. Introduction to the OpenGL Shading Language Section 2.2. Why Write Shaders? Section 2.3. OpenGL Programmable Processors Section 2.4. Language Overview Section 2.5. System Overview Section 2.6. Key Benefits Section 2.7. Summary Section 2.8. Further Information Chapter 3. Language Definition Section 3.1. Example Shader Pair Section 3.2. Data Types Section 3.3. Initializers and Constructors Section 3.4. Type Conversions Section 3.5. Qualifiers and Interface to a Shader Section 3.6. Flow Control Section 3.7. Operations Section 3.8. Preprocessor Section 3.9. Preprocessor Expressions Section 3.10. Error Handling Section 3.11. Summary Section 3.12. Further Information Chapter 4. The OpenGL Programmable Pipeline Section 4.1. The Vertex Processor Section 4.2. The Fragment Processor Section 4.3. Built-in Uniform Variables Section 4.4. Built-in Constants Section 4.5. Interaction with OpenGL Fixed Functionality Section 4.6. Summary Section 4.7. Further Information Chapter 5. Built-in Functions Section 5.1. Angle and Trigonometry Functions Section 5.2. Exponential Functions Section 5.3. Common Functions Section 5.4. Geometric Functions Section 5.5. Matrix Functions Section 5.6. Vector Relational Functions Section 5.7. Texture Access Functions Section 5.8. Fragment Processing Functions Section 5.9. Noise Functions Section 5.10. Summary Section 5.11. Further Information Chapter 6. Simple Shading Example Section 6.1. Brick Shader Overview Section 6.2. Vertex Shader Section 6.3. Fragment Shader Section 6.4. Observations Section 6.5. Summary Section 6.6. Further Information Chapter 7. OpenGL Shading Language API Section 7.1. Obtaining Version Information Section 7.2. Creating Shader Objects Section 7.3. Compiling Shader Objects Section 7.4. Linking and Using Shaders Section 7.5. Cleaning Up Section 7.6. Query Functions Section 7.7. Specifying Vertex Attributes Section 7.8. Specifying Uniform Variables Section 7.9. Samplers Section 7.10. Multiple Render Targets Section 7.11. Development Aids Section 7.12. Implementation-Dependent API Values Section 7.13. Application Code for Brick Shaders Section 7.14. Summary Section 7.15. Further Information Chapter 8. Shader Development Section 8.1. General Principles Section 8.2. Performance Considerations Section 8.3. Shader Debugging Section 8.4. Shader Development Tools Section 8.5. Scene Graphs Section 8.6. Summary Section 8.7. Further Information Chapter 9. Emulating OpenGL Fixed Functionality Section 9.1. Transformation Section 9.2. Light Sources Section 9.3. Material Properties and Lighting Section 9.4. Two-Sided Lighting Section 9.5. No Lighting Section 9.6. Fog Section 9.7. Texture Coordinate Generation Section 9.8. User Clipping Section 9.9. Texture Application Section 9.10. Summary Section 9.11. Further Information Chapter 10. Stored Texture Shaders Section 10.1. Access to Texture Maps from a Shader Section 10.2. Simple Texturing Example Section 10.3. Multitexturing Example Section 10.4. Cube Mapping Example Section 10.5. Another Environment Mapping Example Section 10.6. Glyph Bombing Section 10.7. Summary Section 10.8. Further Information Chapter 11. Procedural Texture Shaders Section 11.1. Regular Patterns Section 11.2. Toy Ball Section 11.3. Lattice Section 11.4. Bump Mapping Section 11.5. Summary Section 11.6. Further Information Chapter 12. Lighting Section 12.1. Hemisphere Lighting Section 12.2. Image-Based Lighting Section 12.3. Lighting with Spherical Harmonics Section 12.4. The ÜberLight Shader Section 12.5. Summary Section 12.6. Further Information Chapter 13. Shadows Section 13.1. Ambient Occlusion Section 13.2. Shadow Maps Section 13.3. Deferred Shading for Volume Shadows Section 13.4. Summary Section 13.5. Further Information Chapter 14. Surface Characteristics Section 14.1. Refraction Section 14.2. Diffraction Section 14.3. BRDF Models Section 14.4. Polynomial Texture Mapping with BRDF Data Section 14.5. Summary Section 14.6. Further Information Chapter 15. Noise Section 15.1. Noise Defined Section 15.2. Noise Textures Section 15.3. Trade-offs Section 15.4. A Simple Noise Shader Section 15.5. Turbulence Section 15.6. Granite Section 15.7. Wood Section 15.8. Summary Section 15.9. Further Information Chapter 16. Animation Section 16.1. On/Off Section 16.2. Threshold Section 16.3. Translation Section 16.4. Morphing Section 16.5. Other Blending Effects Section 16.6. Vertex Noise Section 16.7. Particle Systems Section 16.8. Wobble Section 16.9. Summary Section 16.10. Further Information Chapter 17. Antialiasing Procedural Textures Section 17.1. Sources of Aliasing Section 17.2. Avoiding Aliasing Section 17.3. Increasing Resolution Section 17.4. Antialiased Stripe Example Section 17.5. Frequency Clamping Section 17.6. Summary Section 17.7. Further Information Chapter 18. Non-Photorealistic Shaders Section 18.1. Hatching Example Section 18.2. Technical Illustration Example Section 18.3. Mandelbrot Example Section 18.4. Summary Section 18.5. Further Information Chapter 19. Shaders for Imaging Section 19.1. Geometric Image Transforms Section 19.2. Mathematical Mappings Section 19.3. Lookup Table Operations Section 19.4. Color Space Conversions Section 19.5. Image Interpolation and Extrapolation Section 19.6. Blend Modes Section 19.7. Convolution Section 19.8. Summary Section 19.9. Further Information Chapter 20. RealWorldz Section 20.1. Features Section 20.2. RealWorldz Internals Section 20.3. Implementation Section 20.4. Atmospheric Effects Section 20.5. Ocean Section 20.6. Clouds Section 20.7. Summary Section 20.8. Further Information Chapter 21. Language Comparison Section 21.1. Chronology of Shading Languages Section 21.2. RenderMan Section 21.3. OpenGL Shader (ISL) Section 21.4. HLSL Section 21.5. Cg Section 21.6. Summary Section 21.7. Further Information A ppendix A. Language Grammar A ppendix B. API Function Reference Implementation-Dependent API Values for GLSL Other Queriable Values for GLSL glAttachShader glBindAttribLocation glCompileShader glCreateProgram glCreateShader glDeleteProgram glDeleteShader glDetachShader glDrawBuffers glEnableVertexAttribArray glGetActiveAttrib glGetActiveUniform glGetAttachedShaders glGetAttribLocation glGetProgram glGetProgramInfoLog glGetShader glGetShaderInfoLog glGetShaderSource glGetUniform glGetUniformLocation glGetVertexAttrib glGetVertexAttribPointer glIsProgram glIsShader glLinkProgram glShaderSource glUniform glUseProgram glValidateProgram glVertexAttrib glVertexAttribPointer OpenGL 1.5 to OpenGL 2.0 GLSL Migration Guide A fterword Glossary Further Reading Index Copyright Many of the desi g nations used by manufacturers and sellers to distin g uish their products are cla i trademarks. Where those desi g nations appear in this book, and the publisher was aware of a tra claim, the designations have been printed with initial capital letters or in all capitals. The author and publisher have taken care in the preparation of this book, but make no expresse implied warranty of any kind and assume no responsibility for errors or omissions. No liability is assumed for incidental or consequential dama g es in connection with or arisin g out of the use of t information or programs contained herein. Hewlett-Packard Company makes no warranty as to the accuracy or completeness of the materi a included in this text and hereby disclaims any responsibility therefore. The publisher offers excellent discounts on this book when ordered in quantity for bulk purchase s special sales, which may include electronic versions and/or custom covers and content particula r your business, trainin g g oals, marketin g focus, and brandin g interests. For more information, pl e contact: U.S. Corporate and Government Sales (800) 382-3419 corpsales@pearsontechgroup.com For sales outside the U.S., please contact: International Sales international@pearsoned.com Visit us on the Web: www.awprofessional.com Library of Congress Cataloging-in-Publication Data Rost, Randi J., 1960 OpenGL shadin g lan g ua g e / Randi J. Rost ; with contributions by John M. Kessenich . . . [et al.] . p. cm. Includes bibliographical references and index. ISBN 0-321-33489-2 (pbk. : alk. paper) 1. Computer graphics. 2. OpenGL. I. Kessenich, John M. II. Title. T385.R665 2006 006.6'86dc22 2005029650 Copyright © 2006 Pearson Education, Inc. Chapter 3 © 2003 John M. Kessenich Portions of Chapter 4 © 2003 Barthold Lichtenbelt All ri g hts reserved. Printed in the United States of America. This publication is protected by copy and permission must be obtained from the publisher prior to any prohibited reproduction, stora g retrieval system, or transmission in any form or by any means, electronic, mechanical, photoco p recording, or likewise. For information regarding permissions, write to: Pearson Education, Inc Rights and Contracts Department 75 Arlington Street, Suite 300 Boston, MA 02116 Fax (617) 848-7047 Text printed in the United States on recycled paper at Courier in Stoughton, Massachusetts. First printing, January 2006 Dedication To Baby Cakes, Baby Doll, Love Bug, and Little Zookathanks for your love and support To Mom and Popmy first and best teachers Praise for OpenGL® Shading Language, Second Edition "As the 'Red Book' is known to be the gold standard for OpenGL, the 'Orange Book' is considered to be the gold standard for the OpenGL Shading Language. With Randi's extensive knowledge of OpenGL and GLSL, you can be assured you will be learning from a graphics industry veteran. Within the pages of the second edition you can find topics from beginning shader development to advanced topics such as the spherical harmonic lighting model and more." David Tommeraasen CEO/Programmer Plasma Software "This will be the definitive guide for OpenGL shaders; no other book goes into this detail. Rost has done an excellent job at setting the stage for shader development, what the purpose is, how to do it, and how it all fits together. The book includes great examples and details, and good additional coverage of 2.0 changes!" Jeffery Galinovsky Director of Emerging Market Platform Development Intel Corporation "The coverage in this new edition of the book is pitched just right to help many new shader- writers get started, but with enough deep information for the 'old hands.'" Marc Olano Assistant Professor University of Maryland "This is a really great book on GLSLwell written and organized, very accessible, and with good real-world examples and sample code. The topics flow naturally and easily, explanatory code fragments are inserted in very logical places to illustrate concepts, and all in all, this book makes an excellent tutorial as well as a reference." John Carey Chief Technology Officer C.O.R.E. Feature Animation [...]... as they are being drawn with OpenGL Chapter 20 describes some of the techniques and algorithms used in a complex OpenGL application that makes extensive use of the OpenGL Shading Language Chapter 21 compares the OpenGL Shading Language with other notable commercial shading languages Appendix A contains the language grammar that more clearly specifies the OpenGL Shading Language Appendix B contains... using the OpenGL Shading Language Mike currently contributes to several open-source software projects, such as spearheading the integration of OpenGL Shading Language support into OpenSceneGraph Acknowledgments 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. .. 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... familiar with both topics This book has somewhat compartmentalized chapters in order to allow such usage Chapter 1 reviews the fundamentals of the OpenGL API Readers already familiar with OpenGL may skip to Chapter 2 Chapter 2 introduces the OpenGL Shading Language and the OpenGL entry points that have been added to support it If you want to know what the OpenGL Shading Language is all about and you... 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... 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... the OpenGL Shading Language, and improve on them for use in your own projects All the images produced for this book were done either on the first graphics accelerator to provide support for the OpenGL Shading Language, the 3Dlabs Wildcat VP, or its successor, the 3Dlabs Wildcat Realizm I have taken as much care as possible to present shaders that are done "the right way" for the OpenGL Shading Language. .. the API entry points that are related to the OpenGL Shading Language Finally, Glossary collects terms defined in the book, Further Reading gathers all the chapter references and adds more, and Index ends the book About the Shader Examples The shaders contained in this book are primarily short programs that illustrate the capabilities of the OpenGL Shading Language None of the example shaders should... Corporation "OpenGL Shading Language provides a timely, thorough, and entertaining introduction to the only OpenGL ARB-approved high-level shading language in existence Whether an expert or a novice, there are gems to be discovered throughout the book, and the reference pages will be your constant companion as you dig into the depths of the shading APIs From algorithms to APIs, this book has you covered."... readers of the first edition reported that they did just that!) Readers do not need previous knowledge of OpenGL to absorb the material in this book, but such knowledge is very helpful A brief review of OpenGL is included, but this book does not attempt to be a tutorial or reference book for OpenGL Anyone attempting to develop an OpenGL application that uses shaders should be armed with OpenGL programming . OpenGL Shading Language, Second Edition By Randi J. Rost Publisher: Addison Wesley Professional Pub Date: January 25, 2006 Print ISBN-10: 0-3 2 1-3 348 9-2 Print ISBN-13: 97 8-0 -3 2 1-3 348 9-3 Pages:. GLSL. OpenGL Shading Language, Second Edition By Randi J. Rost Publisher: Addison Wesley Professional Pub Date: January 25, 2006 Print ISBN-10: 0-3 2 1-3 348 9-2 Print ISBN-13: 97 8-0 -3 2 1-3 348 9-3 Pages:. Copyright Praise for OpenGL Shading Language, Second Edition Praise for the First Edition of OpenGL Shading Language Foreword Foreword to the First Edition Preface Intended Audience A bout This Book A bout