summaryrefslogtreecommitdiffstats
path: root/video/out
diff options
context:
space:
mode:
authorStefano Pigozzi <stefano.pigozzi@gmail.com>2015-01-24 16:26:11 +0100
committerStefano Pigozzi <stefano.pigozzi@gmail.com>2015-01-24 16:31:38 +0100
commit3dc3bcf8b6c52c2f05ba1c95575c84484bb57b76 (patch)
treee755e149e1e94eded92ecced472f4c18bd0be2ea /video/out
parent5e9f7916674c4640707727eac80c659290492bad (diff)
downloadmpv-3dc3bcf8b6c52c2f05ba1c95575c84484bb57b76.tar.bz2
mpv-3dc3bcf8b6c52c2f05ba1c95575c84484bb57b76.tar.xz
cocoa: fix fallback for OpenGL 2.1 hardware
This was previously done in common code but now it's left to backends. Also remove the GL4 stuff since requesting a 3_2_Core context creates a 4.1 context here (wtf).
Diffstat (limited to 'video/out')
-rw-r--r--video/out/gl_cocoa.c50
1 files changed, 25 insertions, 25 deletions
diff --git a/video/out/gl_cocoa.c b/video/out/gl_cocoa.c
index 4cbeda2441..bae255f782 100644
--- a/video/out/gl_cocoa.c
+++ b/video/out/gl_cocoa.c
@@ -58,30 +58,12 @@ static void *cocoa_glgetaddr(const char *s)
return ret;
}
-static bool create_gl_context(struct MPGLContext *ctx)
+static CGLError test_gl_version(CGLPixelFormatObj *pix,
+ CGLOpenGLProfile version)
{
- struct cgl_context *p = ctx->priv;
- CGLError err;
-
- CGLOpenGLProfile gl_vers_map[] = {
- [2] = kCGLOGLPVersion_Legacy,
- #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_9
- [3] = kCGLOGLPVersion_GL3_Core,
- [4] = kCGLOGLPVersion_GL4_Core,
- #else
- [3] = kCGLOGLPVersion_3_2_Core,
- #endif
- };
-
- int gl_major = MPGL_VER_GET_MAJOR(ctx->requested_gl_version);
- if (gl_major < 2 || gl_major >= MP_ARRAY_SIZE(gl_vers_map)) {
- MP_FATAL(ctx->vo, "OpenGL major version %d not supported", gl_major);
- return false;
- }
-
CGLPixelFormatAttribute attrs[] = {
kCGLPFAOpenGLProfile,
- (CGLPixelFormatAttribute) gl_vers_map[gl_major],
+ (CGLPixelFormatAttribute) version,
kCGLPFADoubleBuffer,
kCGLPFAAccelerated,
#if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_8
@@ -93,14 +75,32 @@ static bool create_gl_context(struct MPGLContext *ctx)
};
GLint npix;
- err = CGLChoosePixelFormat(attrs, &p->pix, &npix);
+ CGLError err;
+ err = CGLChoosePixelFormat(attrs, pix, &npix);
if (err == kCGLBadAttribute) {
// kCGLPFASupportsAutomaticGraphicsSwitching is probably not supported
// by the current hardware. Falling back to not using it.
- MP_ERR(ctx->vo, "error creating CGL pixel format with automatic GPU "
- "switching. falling back\n");
attrs[MP_ARRAY_SIZE(attrs) - 2] = 0;
- err = CGLChoosePixelFormat(attrs, &p->pix, &npix);
+ err = CGLChoosePixelFormat(attrs, pix, &npix);
+ }
+
+ return err;
+}
+
+static bool create_gl_context(struct MPGLContext *ctx)
+{
+ struct cgl_context *p = ctx->priv;
+ CGLError err;
+
+ CGLOpenGLProfile gl_versions[] = {
+ kCGLOGLPVersion_3_2_Core,
+ kCGLOGLPVersion_Legacy,
+ };
+
+ for (int n = 0; n < MP_ARRAY_SIZE(gl_versions); n++) {
+ err = test_gl_version(&p->pix, gl_versions[n]);
+ if (err == kCGLNoError)
+ break;
}
if (err != kCGLNoError) {