updated shader class to work on generic vector classes (not just float)