diff options
author | Akemi <der.richter@gmx.de> | 2018-02-18 22:10:34 +0100 |
---|---|---|
committer | Kevin Mitchell <kevmitch@gmail.com> | 2018-02-21 22:30:46 -0800 |
commit | 7f714c6984b3ca0ee49a76cbb46fbeb520519401 (patch) | |
tree | ef0f83a0fe31cb7d3aa1c4dcfa548874976b16ca | |
parent | 5cc796daccd3f3ccc0506d4423fd52e00c12218a (diff) | |
download | mpv-7f714c6984b3ca0ee49a76cbb46fbeb520519401.tar.bz2 mpv-7f714c6984b3ca0ee49a76cbb46fbeb520519401.tar.xz |
cocoa-cb: fix invalid framebuffer operation error
in certain circumstances the returned fbo for drawing is 0, but that
fbo is solely used internally by the CAOpenGLLayer for its drawing and
should never be used. in that case we fallback to 1 or the last used fbo
instead if it was not 0.
Fixes #5546
-rw-r--r-- | osdep/macOS_mpv_helper.swift | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/osdep/macOS_mpv_helper.swift b/osdep/macOS_mpv_helper.swift index 39be9cc8c7..15081d0133 100644 --- a/osdep/macOS_mpv_helper.swift +++ b/osdep/macOS_mpv_helper.swift @@ -26,6 +26,7 @@ class MPVHelper: NSObject { var mpvLog: OpaquePointer? var inputContext: OpaquePointer? var mpctx: UnsafeMutablePointer<MPContext>? + var fbo: GLint = 1 init(_ mpv: OpaquePointer) { super.init() @@ -101,8 +102,11 @@ class MPVHelper: NSObject { if mpvGLCBContext != nil { var i: GLint = 0 glGetIntegerv(GLenum(GL_DRAW_FRAMEBUFFER_BINDING), &i) + // CAOpenGLLayer has ownership of FBO zero yet can return it to us, + // so only utilize a newly received FBO ID if it is nonzero. + fbo = i != 0 ? i : fbo - mpv_opengl_cb_draw(mpvGLCBContext, i, Int32(surface.width), Int32(-surface.height)) + mpv_opengl_cb_draw(mpvGLCBContext, fbo, Int32(surface.width), Int32(-surface.height)) } else { glClearColor(0, 0, 0, 1) glClear(GLbitfield(GL_COLOR_BUFFER_BIT)) |