added some structs, and a wrapper class for shader programs, thanks Angus