added IShader interface