Changes to the shader implementation, added a ShaderFactory to be able to unit test easier.