Table of Contents
Figures xv
Tables xxiii
Listings xxv
Foreword xxxiii
Preface xxxv
Acknowledgments xli
About the Authors xlv
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 16
Drawing Our First Triangle 24
Summary 25
Chapter 3: Following the Pipeline 27
Passing Data to the Vertex Shader 28
Passing Data from Stage to Stage 29
Tessellation 32
Geometry Shaders 36
Primitive Assembly, Clipping, and Rasterization 38
Fragment Shaders 42
Framebuffer Operations 45
Compute Shaders 47
Summary 48
Chapter 4: Math for 3D Graphics 49
Is This the Dreaded Math Chapter? 50
A Crash Course in 3D Graphics Math 51
Understanding Transformations 63
Interpolation, Lines, Curves, and Splines 82
Summary 90
Chapter 5: Data 91
Buffers 92
Uniforms 103
Shader Storage Blocks 126
Atomic Counters 133
Textures 137
Summary 185
Chapter 6: Shaders and Programs 187
Language Overview 188
Compiling, Linking, and Examining Programs 201
Summary 219
Part II: In Depth 221
Chapter 7: Vertex Processing and Drawing Commands 223
Vertex Processing 224
Drawing Commands 231
Storing Transformed Vertices 259
Clipping 276
Summary 282
Chapter 8: Primitive Processing 283
Tessellation 284
Geometry Shaders 310
Summary 340
Chapter 9: Fragment Processing and the Framebuffer 341
Fragment Shaders 342
Per-Fragment Tests 345
Color Output 357
Off-Screen Rendering 364
Antialiasing 384
Advanced Framebuffer Formats 399
Point Sprites 419
Getting at Your Image 428
Summary 435
Chapter 10: Compute Shaders 437
Using Compute Shaders 438
Examples 449
Summary 471
Chapter 11: Controlling and Monitoring the Pipeline 473
Queries 474
Synchronization in OpenGL 493
Summary 498
Part III: In Practice 501
Chapter 12: Rendering Techniques 503
Lighting Models 504
Non-Photo-Realistic Rendering 544
Alternative Rendering Methods 548
Summary 580
Chapter 13: Debugging and Performance Optimization 581
Debugging Your Applications 582
Performance Optimization 589
Summary 616
Chapter 14: Platform Specifics 617
Using Extensions in OpenGL 618
OpenGL on Windows 623
OpenGL on Mac OS X 647
OpenGL on Linux 682
OpenGL on Mobile Platforms 705
Summary 744
Appendix A: Further Reading 747
Appendix B: The SBM File Format 751
Appendix C: The SuperBible Tools 759
Glossary 765
Index 773