classes shader program now sets value using templates and forwarding except for some specific cases