evas-gl_cocoa: fix crashes at engine startup

Recently, the gl_cocoa engine started to crash at
startup. glGetIntegerv() in gl_common was called
without any gl context, and therefore segfaulted.

We now make sure it is called after a gl context
has been created and used.

Thanks jpeg for troubleshooting.

Fixes T4402
This commit is contained in:
Jean Guyomarc'h 2016-08-22 19:52:49 +02:00 committed by Jean Guyomarc'h
parent a71b688b10
commit 84679d3173
3 changed files with 11 additions and 7 deletions

View File

@ -1304,12 +1304,6 @@ eng_image_load_error_get(void *data EINA_UNUSED, void *image)
return im->im->cache_entry.load_error;
}
static void *
_dlsym(const char *sym)
{
return dlsym(RTLD_DEFAULT, sym);
}
static int
module_open(Evas_Module *em)
{
@ -1396,7 +1390,6 @@ module_open(Evas_Module *em)
glsym_##sym = dlsym(RTLD_DEFAULT, #sym);
LINK2GENERIC(evas_gl_symbols);
glsym_evas_gl_symbols(_dlsym);
/* now advertise out own api */
em->functions = (void *)(&func);

View File

@ -10,6 +10,8 @@
#include "evas_gl_common.h"
#include "Evas_Engine_GL_Cocoa.h"
extern Evas_Gl_Symbols glsym_evas_gl_symbols;
extern int _evas_engine_gl_cocoa_log_dom;
#ifdef ERR

View File

@ -1,4 +1,5 @@
#include <Cocoa/Cocoa.h>
#include <dlfcn.h>
#include "evas_engine.h"
@ -76,6 +77,12 @@ static NSOpenGLContext *_evas_gl_cocoa_shared_context = NULL;
@end
static void *
_dlsym(const char *sym)
{
return dlsym(RTLD_DEFAULT, sym);
}
Evas_GL_Cocoa_Window *
eng_window_new(void *window,
@ -92,6 +99,8 @@ eng_window_new(void *window,
gw->view = [[EvasGLView alloc] initWithFrame:NSMakeRect(0,0,w,h)];
NSOpenGLContext *ctx = [(NSOpenGLView*)gw->view openGLContext];
[ctx makeCurrentContext];
glsym_evas_gl_symbols(_dlsym);
gw->gl_context = evas_gl_common_context_new();
if (!gw->gl_context)