Overview

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 ...

See more details below
OpenGL Shading Language

Available on NOOK devices and apps  
  • NOOK Devices
  • Samsung Galaxy Tab 4 NOOK
  • NOOK HD/HD+ Tablet
  • NOOK
  • NOOK Color
  • NOOK Tablet
  • Tablet/Phone
  • NOOK for Windows 8 Tablet
  • NOOK for iOS
  • NOOK for Android
  • NOOK Kids for iPad
  • PC/Mac
  • NOOK for Windows 8
  • NOOK for PC
  • NOOK for Mac

Want a NOOK? Explore Now

NOOK Book (eBook)
$27.49
BN.com price
(Save 42%)$47.99 List Price

Overview

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

  • Traditional OpenGL fixed functionality
  • Stored textures and procedural textures
  • Image-based lighting
  • Lighting with spherical harmonics
  • Ambient occlusion and shadow mapping
  • Volume shadows using deferred lighting
  • 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.

Read More Show Less

Editorial Reviews

From the Publisher

“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, as well as 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 GLSL—well 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 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.”

—Bob Kuehne, CEO, Blue Newt Software

“Computer graphics and rendering technologies just took a giant leap forward with hardware vendors rapidly adopting the new OpenGL Shading Language. This book presents a detailed treatment of these exciting technologies in a way that is extremely helpful for visualization and game developers.”

—Andy McGovern, Founder, Virtual Geographics, Inc.

“The OpenGL Shading Language is at the epicenter of the programmable graphics revolution, and Randi Rost has been at the center of the development of this significant new industry standard. If you need the inside track on how to use the OpenGL Shading Language to unleash new visual effects and unlock the supercomputer hiding inside the new generation of graphics hardware, then this is the book for you.”

—Neil Trevett, Senior Vice President, Market Development, 3Dlabs

Read More Show Less

Product Details

  • ISBN-13: 9780321669223
  • Publisher: Pearson Education
  • Publication date: 7/27/2009
  • Sold by: Barnes & Noble
  • Format: eBook
  • Edition number: 3
  • Pages: 792
  • Sales rank: 1,258,693
  • File size: 20 MB
  • Note: This product may take a few minutes to download.

Meet the Author

Randi J. Rost was a core contributor to the development of the OpenGL Shading Language and the OpenGL API that supports it, as well as one of the first programmers to design and implement shaders using this technology. Randi works at Intel.

Bill Licea-Kane is chair of the ARB OpenGL Shading Language workgroup. Bill is a principal member of technical staff at AMD.

Read More Show Less

Read an Excerpt

For just about as long as there has been graphics hardware, there has been programmable graphics hardware. Over the years, building flexibility into graphics hardware designs has been a necessary way of life for hardware developers. Graphics APIs continue to evolve, and because a hardware design can take two years or more from start to finish, the only way to guarantee a hardware product that can support the then current graphics APIs at its release is to build in some degree of programmability from the very beginning.

Until recently, the realm of programming graphics hardware belonged to just a few people, mainly researchers and graphics hardware driver developers. Research into programmable graphics hardware has been taking place for many years, but the point of this research has not been to produce viable hardware and software for application developers and end users. The graphics hardware driver developers have focused on the immediate task of providing support for the important graphics APIs of the time: PHIGS, PEX, Iris GL, OpenGL, Direct3D, and so on. Until recently, none of these APIs exposed the programmability of the underlying hardware, so application developers have been forced into using the fixed functionality provided by traditional graphics APIs.

Hardware companies have not exposed the programmable underpinnings of their products because of the high cost of educating and supporting customers to use low-level, device-specific interfaces, and because these interfaces typically change quite radically with each new generation of graphics hardware. Application developers who use such a device-specific interface to a piece of graphics hardware face the daunting task of updating their software for each new generation of hardware that comes along. And forget about supporting the application on hardware from multiple vendors!

As we moved into the 21st century, some of these fundamental tenets about graphics hardware were challenged. Application developers pushed the envelope as never before and demanded a variety of new features in hardware in order to create more and more sophisticated onscreen effects. As a result, new graphics hardware designs became more programmable than ever before. Standard graphics APIs were challenged to keep up with the pace of hardware innovation. For OpenGL, the result was a spate of extensions to the core API as hardware vendors struggled to support a range of interesting new features that their customers were demanding.

The creation of a standard, cross-platform, high-level shading language for commercially available graphics hardware was a watershed event for the graphics industry. A paradigm shift occurred, one that took us from the world of rigid, fixed functionality graphics hardware and graphics APIs to a brave new world where the visual processing unit, or VPU (i.e., graphics hardware), is as important as the central processing unit, or CPU. The VPU is optimized for processing dynamic media such as 3D graphics and video. Highly parallel processing of floating-point data is the primary task for VPUs, and the flexibility of the VPU means that it can also be used to process data other than a stream of traditional graphics commands. Applications can take advantage of the capabilities of both the CPU and the VPU, using the strengths of each to optimally perform the task at hand.

This book describes how graphics hardware programmability is exposed through a high-level language in the leading cross-platform 3D graphics API: OpenGL. This language, the OpenGL Shading Language, lets applications take total control over the most important stages of the graphics processing pipeline. No longer restricted to the graphics rendering algorithms and formulas chosen by hardware designers and frozen in silicon, software developers are beginning to use this programmability to create stunning effects in real time.

Intended Audience

The primary audience for this book is application programmers who want to write shaders. This book can be used as both a tutorial and a reference book by people interested in learning to write shaders with the OpenGL Shading Language. Some will use the book in one fashion, and some in the other. The organization is amenable to both uses and is based on the assumption that most people won't read the book in sequential order from back to front (but some intrepid 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 documentation in addition to this book.

Computer graphics has a mathematical basis, so some knowledge of algebra, trigonometry, and calculus will help readers understand and appreciate some of the details presented. With the advent of programmable graphics hardware, key parts of the graphics processing pipeline are once again under the control of software developers. To develop shaders successfully in this environment, developers must understand the mathematical basis of computer graphics.

About This Book

This book has three main parts. Chapters 1 through 8 teach the reader about the OpenGL Shading Language and how to use it. This part of the book covers details of the language and details of the OpenGL commands that create and manipulate shaders. To supply a basis for writing shaders, Chapters 9 through 20 contain a gallery of shader examples and some explanation of the underlying algorithms. This part of the book is both the baseline for a reader's shader development and a springboard for inspiring new ideas. Finally, Chapter 21 compares other notable commercial shading languages, and Appendices A and B contain reference material for the language and the API entry points that support it.

The chapters are arranged to suit the needs of the reader who is least familiar with OpenGL and shading languages. Certain chapters can be skipped by readers who are more 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 have time to read only two chapters of this book, this chapter and Chapter 3 are the ones to read.
  • Chapter 3 thoroughly describes the OpenGL Shading Language. This material is organized to present the details of a programming language. This section serves as a useful reference section for readers who have developed a general understanding of the language.
  • Chapter 4 discusses how the newly defined programmable parts of the rendering pipeline interact with each other and with OpenGL's fixed functionality. This discussion includes descriptions of the built-in variables defined in the OpenGL Shading Language.
  • Chapter 5 describes the built-in functions that are part of the OpenGL Shading Language. This section is a useful reference section for readers with an understanding of the language.
  • Chapter 6 presents and discusses a fairly simple shader example. People who learn best by diving in and studying a real example will benefit from the discussion in this chapter.
  • Chapter 7 describes the entry points that have been added to OpenGL to support the creation and manipulation of shaders. Application programmers who want to use shaders in their application must understand this material.
  • Chapter 8 presents some general advice on shader development and describes the shader development process. It also describes tools that are currently available to aid the shader development process.
  • Chapter 9 begins a series of chapters that present and discuss shaders with a common characteristic. In this chapter, shaders that duplicate some of the fixed functionality of the OpenGL pipeline are presented.
  • Chapter 10 presents a few shaders that are based on the capability to store data in and retrieve data from texture maps.
  • Chapter 11 is devoted to shaders that are procedural in nature; that is, effects are computed algorithmically rather than being based on information stored in textures.
  • Chapter 12 presents several alternative lighting models that can be implemented with OpenGL shaders.
  • Chapter 13 discusses algorithms and shaders for producing shadows.
  • Chapter 14 delves into the details of shaders that implement more realistic surface characteristics, including refraction, diffraction, and more realistic reflection.
  • Chapter 15 describes noise and the effects that can be achieved with its proper use.
  • Chapter 16 contains examples of how shaders can create rendering effects that vary over time.
  • Chapter 17 contains a discussion of the aliasing problem and how shaders can be written to reduce the effects of aliasing.
  • Chapter 18 illustrates shaders that achieve effects other than photorealism. Such effects include technical illustration, sketching or hatching effects, and other stylized rendering.
  • Chapter 19 presents several shaders that modify images 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 reference pages for 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 be presumed to illustrate the "best" way of achieving a particular effect. (Indeed, the "best" way to implement certain effects may have yet to be discovered through the power and flexibility of programmable graphics hardware.) Performance improvements for each shader are possible for any given hardware target. For most of the shaders, image quality may be improved if greater care is taken to reduce or eliminate causes of aliasing.

The source code for these shaders is written in a way that I believe represents a reasonable trade-off between source code clarity, portability, and performance. Use them to learn 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 rather than those with idiosyncrasies from their development on the very early implementations of the OpenGL Shading Language. Electronic versions of most of these shaders are available through a link at this book's Web site at http://3dshaders.com.

Errata

I know that this book contains some errors, but I've done my best to keep them to a minimum. If you find any errors, please report them to me (randi@3dshaders.com) and I will keep a running list on this book's Web site at http://3dshaders.com.

Typographical Conventions

This book contains a number of typographical conventions to enhance readability and understanding.

  • S

    MALL C

    APS are used for the first occurrence of defined terms.

  • Italics are used for emphasis, document titles, and coordinate values such as x, y, and z.
  • Bold serif is used for language keywords.
  • Sans serif is used for macros and symbolic constants that appear in the text.

  • Bold sans serif is used for function names.

  • Italic sans serif is used for variables, parameter names, spatial dimensions, and matrix components.

  • Fixed width is used for code examples.

Read More Show Less

Table of Contents

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

Read More Show Less

Preface

For just about as long as there has been graphics hardware, there has been programmable graphics hardware. Over the years, building flexibility into graphics hardware designs has been a necessary way of life for hardware developers. Graphics APIs continue to evolve, and because a hardware design can take two years or more from start to finish, the only way to guarantee a hardware product that can support the then current graphics APIs at its release is to build in some degree of programmability from the very beginning.

Until recently, the realm of programming graphics hardware belonged to just a few people, mainly researchers and graphics hardware driver developers. Research into programmable graphics hardware has been taking place for many years, but the point of this research has not been to produce viable hardware and software for application developers and end users. The graphics hardware driver developers have focused on the immediate task of providing support for the important graphics APIs of the time: PHIGS, PEX, Iris GL, OpenGL, Direct3D, and so on. Until recently, none of these APIs exposed the programmability of the underlying hardware, so application developers have been forced into using the fixed functionality provided by traditional graphics APIs.

Hardware companies have not exposed the programmable underpinnings of their products because of the high cost of educating and supporting customers to use low-level, device-specific interfaces, and because these interfaces typically change quite radically with each new generation of graphics hardware. Application developers who use such a device-specific interface to a piece of graphics hardware face the daunting task of updating their software for each new generation of hardware that comes along. And forget about supporting the application on hardware from multiple vendors!

As we moved into the 21st century, some of these fundamental tenets about graphics hardware were challenged. Application developers pushed the envelope as never before and demanded a variety of new features in hardware in order to create more and more sophisticated onscreen effects. As a result, new graphics hardware designs became more programmable than ever before. Standard graphics APIs were challenged to keep up with the pace of hardware innovation. For OpenGL, the result was a spate of extensions to the core API as hardware vendors struggled to support a range of interesting new features that their customers were demanding.

The creation of a standard, cross-platform, high-level shading language for commercially available graphics hardware was a watershed event for the graphics industry. A paradigm shift occurred, one that took us from the world of rigid, fixed functionality graphics hardware and graphics APIs to a brave new world where the visual processing unit, or VPU (i.e., graphics hardware), is as important as the central processing unit, or CPU. The VPU is optimized for processing dynamic media such as 3D graphics and video. Highly parallel processing of floating-point data is the primary task for VPUs, and the flexibility of the VPU means that it can also be used to process data other than a stream of traditional graphics commands. Applications can take advantage of the capabilities of both the CPU and the VPU, using the strengths of each to optimally perform the task at hand.

This book describes how graphics hardware programmability is exposed through a high-level language in the leading cross-platform 3D graphics API: OpenGL. This language, the OpenGL Shading Language, lets applications take total control over the most important stages of the graphics processing pipeline. No longer restricted to the graphics rendering algorithms and formulas chosen by hardware designers and frozen in silicon, software developers are beginning to use this programmability to create stunning effects in real time.

Intended Audience

The primary audience for this book is application programmers who want to write shaders. This book can be used as both a tutorial and a reference book by people interested in learning to write shaders with the OpenGL Shading Language. Some will use the book in one fashion, and some in the other. The organization is amenable to both uses and is based on the assumption that most people won't read the book in sequential order from back to front (but some intrepid 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 documentation in addition to this book.

Computer graphics has a mathematical basis, so some knowledge of algebra, trigonometry, and calculus will help readers understand and appreciate some of the details presented. With the advent of programmable graphics hardware, key parts of the graphics processing pipeline are once again under the control of software developers. To develop shaders successfully in this environment, developers must understand the mathematical basis of computer graphics.

About This Book

This book has three main parts. Chapters 1 through 8 teach the reader about the OpenGL Shading Language and how to use it. This part of the book covers details of the language and details of the OpenGL commands that create and manipulate shaders. To supply a basis for writing shaders, Chapters 9 through 20 contain a gallery of shader examples and some explanation of the underlying algorithms. This part of the book is both the baseline for a reader's shader development and a springboard for inspiring new ideas. Finally, Chapter 21 compares other notable commercial shading languages, and Appendices A and B contain reference material for the language and the API entry points that support it.

The chapters are arranged to suit the needs of the reader who is least familiar with OpenGL and shading languages. Certain chapters can be skipped by readers who are more 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 have time to read only two chapters of this book, this chapter and Chapter 3 are the ones to read.
  • Chapter 3 thoroughly describes the OpenGL Shading Language. This material is organized to present the details of a programming language. This section serves as a useful reference section for readers who have developed a general understanding of the language.
  • Chapter 4 discusses how the newly defined programmable parts of the rendering pipeline interact with each other and with OpenGL's fixed functionality. This discussion includes descriptions of the built-in variables defined in the OpenGL Shading Language.
  • Chapter 5 describes the built-in functions that are part of the OpenGL Shading Language. This section is a useful reference section for readers with an understanding of the language.
  • Chapter 6 presents and discusses a fairly simple shader example. People who learn best by diving in and studying a real example will benefit from the discussion in this chapter.
  • Chapter 7 describes the entry points that have been added to OpenGL to support the creation and manipulation of shaders. Application programmers who want to use shaders in their application must understand this material.
  • Chapter 8 presents some general advice on shader development and describes the shader development process. It also describes tools that are currently available to aid the shader development process.
  • Chapter 9 begins a series of chapters that present and discuss shaders with a common characteristic. In this chapter, shaders that duplicate some of the fixed functionality of the OpenGL pipeline are presented.
  • Chapter 10 presents a few shaders that are based on the capability to store data in and retrieve data from texture maps.
  • Chapter 11 is devoted to shaders that are procedural in nature; that is, effects are computed algorithmically rather than being based on information stored in textures.
  • Chapter 12 presents several alternative lighting models that can be implemented with OpenGL shaders.
  • Chapter 13 discusses algorithms and shaders for producing shadows.
  • Chapter 14 delves into the details of shaders that implement more realistic surface characteristics, including refraction, diffraction, and more realistic reflection.
  • Chapter 15 describes noise and the effects that can be achieved with its proper use.
  • Chapter 16 contains examples of how shaders can create rendering effects that vary over time.
  • Chapter 17 contains a discussion of the aliasing problem and how shaders can be written to reduce the effects of aliasing.
  • Chapter 18 illustrates shaders that achieve effects other than photorealism. Such effects include technical illustration, sketching or hatching effects, and other stylized rendering.
  • Chapter 19 presents several shaders that modify images 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 reference pages for 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 be presumed to illustrate the "best" way of achieving a particular effect. (Indeed, the "best" way to implement certain effects may have yet to be discovered through the power and flexibility of programmable graphics hardware.) Performance improvements for each shader are possible for any given hardware target. For most of the shaders, image quality may be improved if greater care is taken to reduce or eliminate causes of aliasing.

The source code for these shaders is written in a way that I believe represents a reasonable trade-off between source code clarity, portability, and performance. Use them to learn 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 rather than those with idiosyncrasies from their development on the very early implementations of the OpenGL Shading Language. Electronic versions of most of these shaders are available through a link at this book's Web site at http://3dshaders.com.

Errata

I know that this book contains some errors, but I've done my best to keep them to a minimum. If you find any errors, please report them to me (randi@3dshaders.com) and I will keep a running list on this book's Web site at http://3dshaders.com.

Typographical Conventions

This book contains a number of typographical conventions to enhance readability and understanding.

  • SMALL CAPS are used for the first occurrence of defined terms.
  • Italics are used for emphasis, document titles, and coordinate values such as x, y, and z.
  • Bold serif is used for language keywords.
  • Sans serif is used for macros and symbolic constants that appear in the text.
  • Bold sans serif is used for function names.
  • Italic sans serif is used for variables, parameter names, spatial dimensions, and matrix components.
  • Fixed width is used for code examples.
Read More Show Less

Customer Reviews

Average Rating 5
( 1 )
Rating Distribution

5 Star

(1)

4 Star

(0)

3 Star

(0)

2 Star

(0)

1 Star

(0)

Your Rating:

Your Name: Create a Pen Name or

Barnes & Noble.com Review Rules

Our reader reviews allow you to share your comments on titles you liked, or didn't, with others. By submitting an online review, you are representing to Barnes & Noble.com that all information contained in your review is original and accurate in all respects, and that the submission of such content by you and the posting of such content by Barnes & Noble.com does not and will not violate the rights of any third party. Please follow the rules below to help ensure that your review can be posted.

Reviews by Our Customers Under the Age of 13

We highly value and respect everyone's opinion concerning the titles we offer. However, we cannot allow persons under the age of 13 to have accounts at BN.com or to post customer reviews. Please see our Terms of Use for more details.

What to exclude from your review:

Please do not write about reviews, commentary, or information posted on the product page. If you see any errors in the information on the product page, please send us an email.

Reviews should not contain any of the following:

  • - HTML tags, profanity, obscenities, vulgarities, or comments that defame anyone
  • - Time-sensitive information such as tour dates, signings, lectures, etc.
  • - Single-word reviews. Other people will read your review to discover why you liked or didn't like the title. Be descriptive.
  • - Comments focusing on the author or that may ruin the ending for others
  • - Phone numbers, addresses, URLs
  • - Pricing and availability information or alternative ordering information
  • - Advertisements or commercial solicitation

Reminder:

  • - By submitting a review, you grant to Barnes & Noble.com and its sublicensees the royalty-free, perpetual, irrevocable right and license to use the review in accordance with the Barnes & Noble.com Terms of Use.
  • - Barnes & Noble.com reserves the right not to post any review -- particularly those that do not follow the terms and conditions of these Rules. Barnes & Noble.com also reserves the right to remove any review at any time without notice.
  • - See Terms of Use for other conditions and disclaimers.
Search for Products You'd Like to Recommend

Recommend other products that relate to your review. Just search for them below and share!

Create a Pen Name

Your Pen Name is your unique identity on BN.com. It will appear on the reviews you write and other website activities. Your Pen Name cannot be edited, changed or deleted once submitted.

 
Your Pen Name can be any combination of alphanumeric characters (plus - and _), and must be at least two characters long.

Continue Anonymously

    If you find inappropriate content, please report it to Barnes & Noble
    Why is this product inappropriate?
    Comments (optional)