func BindLocations(name string, prog gl.Program, locations interface{}) {
	value := reflect.ValueOf(locations).Elem()
	Type := reflect.TypeOf(locations).Elem()
	for i := 0; i < value.NumField(); i++ {
		fieldValue := value.Field(i)
		fieldType := Type.Field(i)
		fieldName := fieldType.Name

		switch fieldValue.Interface().(type) {
		case gl.AttribLocation:
			loc := prog.GetAttribLocation(fieldName)
			fieldValue.SetInt(int64(loc))
		case gl.UniformLocation:
			loc := prog.GetUniformLocation(fieldName)
			fieldValue.SetInt(int64(loc))
		default:
		}
	}
}
func BindAttribLocations(name string, prog gl.Program, locations map[string]gl.AttribLocation) {
	for name := range locations {
		locations[name] = prog.GetAttribLocation(name)
	}
}
func BindUniformLocations(name string, prog gl.Program, locations map[string]gl.UniformLocation) {
	for name := range locations {
		locations[name] = prog.GetUniformLocation(name)
	}
}