glUniform1f() wrongly assumes that exposure is uniform 0.  Using glGetUniformLocation() instead and store the result in a member value.