Fleshed out Shader API (closes #145)