func LoadShaders(glctx gl.Context, program gl.Program, vertexAsset, fragmentAsset string) error { vertexShader, err := loadShader(glctx, gl.VERTEX_SHADER, vertexAsset) if err != nil { return err } fragmentShader, err := loadShader(glctx, gl.FRAGMENT_SHADER, fragmentAsset) if err != nil { glctx.DeleteShader(vertexShader) return err } if glctx.GetProgrami(program, gl.ATTACHED_SHADERS) > 0 { for _, shader := range glctx.GetAttachedShaders(program) { glctx.DetachShader(program, shader) } } glctx.AttachShader(program, vertexShader) glctx.AttachShader(program, fragmentShader) glctx.LinkProgram(program) // Flag shaders for deletion when program is unlinked. glctx.DeleteShader(vertexShader) glctx.DeleteShader(fragmentShader) if glctx.GetProgrami(program, gl.LINK_STATUS) == 0 { defer glctx.DeleteProgram(program) return fmt.Errorf("LoadShaders: %s", glctx.GetProgramInfoLog(program)) } return nil }