There is a full set of vertex and fragment shaders included with the source code that allow for external texture files with diffuse and specular lighting.
Overall colour values for the pixels are calculated by adding the ambient colour of the model with the diffuse colour (which we get from the texture or user definition) times by the colour of the light, it's power and the cosine of the angle between the normal of the pixel and the lights direction which is also based on the distance.
Finally we add the specular colour (in this case a grey of 30%), once again times by the light colour, power and then the cosine of whether the light is directly reflecting towards the camera or elsewhere.
I implemented a configuration/settings window into the application that allows for the user to see statistics and a fully mouse controlled GUI. This is done in a different method to the main window as it simply uses SDL2 for its output and double buffering. Although it may be a separate window it is attached to the main window at all times, each window is part of the program so keyboard input can be used from either.