1
mirror of https://github.com/mpv-player/mpv synced 2024-11-14 22:48:35 +01:00

cocoa_common, gl_common: add OSX specific getProcAddress

Run dlopen on the OpenGL dynamic library instead of on the binary.
This should prevent crashes due to function conflicts when X11/lGL is
linked.

Remove mutual exclusion of the X11 and Cocoa backends.
This commit is contained in:
Stefano Pigozzi 2012-04-14 15:02:28 +02:00 committed by Uoti Urpala
parent 86790494d3
commit d3da92aea4
4 changed files with 18 additions and 2 deletions

2
configure vendored
View File

@ -4544,7 +4544,7 @@ int main(int argc, char *argv[]) {
EOF
_gl=no
for _ld_tmp in "" -lGL "-lGL -lXdamage" "-lGL $_ld_pthread" ; do
if test "$_cocoa" != yes && cc_check $_ld_tmp $_ld_lm ; then
if cc_check $_ld_tmp $_ld_lm ; then
_gl=yes
_gl_x11=yes
libs_mplayer="$libs_mplayer $_ld_tmp $_ld_dl"

View File

@ -23,6 +23,7 @@
#include "video_out.h"
bool vo_cocoa_gui_running(void);
void *vo_cocoa_glgetaddr(const char *s);
int vo_cocoa_init(struct vo *vo);
void vo_cocoa_uninit(struct vo *vo);

View File

@ -21,6 +21,8 @@
#import <OpenGL/OpenGL.h>
#import <QuartzCore/QuartzCore.h>
#import <CoreServices/CoreServices.h> // for CGDisplayHideCursor
#include <dlfcn.h>
#include "cocoa_common.h"
#include "options.h"
@ -117,6 +119,19 @@ bool vo_cocoa_gui_running(void)
return !!s;
}
void *vo_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;
}
int vo_cocoa_init(struct vo *vo)
{
s = vo_cocoa_init_state();

View File

@ -1628,7 +1628,7 @@ static int create_window_cocoa(struct MPGLContext *ctx, uint32_t d_width,
static int setGlWindow_cocoa(MPGLContext *ctx)
{
vo_cocoa_change_attributes(ctx->vo);
getFunctions(ctx->gl, (void *)getdladdr, NULL);
getFunctions(ctx->gl, (void *)vo_cocoa_glgetaddr, NULL);
if (!ctx->gl->SwapInterval)
ctx->gl->SwapInterval = vo_cocoa_swap_interval;
return SET_WINDOW_OK;