refactor for more shaders