Opengl Shading Languag 2Nd Edition (Orange Book)
Total Page:16
File Type:pdf, Size:1020Kb
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 About This Book About the Shader Examples Errata Typographical Conventions About the Author About the Contributors Acknowledgments 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.