mirror of
https://github.com/mpv-player/mpv
synced 2024-12-23 07:12:39 +00: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:
parent
86790494d3
commit
d3da92aea4
2
configure
vendored
2
configure
vendored
@ -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"
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user