--- video/out/opengl/common.c.orig
+++ video/out/opengl/common.c
@@ -473,6 +473,7 @@ void mpgl_load_functions2(GL *gl, void *
     if (shader)
         mp_verbose(log, "GL_SHADING_LANGUAGE_VERSION='%s'\n", shader);
 
+#if !defined (__APPLE__) || MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
     if (gl->version >= 300) {
         gl->GetStringi = get_fn(fn_ctx, "glGetStringi");
         gl->GetIntegerv = get_fn(fn_ctx, "glGetIntegerv");
@@ -487,7 +488,9 @@ void mpgl_load_functions2(GL *gl, void *
             gl->extensions = talloc_asprintf_append(gl->extensions, " %s", ext);
         }
 
-    } else {
+    } else
+#endif
+    {
         const char *ext = (char*)gl->GetString(GL_EXTENSIONS);
         gl->extensions = talloc_asprintf_append(gl->extensions, " %s", ext);
     }
--- video/out/opengl/common.h.orig
+++ video/out/opengl/common.h
@@ -22,6 +22,10 @@
 #include <stdint.h>
 #include <stdbool.h>
 
+#ifdef __APPLE__
+#include <AvailabilityMacros.h>
+#endif
+
 #include "config.h"
 #include "common/msg.h"
 #include "misc/bstr.h"
@@ -34,7 +38,9 @@
 #if HAVE_GL_COCOA
 #define GL_DO_NOT_WARN_IF_MULTI_GL_VERSION_HEADERS_INCLUDED 1
 #include <OpenGL/gl.h>
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
 #include <OpenGL/gl3.h>
+#endif
 #include <OpenGL/glext.h>
 #elif HAVE_ANDROID_GL
 #include <GLES3/gl3.h>
--- video/out/opengl/video.c.orig
+++ video/out/opengl/video.c
@@ -407,12 +407,22 @@ const struct m_sub_options gl_video_conf
                     {"rgb10",  GL_RGB10},
                     {"rgb10_a2", GL_RGB10_A2},
                     {"rgb16",  GL_RGB16},
+#if !defined(__APPLE__) || MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
                     {"rgb16f", GL_RGB16F},
                     {"rgb32f", GL_RGB32F},
+#else
+                    {"rgb16f", GL_RGB16F_ARB},
+                    {"rgb32f", GL_RGB32F_ARB},
+#endif
                     {"rgba12", GL_RGBA12},
                     {"rgba16", GL_RGBA16},
+#if !defined(__APPLE__) || MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
                     {"rgba16f", GL_RGBA16F},
                     {"rgba32f", GL_RGBA32F},
+#else
+                    {"rgba16f", GL_RGBA16F_ARB},
+                    {"rgba32f", GL_RGBA32F_ARB},
+#endif
                     {"auto",   0})),
         OPT_CHOICE_OR_INT("dither-depth", dither_depth, 0, -1, 16,
                           ({"no", -1}, {"auto", 0})),
@@ -3009,7 +3019,11 @@ static void check_gl_features(struct gl_
     bool have_texrg = gl->mpgl_caps & MPGL_CAP_TEX_RG;
     bool have_tex16 = !gl->es || (gl->mpgl_caps & MPGL_CAP_EXT16);
 
+#if !defined(__APPLE__) || MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
     const GLint auto_fbo_fmts[] = {GL_RGBA16, GL_RGBA16F, GL_RGB10_A2,
+#else
+    const GLint auto_fbo_fmts[] = {GL_RGBA16, GL_RGBA16F_ARB, GL_RGB10_A2,
+#endif
                                    GL_RGBA8, 0};
     GLint user_fbo_fmts[] = {p->opts.fbo_format, 0};
     const GLint *fbo_fmts = user_fbo_fmts[0] ? user_fbo_fmts : auto_fbo_fmts;
--- video/out/opengl/context_cocoa.c.orig
+++ video/out/opengl/context_cocoa.c
@@ -48,12 +48,17 @@ static void *cocoa_glgetaddr(const char 
 
 static CGLError test_gl_version(struct vo *vo,
                                 CGLContextObj *ctx,
-                                CGLPixelFormatObj *pix,
-                                CGLOpenGLProfile version)
+                                CGLPixelFormatObj *pix
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
+                                , CGLOpenGLProfile version
+#endif
+                                )
 {
     CGLPixelFormatAttribute attrs[] = {
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
         kCGLPFAOpenGLProfile,
         (CGLPixelFormatAttribute) version,
+#endif
         kCGLPFADoubleBuffer,
         kCGLPFAAccelerated,
         #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_8
@@ -91,16 +96,22 @@ static bool create_gl_context(struct MPG
     struct cgl_context *p = ctx->priv;
     CGLError err;
 
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
     CGLOpenGLProfile gl_versions[] = {
         kCGLOGLPVersion_3_2_Core,
         kCGLOGLPVersion_Legacy,
     };
+#endif
 
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
     for (int n = 0; n < MP_ARRAY_SIZE(gl_versions); n++) {
         err = test_gl_version(ctx->vo, &p->ctx, &p->pix, gl_versions[n]);
         if (err == kCGLNoError)
             break;
     }
+#else
+    err = test_gl_version(ctx->vo, &p->ctx, &p->pix);
+#endif
 
     if (err != kCGLNoError) {
         MP_FATAL(ctx->vo, "error creating CGL context: %s (%d)\n",
@@ -164,4 +175,4 @@ const struct mpgl_driver mpgl_driver_coc
     .swap_buffers   = cocoa_swap_buffers,
     .control        = cocoa_control,
     .uninit         = cocoa_uninit,
-};
\ No newline at end of file
+};
--- video/out/opengl/formats.c.orig
+++ video/out/opengl/formats.c
@@ -42,24 +42,49 @@ const struct gl_format gl_formats[] = {
 
     // Non-normalized integer formats.
     // Follows ES 3.0 as to which are color-renderable.
+#if !defined(__APPLE__) || MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
     {GL_R8UI,                GL_RED_INTEGER,     T_U8,  F_CR | F_GL3 | F_ES3},
+#else
+    {GL_R8UI,                GL_RED_INTEGER_EXT, T_U8,  F_CR | F_GL3 | F_ES3},
+#endif
     {GL_RG8UI,               GL_RG_INTEGER,      T_U8,  F_CR | F_GL3 | F_ES3},
+#if !defined(__APPLE__) || MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
     {GL_RGB8UI,              GL_RGB_INTEGER,     T_U8,         F_GL3 | F_ES3},
     {GL_RGBA8UI,             GL_RGBA_INTEGER,    T_U8,  F_CR | F_GL3 | F_ES3},
     {GL_R16UI,               GL_RED_INTEGER,     T_U16, F_CR | F_GL3 | F_ES3},
+#else
+    {GL_RGB8UI_EXT,          GL_RGB_INTEGER_EXT,  T_U8,         F_GL3 | F_ES3},
+    {GL_RGBA8UI_EXT,         GL_RGBA_INTEGER_EXT, T_U8,  F_CR | F_GL3 | F_ES3},
+    {GL_R16UI,               GL_RED_INTEGER_EXT,  T_U16, F_CR | F_GL3 | F_ES3},
+#endif
     {GL_RG16UI,              GL_RG_INTEGER,      T_U16, F_CR | F_GL3 | F_ES3},
+#if !defined(__APPLE__) || MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
     {GL_RGB16UI,             GL_RGB_INTEGER,     T_U16,        F_GL3 | F_ES3},
     {GL_RGBA16UI,            GL_RGBA_INTEGER,    T_U16, F_CR | F_GL3 | F_ES3},
+#else
+    {GL_RGB16UI_EXT,         GL_RGB_INTEGER_EXT,  T_U16,        F_GL3 | F_ES3},
+    {GL_RGBA16UI_EXT,        GL_RGBA_INTEGER_EXT, T_U16, F_CR | F_GL3 | F_ES3},
+#endif
 
     // On GL3+ or GL2.1 with GL_ARB_texture_float, floats work fully.
     {GL_R16F,                GL_RED,             T_FL,  F_F16 | F_CF | F_GL3 | F_GL2F},
     {GL_RG16F,               GL_RG,              T_FL,  F_F16 | F_CF | F_GL3 | F_GL2F},
+#if !defined(__APPLE__) || MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
     {GL_RGB16F,              GL_RGB,             T_FL,  F_F16 | F_CF | F_GL3 | F_GL2F},
     {GL_RGBA16F,             GL_RGBA,            T_FL,  F_F16 | F_CF | F_GL3 | F_GL2F},
+#else
+    {GL_RGB16F_ARB,          GL_RGB,             T_FL,  F_F16 | F_CF | F_GL3 | F_GL2F},
+    {GL_RGBA16F_ARB,         GL_RGBA,            T_FL,  F_F16 | F_CF | F_GL3 | F_GL2F},
+#endif
     {GL_R32F,                GL_RED,             T_FL,          F_CF | F_GL3 | F_GL2F},
     {GL_RG32F,               GL_RG,              T_FL,          F_CF | F_GL3 | F_GL2F},
+#if !defined(__APPLE__) || MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
     {GL_RGB32F,              GL_RGB,             T_FL,          F_CF | F_GL3 | F_GL2F},
     {GL_RGBA32F,             GL_RGBA,            T_FL,          F_CF | F_GL3 | F_GL2F},
+#else
+    {GL_RGB32F_ARB,          GL_RGB,             T_FL,          F_CF | F_GL3 | F_GL2F},
+    {GL_RGBA32F_ARB,         GL_RGBA,            T_FL,          F_CF | F_GL3 | F_GL2F},
+#endif
 
     // Note: we simply don't support float anything on ES2, despite extensions.
     // We also don't bother with non-filterable float formats, and we ignore
@@ -69,15 +94,25 @@ const struct gl_format gl_formats[] = {
     // F_EXTF16 implies extensions that also enable 16 bit floats fully.
     {GL_R16F,                GL_RED,             T_FL,  F_F16 | F_CF | F_ES32 | F_EXTF16},
     {GL_RG16F,               GL_RG,              T_FL,  F_F16 | F_CF | F_ES32 | F_EXTF16},
+#if !defined(__APPLE__) || MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
     {GL_RGB16F,              GL_RGB,             T_FL,  F_F16 | F_TF | F_ES32 | F_EXTF16},
     {GL_RGBA16F,             GL_RGBA,            T_FL,  F_F16 | F_CF | F_ES32 | F_EXTF16},
+#else
+    {GL_RGB16F_ARB,          GL_RGB,             T_FL,  F_F16 | F_TF | F_ES32 | F_EXTF16},
+    {GL_RGBA16F_ARB,         GL_RGBA,            T_FL,  F_F16 | F_CF | F_ES32 | F_EXTF16},
+#endif
 
     // On ES3.0+, 16 bit floats are texture-filterable.
     // Don't bother with 32 bit floats; they exist but are neither CR nor TF.
     {GL_R16F,                GL_RED,             T_FL,  F_F16 | F_TF | F_ES3},
     {GL_RG16F,               GL_RG,              T_FL,  F_F16 | F_TF | F_ES3},
+#if !defined(__APPLE__) || MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
     {GL_RGB16F,              GL_RGB,             T_FL,  F_F16 | F_TF | F_ES3},
     {GL_RGBA16F,             GL_RGBA,            T_FL,  F_F16 | F_TF | F_ES3},
+#else
+    {GL_RGB16F_ARB,          GL_RGB,             T_FL,  F_F16 | F_TF | F_ES3},
+    {GL_RGBA16F_ARB,         GL_RGBA,            T_FL,  F_F16 | F_TF | F_ES3},
+#endif
 
     // These might be useful as FBO formats.
     {GL_RGB10_A2,            GL_RGBA,
@@ -213,10 +248,19 @@ int gl_format_type(const struct gl_forma
 GLenum gl_integer_format_to_base(GLenum format)
 {
     switch (format) {
+#if !defined(__APPLE__) || MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
     case GL_RED_INTEGER:        return GL_RED;
+#else
+    case GL_RED_INTEGER_EXT:    return GL_RED;
+#endif
     case GL_RG_INTEGER:         return GL_RG;
+#if !defined(__APPLE__) || MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
     case GL_RGB_INTEGER:        return GL_RGB;
     case GL_RGBA_INTEGER:       return GL_RGBA;
+#else
+    case GL_RGB_INTEGER_EXT:    return GL_RGB;
+    case GL_RGBA_INTEGER_EXT:   return GL_RGBA;
+#endif
     }
     return 0;
 }
@@ -239,7 +283,11 @@ int gl_format_components(GLenum format)
 {
     switch (format) {
     case GL_RED:
+#if !defined(__APPLE__) || MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
     case GL_RED_INTEGER:
+#else
+    case GL_RED_INTEGER_EXT:
+#endif
     case GL_LUMINANCE:
         return 1;
     case GL_RG:
@@ -247,10 +295,18 @@ int gl_format_components(GLenum format)
     case GL_LUMINANCE_ALPHA:
         return 2;
     case GL_RGB:
+#if !defined(__APPLE__) || MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
     case GL_RGB_INTEGER:
+#else
+    case GL_RGB_INTEGER_EXT:
+#endif
         return 3;
     case GL_RGBA:
+#if !defined(__APPLE__) || MAC_OS_X_VERSION_MAX_ALLOWED >= 1070
     case GL_RGBA_INTEGER:
+#else
+    case GL_RGBA_INTEGER_EXT:
+#endif
         return 4;
     }
     return 0;
