summaryrefslogtreecommitdiffstats
path: root/video/out/opengl/context_cocoa.c
diff options
context:
space:
mode:
Diffstat (limited to 'video/out/opengl/context_cocoa.c')
-rw-r--r--video/out/opengl/context_cocoa.c223
1 files changed, 0 insertions, 223 deletions
diff --git a/video/out/opengl/context_cocoa.c b/video/out/opengl/context_cocoa.c
deleted file mode 100644
index d0fcd63d62..0000000000
--- a/video/out/opengl/context_cocoa.c
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * This file is part of mpv.
- *
- * mpv is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * mpv is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with mpv. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <OpenGL/OpenGL.h>
-#include <dlfcn.h>
-#include "options/m_config.h"
-#include "video/out/cocoa_common.h"
-#include "context.h"
-#include "osdep/macosx_application.h"
-
-struct cocoa_opts {
-};
-
-#define OPT_BASE_STRUCT struct cocoa_opts
-const struct m_sub_options cocoa_conf = {
- .opts = (const struct m_option[]) {
- OPT_REPLACED("cocoa-force-dedicated-gpu", "macos-force-dedicated-gpu"),
- {0}
- },
- .size = sizeof(struct cocoa_opts),
-};
-
-struct priv {
- GL gl;
- void (GLAPIENTRY *Flush)(void);
- CGLPixelFormatObj pix;
- CGLContextObj ctx;
-
- struct cocoa_opts *opts;
- struct macos_opts *macos_opts;
-};
-
-static int set_swap_interval(int enabled)
-{
- CGLContextObj ctx = CGLGetCurrentContext();
- CGLError err = CGLSetParameter(ctx, kCGLCPSwapInterval, &enabled);
- return (err == kCGLNoError) ? 0 : -1;
-}
-
-static void glFlushDummy(void) { }
-
-static void *cocoa_glgetaddr(const char *s)
-{
- void *ret = NULL;
- void *handle = dlopen(
- "/System/Library/Frameworks/OpenGL.framework/OpenGL",
- RTLD_LAZY | RTLD_LOCAL);
- if (!handle)
- return NULL;
- ret = dlsym(handle, s);
- dlclose(handle);
- return ret;
-}
-
-static CGLError test_gl_version(struct ra_ctx *ctx, CGLOpenGLProfile ver)
-{
- struct priv *p = ctx->priv;
-
- CGLPixelFormatAttribute attrs[] = {
- // let this array ordered by the inverse order of the most probably
- // rejected attribute to preserve the fallback code
- kCGLPFAOpenGLProfile,
- (CGLPixelFormatAttribute) ver,
- kCGLPFAAccelerated,
- kCGLPFAAllowOfflineRenderers,
- // keep this one last to apply the cocoa-force-dedicated-gpu option
- kCGLPFASupportsAutomaticGraphicsSwitching,
- 0
- };
-
- GLint npix;
- CGLError err;
- int supported_attribute = MP_ARRAY_SIZE(attrs)-1;
-
- if (p->macos_opts->macos_force_dedicated_gpu)
- attrs[--supported_attribute] = 0;
-
- err = CGLChoosePixelFormat(attrs, &p->pix, &npix);
- while (err == kCGLBadAttribute && supported_attribute > 3) {
- // kCGLPFASupportsAutomaticGraphicsSwitching is probably not
- // supported by the current hardware. Falling back to not using
- // it and disallowing Offline Renderers if further restrictions
- // apply
- attrs[--supported_attribute] = 0;
- err = CGLChoosePixelFormat(attrs, &p->pix, &npix);
- }
-
- if (err != kCGLNoError) {
- MP_ERR(ctx->vo, "error creating CGL pixel format: %s (%d)\n",
- CGLErrorString(err), err);
- goto error_out;
- }
-
- err = CGLCreateContext(p->pix, 0, &p->ctx);
-
-error_out:
- return err;
-}
-
-static bool create_gl_context(struct ra_ctx *ctx)
-{
- struct priv *p = ctx->priv;
- GL *gl = &p->gl;
- 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(ctx, gl_versions[n]);
- if (err == kCGLNoError)
- break;
- }
-
- if (err != kCGLNoError) {
- MP_FATAL(ctx->vo, "error creating CGL context: %s (%d)\n",
- CGLErrorString(err), err);
- return false;
- }
-
- vo_cocoa_set_opengl_ctx(ctx->vo, p->ctx);
- CGLSetCurrentContext(p->ctx);
-
- if (ctx->opts.want_alpha)
- CGLSetParameter(p->ctx, kCGLCPSurfaceOpacity, &(GLint){0});
-
- mpgl_load_functions(gl, (void *)cocoa_glgetaddr, NULL, ctx->vo->log);
- gl->SwapInterval = set_swap_interval;
- p->Flush = gl->Flush;
- gl->Flush = glFlushDummy;
-
- CGLReleasePixelFormat(p->pix);
-
- return true;
-}
-
-static void cocoa_uninit(struct ra_ctx *ctx)
-{
- struct priv *p = ctx->priv;
- ra_gl_ctx_uninit(ctx);
- CGLReleaseContext(p->ctx);
- vo_cocoa_uninit(ctx->vo);
-}
-
-static void cocoa_swap_buffers(struct ra_ctx *ctx)
-{
- struct priv *p = ctx->priv;
- vo_cocoa_swap_buffers(ctx->vo);
- p->Flush();
-}
-
-static bool cocoa_init(struct ra_ctx *ctx)
-{
- struct priv *p = ctx->priv = talloc_zero(ctx, struct priv);
- GL *gl = &p->gl;
- p->opts = mp_get_config_group(ctx, ctx->global, &cocoa_conf);
- p->macos_opts = mp_get_config_group(ctx, ctx->global, &macos_conf);
- vo_cocoa_init(ctx->vo);
-
- MP_WARN(ctx->vo, "opengl cocoa backend is deprecated, use vo=libmpv instead\n");
-
- if (!create_gl_context(ctx))
- goto fail;
-
- struct ra_gl_ctx_params params = {
- .swap_buffers = cocoa_swap_buffers,
- };
-
- if (!ra_gl_ctx_init(ctx, gl, params))
- goto fail;
-
- return true;
-
-fail:
- cocoa_uninit(ctx);
- return false;
-}
-
-static void resize(struct ra_ctx *ctx)
-{
- ra_gl_ctx_resize(ctx->swapchain, ctx->vo->dwidth, ctx->vo->dheight, 0);
-}
-
-static bool cocoa_reconfig(struct ra_ctx *ctx)
-{
- vo_cocoa_config_window(ctx->vo);
- resize(ctx);
- return true;
-}
-
-static int cocoa_control(struct ra_ctx *ctx, int *events, int request,
- void *arg)
-{
- int ret = vo_cocoa_control(ctx->vo, events, request, arg);
- if (*events & VO_EVENT_RESIZE)
- resize(ctx);
- return ret;
-}
-
-const struct ra_ctx_fns ra_ctx_cocoa = {
- .type = "opengl",
- .name = "cocoa",
- .init = cocoa_init,
- .reconfig = cocoa_reconfig,
- .control = cocoa_control,
- .uninit = cocoa_uninit,
-};