package pixelgl import ( "github.com/go-gl/gl/v3.3-core/gl" "github.com/pkg/errors" ) // getLastError returns (and consumes) the last error generated by OpenGL inside the current Do, DoErr or DoVal. // If no error has been generated, this function returns nil. // // Call this function only inside the OpenGL thread (Do, DoErr or DoVal function). It's not guaranteed // to work correctly outside of it, because the thread swallows extra unchecked errors. func getLastError() error { err := uint32(gl.NO_ERROR) for e := gl.GetError(); e != gl.NO_ERROR; e = gl.GetError() { err = e } if err == gl.NO_ERROR { return nil } switch err { case gl.INVALID_ENUM: return errors.New("invalid enum") case gl.INVALID_VALUE: return errors.New("invalid value") case gl.INVALID_OPERATION: return errors.New("invalid operation") case gl.STACK_OVERFLOW: return errors.New("stack overflow") case gl.STACK_UNDERFLOW: return errors.New("stack underflow") case gl.OUT_OF_MEMORY: return errors.New("out of memory") case gl.INVALID_FRAMEBUFFER_OPERATION: return errors.New("invalid framebuffer operation") case gl.CONTEXT_LOST: return errors.New("context lost") default: return errors.New("unknown error") } }