GLSL Custom Shader and FrameBuffer Pipeline


Project Features                                                                      Custom C++ Engine / OpenGL / 10 Weeks Development Time

  • Custom GLSL Vertex and Fragment Shaders

  • Dynamic Lighting calculated and applied in fragment shader

  • Supports Global Direct Lights, Local Point Lights, Local Ambient Lights, Global Ambient Light, Local Spotlights, and Global Spotlights

  • Custom FrameBuffer Objects for screen effects

  • Supports Normal Maps, Emissives, and Specular Color and Level

  • Visual debugging utilities for light positions and general graphics debugging

  • Custom material class for meshes


Project Overview

This was my second project involving 3D rendering. The focus was to learn about and implement custom shader and framebuffer pipelines with a forward renderer. The project features a variety of dynamic lights and avoids conditional statements in the shader whenever possible. I created a material class which provides support for diffuse textures, specular color and level, emissive textures, and normal maps. 

The project also provided a good opportunity to add visual debugging tools to my engine code base.


Project Post Mortem

What Went Well

  • This project provided first exposure to the GLSL shading language. I learned more about the rendering pipeline with OpenGL.
  • This project reinforced many of the concepts I learned in Linear Algebra. 

What Went Wrong

  • This was my first rendering project and many of the design decisions I made for my rendering engine pipeline were not adequate. 
  • My material class was often a victim of code bloat

What Was Learned

  • Graphics pipelines require well thought out design and research. It is often useful to spend extra time researching which design patterns are common with the game engine system being worked on.