unify interface for setting source on shader object