evas: use a shared OpenGL context in gl_cocoa backend.
Evas GL backend uses a global OpenGL context for all windows inside an application. Each window has its own texture to render its content. We use a singleton NSOpenGLContext shared between all NSOpenGLView, it solves rendering issues for multiple windows. Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
This commit is contained in:
parent
422178b216
commit
c80d7adbc2
|
@ -4,6 +4,7 @@
|
||||||
#include "evas_engine.h"
|
#include "evas_engine.h"
|
||||||
|
|
||||||
static Evas_GL_Cocoa_Window *_evas_gl_cocoa_window = NULL;
|
static Evas_GL_Cocoa_Window *_evas_gl_cocoa_window = NULL;
|
||||||
|
static NSOpenGLContext *_evas_gl_cocoa_shared_context = NULL;
|
||||||
|
|
||||||
@interface EvasGLView : NSOpenGLView
|
@interface EvasGLView : NSOpenGLView
|
||||||
{
|
{
|
||||||
|
@ -43,6 +44,18 @@ static Evas_GL_Cocoa_Window *_evas_gl_cocoa_window = NULL;
|
||||||
{
|
{
|
||||||
NSOpenGLPixelFormat * pf = [EvasGLView basicPixelFormat];
|
NSOpenGLPixelFormat * pf = [EvasGLView basicPixelFormat];
|
||||||
self = [super initWithFrame: frameRect pixelFormat: pf];
|
self = [super initWithFrame: frameRect pixelFormat: pf];
|
||||||
|
|
||||||
|
|
||||||
|
NSOpenGLContext *ctx;
|
||||||
|
if (!_evas_gl_cocoa_shared_context) {
|
||||||
|
_evas_gl_cocoa_shared_context = [[NSOpenGLContext alloc] initWithFormat: [EvasGLView basicPixelFormat] shareContext: nil];
|
||||||
|
ctx = _evas_gl_cocoa_shared_context;
|
||||||
|
} else {
|
||||||
|
ctx = [[NSOpenGLContext alloc] initWithFormat: [EvasGLView basicPixelFormat] shareContext: _evas_gl_cocoa_shared_context];
|
||||||
|
}
|
||||||
|
[self setOpenGLContext: ctx];
|
||||||
|
[ctx setView: self];
|
||||||
|
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,4 +140,3 @@ eng_window_resize(Evas_GL_Cocoa_Window *gw, int width, int height)
|
||||||
[(EvasGLView*)gw->view setFrame:view_frame];
|
[(EvasGLView*)gw->view setFrame:view_frame];
|
||||||
[[(NSOpenGLView*)gw->view openGLContext] flushBuffer];
|
[[(NSOpenGLView*)gw->view openGLContext] flushBuffer];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue