HAPPY BOOKSGIVING
Use code BOOKSGIVING during checkout to save 40%-55% on books and eBooks. Shop now.
Register your product to gain access to bonus material or receive a coupon.
This eBook includes the following formats, accessible from your Account page after purchase:
EPUB The open industry format known for its reflowable content and usability on supported mobile devices.
PDF The popular standard, used most often with the free Acrobat® Reader® software.
This eBook requires no passwords or activation to read. We customize your eBook by discreetly watermarking it with your name, making it uniquely yours.
OpenGL® Shading Language, Third Edition, extensively updated for OpenGL 3.1, 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, Third Edition, includes updated descriptions for the language and all the GLSL entry points added though OpenGL 3.1, as well as updated chapters that discuss transformations, lighting, shadows, and surface characteristics. The third edition also features shaders that have been updated to OpenGL Shading Language Version 1.40 and their underlying algorithms, including
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.
Foreword to the Second Edition xxi
Foreword to the First Edition xxv
Preface xxix
About the Authors xxxv
About the Contributors xxxvii
Acknowledgments xxxix
Chapter 1: Review of OpenGL Basics 1
1.1 OpenGL History 1
1.2 OpenGL Evolution 4
1.3 Execution Model 5
1.4 The Framebuffer 6
1.5 State 9
1.6 Processing Pipeline 9
1.7 Drawing Geometry 11
1.8 Drawing Images 19
1.9 Coordinate Transforms 22
1.10 Texturing 27
1.11 Summary 33
1.12 Further Information 33
Chapter 2: Basics 35
2.1 Introduction to the OpenGL Shading Language 35
2.2 Why Write Shaders? 37
2.3 OpenGL Programmable Processors 38
2.4 Language Overview 47
2.5 System Overview 54
2.6 Key Benefits 59
2.7 Summary 61
2.8 Further Information 63
Chapter 3: Language Definition 65
3.1 Example Shader Pair 65
3.2 Data Types 67
3.3 Initializers and Constructors 76
3.4 Type Conversions 78
3.5 Qualifiers and Interface to a Shader 79
3.6 Flow Control 84
3.7 Operations 88
3.8 Preprocessor 93
3.9 Preprocessor Expressions 96
3.10 Error Handling 97
3.11 Summary 98
3.12 Further Information 98
Chapter 4: The OpenGL Programmable Pipeline 101
4.1 The Vertex Processor 102
4.2 The Fragment Processor 106
4.3 Built-in Uniform Variables 110
4.4 Built-in Constants 110
4.5 Interaction with OpenGL Fixed Functionality 111
4.6 Summary 115
4.7 Further Information 115
Chapter 5: Built-in Functions 117
5.1 Angle and Trigonometry Functions 118
5.2 Exponential Functions 121
5.3 Common Functions 122
5.4 Geometric Functions 134
5.5 Matrix Functions 136
5.6 Vector Relational Functions 138
5.7 Texture Access Functions 140
5.8 Fragment Processing Functions 176
5.9 Noise Functions 177
5.10 Summary 178
5.11 Further Information 178
Chapter 6: Simple Shading Example 181
6.1 Brick Shader Overview 182
6.2 Vertex Shader 183
6.3 Fragment Shader 189
6.4 Observations 196
6.5 Summary 197
6.6 Further Information 197
Chapter 7: OpenGL Shading Language API 199
7.1 Obtaining Version Information 200
7.2 Creating Shader Objects 203
7.3 Compiling Shader Objects 204
7.4 Linking and Using Shaders 205
7.5 Cleaning Up 210
7.6 Query Functions 211
7.7 Specifying Vertex Attributes 217
7.8 Specifying Uniform Variables 226
7.9 Samplers 238
7.10 Multiple Render Targets 239
7.11 Development Aids 240
7.12 Implementation-Dependent API Values 241
7.13 Application Code for Brick Shaders 242
7.14 Summary 247
7.15 Further Information 248
Chapter 8: Shader Development 251
8.1 General Principles 251
8.2 Performance Considerations 254
8.3 Shader Debugging 256
8.4 Shader Development Tools 258
8.5 Scene Graphs 263
8.6 Summary 266
8.7 Further Information 266
Chapter 9: Emulating OpenGL Fixed Functionality 269
9.1 Transformation 270
9.2 Light Sources 273
9.3 Material Properties and Lighting 277
9.4 Two-Sided Lighting 279
9.5 No Lighting 280
9.6 Fog 281
9.7 Texture Coordinate Generation 283
9.8 User Clipping 286
9.9 Texture Application 286
9.10 Matrices 288
9.11 Operating on the Current Matrices 291
9.12 Summary 294
9.13 Further Information 294
Chapter 10: Stored Texture Shaders 297
10.1 Access to Texture Maps from a Shader 298
10.2 Simple Texturing Example 300
10.3 Multitexturing Example 303
10.4 Cube Mapping Example 309
10.5 Another Environment Mapping Example 312
10.6 Glyph Bombing 316
10.7 Summary 326
10.8 Further Information 326
Chapter 11: Procedural Texture Shaders 329
11.1 Regular Patterns 331
11.2 Toy Ball 336
11.3 Lattice 344
11.4 Bump Mapping 345
11.5 Summary 354
11.6 Further Information 354
Chapter 12: Lighting 357
12.1 Hemisphere Lighting 357
12.2 Image-Based Lighting 361
12.3 Lighting with Spherical Harmonics 365
12.4 The Überlight Shader 369
12.5 Summary 376
12.6 Further Information 376
Chapter 13: Shadows 379
13.1 Ambient Occlusion 380
13.2 Shadow Maps 385
13.3 Deferred Shading for Volume Shadows 392
13.4 Summary 400
13.5 Further Information 400
Chapter 14: Surface Characteristics 403
14.1 Refraction 404
14.2 Diffraction 410
14.3 BRDF Models 415
14.4 Polynomial Texture Mapping with BRDF Data 422
14.5 Summary 431
14.6 Further Information 432
Chapter 15: Noise 435
15.1 Noise Defined 436
15.2 Noise Textures 444
15.3 Trade-offs 447
15.4 A Simple Noise Shader 448
15.5 Turbulence 451
15.6 Granite 453
15.7 Wood 454
15.8 Summary 457
15.9 Further Information 458
Chapter 16: Animation 461
16.1 On/Off 462
16.2 Threshold 463
16.3 Translation 463
16.4 Morphing 464
16.5 Other Blending Effects 467
16.6 Vertex Noise 468
16.7 Particle Systems 469
16.8 Wobble 476
16.9 Animating Once per Frame 480
16.10 Summary 483
16.11 Further Information 484
Chapter 17: Antialiasing Procedural Textures 487
17.1 Sources of Aliasing 487
17.2 Avoiding Aliasing 489
17.3 Increasing Resolution 490
17.4 Antialiased Stripe Example 491
17.5 Frequency Clamping 502
17.6 Summary 504
17.7 Further Information 504
Chapter 18: Non-photorealistic Shaders 507
18.1 Hatching Example 508
18.2 Technical Illustration Example 516
18.3 Mandelbrot Example 521
18.4 Summary 529
18.5 Further Information 530
Chapter 19: Shaders for Imaging 533
19.1 Geometric Image Transforms 534
19.2 Mathematical Mappings 534
19.3 Lookup Table Operations 535
19.4 Color Space Conversions 536
19.5 Image Interpolation and Extrapolation 537
19.6 Blend Modes 540
19.7 Convolution 546
19.8 Summary 555
19.9 Further Information 555
Chapter 20: Language Comparison 559
20.1 Chronology of Shading Languages 559
20.2 RenderMan 560
20.3 OpenGL Shader (ISL) 563
20.4 HLSL 565
20.5 Cg 568
20.6 Summary 570
20.7 Further Information 570
Appendix A: Language Grammar 573
Appendix B: API Function Reference 589
Implementation-Dependent API Values for GLSL 590
Other Queriable Values for GLSL 591
glAttachShader 592
glBindAttribLocation 594
glCompileShader 597
glCreateProgram 599
glCreateShader 601
glDeleteProgram 603
glDeleteShader 605
glDetachShader 607
glDrawBuffers 609
glEnableVertexAttribArray 612
glGetActiveAttrib 614
glGetActiveUniform 617
glGetAttachedShaders 621
glGetAttribLocation 623
glGetProgram 625
glGetProgramInfoLog 628
glGetShader 630
glGetShaderInfoLog 632
glGetShaderSource 634
glGetUniform 636
glGetUniformLocation 638
glGetVertexAttrib 640
glGetVertexAttribPointer 643
glIsProgram 645
glIsShader 647
glLinkProgram 648
glShaderSource 652
glUniform 654
glUseProgram 661
glValidateProgram 665
glVertexAttrib 667
glVertexAttribPointer 673
OpenGL 1.5 to OpenGL 2.0 GLSL Migration Guide 676
Afterword 681
Glossary 685
Further Reading 705
Index 721