OpenGL 4.0 Shading Language Cookbook
Using the GLEW Library to access the latest OpenGL functionality
Using the GLM library for mathematics
Determining the GLSL and OpenGL version
Sending data to a shader using per-vertex attributes and vertex buffer objects
Getting a list of active vertex input attributes and indices
Sending data to a shader using uniform variables
Getting a list of active uniform variables
Using uniform blocks and uniform buffer objects
Building a C++ shader program class
Implementing diffuse, per-vertex shading with a single point light source
Implementing per-vertex ambient, diffuse, and specular (ADS) shading
Implementing two-sided shading
Using subroutines to select shader functionality
Discarding fragments to create a perforated look
Lighting, Shading Effects, and Optimizations
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
Creating a cartoon shading effect
Using alpha maps to discard pixels
Simulating reflection with cube maps
Simulating refraction with cube maps
Image Processing and Screen Space Techniques
Applying an edge detection filter
Applying a Gaussian blur filter
Using gamma correction to improve image quality
Using multisample anti-aliasing
Using Geometry and Tessellation Shaders
Point sprites with the geometry shader
Drawing a wireframe on top of a shaded mesh
Drawing silhouette lines using the geometry shader
Rendering shadows with shadow maps
Anti-aliasing shadow edges with PCF
Creating soft shadow edges with random sampling
Improving realism with prebaked ambient occlusion
Creating a noise texture using libnoise
Creating a seamless noise texture
Creating a disintegration effect
Creating a paint-spatter effect
Creating a night-vision effect
Animating a surface with vertex displacement
Creating a particle system using transform feedback
Creating a particle system using instanced particles