set up to support multiple shaders