fixed allocations in ShaderProgram, for shame