Cover
Table of Contents
Preface
Chapter 1: Getting Started
With GLSL
Introduction
Using a function loader to access the latest OpenGL functionality
Using GLM for mathematics
Determining the GLSL and OpenGL version
Compiling a shader
Sending data to a shader using vertex attributes and vertex buffer objects
Getting a list of active vertex input attributes and locations
Sending data to a shader using uniform variables
Getting a list of active uniform variables
Using uniform blocks and uniform
buffer objects
Getting debug messages
Building a C++ shader program class
Chapter 2: The Basics of
GLSL Shaders
Introduction
Implementing diffuse, per-vertex shading with a single point light source
Implementing per-vertex ambient, diffuse, and specular (ADS) shading
Using functions in shaders
Implementing two-sided shading
Implementing flat shading
Using subroutines to select shader functionality
Discarding fragments to create a
perforated look
Chapter 3: Lighting, Shading,
and Optimization
Introduction
Shading with multiple positional lights
Shading with a directional light source
Using per-fragment shading for improved realism
Using the halfway vector for improved performance
Simulating a spotlight
Creating a cartoon shading effect
Simulating fog
Configuring the depth test
Chapter 4: Using Textures
Introduction
Applying a 2D texture
Applying multiple textures
Using alpha maps to discard pixels
Using normal maps
Simulating reflection with cube maps
Simulating refraction with cube maps
Applying a projected texture
Rendering to a texture
Using sampler objects
Chapter 5: Image Processing
and Screen
Space Techniques
Introduction
Applying an edge detection filter
Applying a Gaussian blur filter
Implementing HDR lighting with tone mapping
Creating a bloom effect
Using gamma correction to improve
image quality
Using multisample anti-aliasing
Using deferred shading
Implementing order-independent transparency
Chapter 6: Using Geometry and Tessellation Shaders
Introduction
Point sprites with the geometry shader
Drawing a wireframe on top of a shaded mesh
Drawing silhouette lines using the
geometry shader
Tessellating a curve
Tessellating a 2D quad
Tessellating a 3D surface
Tessellating based on depth
Chapter 7: Shadows
Introduction
Rendering shadows with shadow maps
Anti-aliasing shadow edges with PCF
Creating soft shadow edges with
random sampling
Creating shadows using shadow volumes and the geometry shader
Chapter 8: Using Noise in Shaders
Introduction
Creating a noise texture using GLM
Creating a seamless noise texture
Creating a cloud-like effect
Creating a wood-grain effect
Creating a disintegration effect
Creating a paint-spatter effect
Creating a night-vision effect
Chapter 9: Particle Systems
and Animation
Introduction
Animating a surface with vertex displacement
Creating a particle fountain
Creating a particle system using transform feedback
Creating a particle system using instanced particles
Simulating fire with particles
Simulating smoke with particles
Chapter 10: Using Compute Shaders
Introduction
Implementing a particle simulation with the compute shader
Using the compute shader for cloth simulation
Implementing an edge detection filter with the compute shader
Creating a fractal texture using the compute shader
Index