more flexible shader loading/compiling