10 Years of NCLGL
Whilst updating my LinkedIn recently, I realised that it’s been nearly 11 years since I started my PhD at Newcastle University. Not too long after I started my project, I also began creating course material for the masters degree – first for development on the Sony PlayStation 3, and later for the PC.
Both courses had a common backbone of C++ code, providing windowing, math classes, input, and all of the other building blocks a student needs to get to grips with the course material relating to OpenGL and Sony’s GCM rendering APIs. I named this library NCLGL – NCL is short for Newcastle, but I never could decide for sure whether the GL was Graphics Library or Game Library.
It’s had a little revamp here and there over the years, and now has components supporting Sony’s GNM rendering API, as well as the Khronos Group’s Vulkan API. At its heart are some classes I wrote a long time ago – part of the Win32 window construction code is probably from 2003, while the mouse and keyboard derive from my Syndicate Wars project from 2008.
Whatever the meaning of its name, it has now been powering the modules on Newcastle’s game engineering degrees for 10 years now, and in that time has helped close to a thousand students understand rendering, cross platform development, physics, and AI. I sometimes get emails from budding engineers from around the world who’ve stumbled across the University game engineering pages, and have used the material found there in their own self-driven learning. Being largely self-taught in rendering myself, it’s nice knowing that at least to some people out there, I am to them as the NeHe tutorials were to me back in the early 2000s.
Like many projects out there on the internet, it’s not entirely my own work – I couldn’t have made it without some help from EuclideanSpace.com for the inspiration behind the maths classes, and the Mat4 inverse is borrowed from the Doom 3 source code. More substantially, I use Glad for OpenGL function pointer retrieval on Win32, along with stbImage and stbTrueType for getting textures and typefaces.
The NCLGL framework is still being developed to this day, with recent additions being a Vulkan renderer, and some upcoming support for raytracing. What’s next for NCLGL? Who knows! Maybe someday I’ll get my hands on a PlayStation 5 devkit…