rewrote Shader class