this makes the API more robust, because now it's not possible to mess up the call to getShader(), by construction.