Published by Addison-Wesley Professional (July 20, 2015) © 2016
Graham Sellers | Richard Wright | Nicholas HaemelOpenGL® SuperBible, Seventh Edition, is the definitive programmer’s guide, tutorial, and reference for OpenGL 4.5, the world’s leading 3D API for real-time computer graphics. The best introduction for any developer, it clearly explains OpenGL’s newest APIs; key extensions; shaders; and essential, related concepts. You’ll find up-to-date, hands-on guidance for all facets of modern OpenGL development—both desktop and mobile.
The authors explain what OpenGL does, how it connects to the graphics pipeline, and how it manages huge datasets to deliver compelling experiences. Step by step, they present increasingly sophisticated techniques, illuminating key concepts with worked examples. They introduce OpenGL on several popular platforms, and offer up-to-date best practices and performance advice.
This revised and updated edition introduces many new OpenGL 4.5 features, including important ARB and KHR extensions that are now part of the standard. It thoroughly covers the latest Approaching Zero Driver Overhead (AZDO) performance features, and demonstrates key enhancements with new example applications.
Coverage includes
- A practical introduction to real-time 3D graphics, including foundational math
- Core techniques for rendering, transformations, and texturing
- Shaders and the OpenGL Shading Language (GLSL) in depth
- Vertex processing, drawing commands, primitives, fragments, and framebuffers
- Compute shaders: harnessing graphics cards for more than graphics
- Pipeline monitoring and control
- Managing, loading, and arbitrating access to data
- Building larger applications and deploying them across platforms
- Advanced rendering: light simulation, artistic and non-photorealistic effects, and more
- Reducing CPU overhead and analyzing GPU behavior
- Supercharging performance with persistent maps, bindless textures, and fine-grained synchronization
- Preventing and debugging errors
- New applications: texture compression, text drawing, font rendering with distance fields, high-quality texture filtering, and OpenMP
Bonus material and sample code are available at openglsuperbible.com.
Figures xv
Tables xxi
Listings xxiii
Foreword xxxi
Preface xxxiii
Acknowledgments xxxix
About the Author xli
Part I: Foundations 1
Chapter 1: Introduction 3
OpenGL and the Graphics Pipeline 4
The Origins and Evolution of OpenGL 6
Primitives, Pipelines, and Pixels 10
Summary 11
Chapter 2: Our First OpenGL Program 13
Creating a Simple Application 14
Using Shaders 17
Drawing Our First Triangle 24
Summary 26
Chapter 3: Following the Pipeline 27
Passing Data to the Vertex Shader 28
Passing Data from Stage to Stage 30
Tessellation 33
Geometry Shaders 37
Primitive Assembly, Clipping, and Rasterization 39
Fragment Shaders 43
Framebuffer Operations 47
Compute Shaders 48
Using Extensions in OpenGL 49
Summary 54
Chapter 4: Math for 3D Graphics 55
Is This the Dreaded Math Chapter 56
A Crash Course in 3D Graphics Math 57
Understanding Transformations 69
Interpolation, Lines, Curves, and Splines 89
Summary 97
Chapter 5: Data 99
Buffers 100
Uniforms 117
Shader Storage Blocks 140
Atomic Counters 147
Textures 152
Summary 203
Chapter 6: Shaders and Programs 205
Language Overview 206
Compiling, Linking, and Examining Programs 219
Summary 238
Part II: In Depth 239
Chapter 7: Vertex Processing and Drawing Commands 241
Vertex Processing 242
Drawing Commands 249
Storing Transformed Vertices 278
Clipping 296
Summary 303
Chapter 8: Primitive Processing 305
Tessellation 306
Geometry Shaders 333
Summary 364
Chapter 9: Fragment Processing and the Framebuffer 365
Fragment Shaders 366
Per-Fragment Tests 369
Color Output 382
Off-Screen Rendering 390
Antialiasing 412
Advanced Framebuffer Formats 428
Point Sprites 448
Getting at Your Image 458
Summary 466
Chapter 10: Compute Shaders 467
Using Compute Shaders 468
Examples 479
Summary 502
Chapter 11: Advanced Data Management 503
Eliminating Binding 504
Sparsely Populated Textures 509
Texture Compression 516
Packed Data Formats 525
High-Quality Texture Filtering 527
Summary 531
Chapter 12: Controlling and Monitoring the Pipeline 533
Queries 534
Synchronization in OpenGL 556
Summary 562
Part III: In Practice 565
Chapter 13: Rendering Techniques 567
Lighting Models 568
Non-Photo-Realistic Rendering 610
Alternative Rendering Methods 613
Two-Dimensional Graphics 647
Summary 659
Chapter 14: High-Performance OpenGL 661
Optimizing CPU Performance 661
Low-Overhead OpenGL 677
Performance Analysis Tools 699
Summary 726
Chapter 15: Debugging and Stability 729
Debugging Your Applications 730
Security and Robustness 737
Summary 742
Appendix A: Further Reading 743
Appendix B: The SBM File Format 749
Appendix C: The SuperBible Tools 759
Glossary 797
Index 805