PacktLib: OpenGL 4 Shading Language Cookbook, Second Edition

OpenGL 4 Shading Language Cookbook Second Edition


About the Author

About the Reviewers


Getting Started with GLSL


Using a function loader to access the latest OpenGL functionality

Using GLM for mathematics

Determining the GLSL and OpenGL version

Compiling a shader

Linking a shader program

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

The Basics of GLSL Shaders


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

Lighting, Shading, and Optimization


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

Using Textures


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

Image Processing and Screen Space Techniques


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

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

Tessellating a curve

Tessellating a 2D quad

Tessellating a 3D surface

Tessellating based on depth



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

Using Noise in Shaders


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

Particle Systems and Animation


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

Using Compute Shaders


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