summaryrefslogtreecommitdiffstats
path: root/video/out/gl_cocoa.c
diff options
context:
space:
mode:
authorNiklas Haas <git@nand.wakku.to>2015-08-29 01:10:30 +0200
committerwm4 <wm4@nowhere>2015-09-09 18:09:25 +0200
commitdeebc55014074fef121c1df6b117e9c0bf97d516 (patch)
treea69b532d4e17dd8ecf03ecec94cbfb74f2696620 /video/out/gl_cocoa.c
parent944fa1214a14baf24f629f41ce6c05965028ae1a (diff)
downloadmpv-deebc55014074fef121c1df6b117e9c0bf97d516.tar.bz2
mpv-deebc55014074fef121c1df6b117e9c0bf97d516.tar.xz
vo_opengl: move gl_* files to their own subdir
This is mainly just to keep things a bit more organized and separated inside the codebase.
Diffstat (limited to 'video/out/gl_cocoa.c')
-rw-r--r--video/out/gl_cocoa.c171
1 files changed, 0 insertions, 171 deletions
diff --git a/video/out/gl_cocoa.c b/video/out/gl_cocoa.c
deleted file mode 100644
index d04983ee50..0000000000
--- a/video/out/gl_cocoa.c
+++ /dev/null
@@ -1,171 +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 General Public License as published by
- * the Free Software Foundation; either version 2 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with mpv. If not, see <http://www.gnu.org/licenses/>.
- *
- * You can alternatively redistribute this file 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.
- */
-
-#include <OpenGL/OpenGL.h>
-#include <dlfcn.h>
-#include "cocoa_common.h"
-#include "osdep/macosx_versions.h"
-#include "gl_common.h"
-
-struct cgl_context {
- CGLPixelFormatObj pix;
- CGLContextObj ctx;
-};
-
-static int set_swap_interval(int enabled)
-{
- CGLContextObj ctx = CGLGetCurrentContext();
- CGLError err = CGLSetParameter(ctx, kCGLCPSwapInterval, &enabled);
- return (err == kCGLNoError) ? 0 : -1;
-}
-
-static int cgl_color_size(struct MPGLContext *ctx)
-{
- struct cgl_context *p = ctx->priv;
- GLint value;
- CGLDescribePixelFormat(p->pix, 0, kCGLPFAColorSize, &value);
- return value > 16 ? 8 : 5;
-}
-
-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 vo *vo,
- CGLContextObj *ctx,
- CGLPixelFormatObj *pix,
- CGLOpenGLProfile version)
-{
- CGLPixelFormatAttribute attrs[] = {
- kCGLPFAOpenGLProfile,
- (CGLPixelFormatAttribute) version,
- kCGLPFADoubleBuffer,
- kCGLPFAAccelerated,
- #if MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_8
- // leave this as the last entry of the array to not break the fallback
- // code
- kCGLPFASupportsAutomaticGraphicsSwitching,
- #endif
- 0
- };
-
- GLint 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.
- attrs[MP_ARRAY_SIZE(attrs) - 2] = 0;
- err = CGLChoosePixelFormat(attrs, pix, &npix);
- }
-
- if (err != kCGLNoError) {
- MP_ERR(vo, "error creating CGL pixel format: %s (%d)\n",
- CGLErrorString(err), err);
- goto error_out;
- }
-
- err = CGLCreateContext(*pix, 0, ctx);
-
-error_out:
- 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(ctx->vo, &p->ctx, &p->pix, 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);
-
- ctx->depth_r = ctx->depth_g = ctx->depth_b = cgl_color_size(ctx);
- mpgl_load_functions(ctx->gl, (void *)cocoa_glgetaddr, NULL, ctx->vo->log);
-
- CGLReleasePixelFormat(p->pix);
-
- return true;
-}
-
-static bool config_window_cocoa(struct MPGLContext *ctx, int flags)
-{
- struct cgl_context *p = ctx->priv;
-
- if (p->ctx == NULL)
- if (!create_gl_context(ctx))
- return false;
-
- if (!ctx->gl->SwapInterval)
- ctx->gl->SwapInterval = set_swap_interval;
-
- vo_cocoa_config_window(ctx->vo, flags);
-
- return true;
-}
-
-static void releaseGlContext_cocoa(MPGLContext *ctx)
-{
- struct cgl_context *p = ctx->priv;
- CGLReleaseContext(p->ctx);
-}
-
-static void swapGlBuffers_cocoa(MPGLContext *ctx)
-{
- vo_cocoa_swap_buffers(ctx->vo);
-}
-
-void mpgl_set_backend_cocoa(MPGLContext *ctx)
-{
- ctx->priv = talloc_zero(ctx, struct cgl_context);
- ctx->config_window = config_window_cocoa;
- ctx->releaseGlContext = releaseGlContext_cocoa;
- ctx->swapGlBuffers = swapGlBuffers_cocoa;
- ctx->vo_init = vo_cocoa_init;
- ctx->vo_uninit = vo_cocoa_uninit;
- ctx->vo_control = vo_cocoa_control;
-}