fix bugs about checkging duplicate in eglMakeCurrent
authorSukwon Suh <sukwon.suh@samsung.com>
Fri, 24 May 2013 02:50:58 +0000 (11:50 +0900)
committerSukwon Suh <sukwon.suh@samsung.com>
Fri, 24 May 2013 02:50:58 +0000 (11:50 +0900)
Change-Id: I10aad7edef276aab77fa85bcf14af2a024b40ee1
Signed-off-by: Sukwon Suh <sukwon.suh@samsung.com>
src/graphics/opengl/FGrpEgl.cpp

index a2a72c3..2e1ab3a 100644 (file)
@@ -127,7 +127,8 @@ void _SaveCurrentContext(_SglInfo* pSglInfo);
 void _UnregisterRenderCallback(Evas_Object* pObject);
 int __registerCallbackCount = 0;
 _SglInfo* __pPreviousSglInfo = null;
-EGLSurface __pPreviousMakeCurrent = EGL_NO_SURFACE;
+EGLSurface __pPreviousSurface = EGL_NO_SURFACE;
+EGLSurface __pPreviousContext = EGL_NO_CONTEXT;
 #endif
 
 #if !defined (_OSP_EMUL_)
@@ -346,9 +347,9 @@ _OnBoundsChanged(void* pData)
        EGLSurface readSurface = _SglGetCurrentSurface(EGL_READ);
        EGLSurface eglContext = eglGetCurrentContext();
 
-       if (__pPreviousMakeCurrent == drawSurface)
+       if (__pPreviousSurface == drawSurface)
        {
-               __pPreviousMakeCurrent = EGL_NO_SURFACE;
+               __pPreviousSurface = EGL_NO_SURFACE;
        }
 
        if (drawSurface != EGL_NO_SURFACE && readSurface != EGL_NO_SURFACE)
@@ -868,7 +869,7 @@ _SaveCurrentContext(_SglInfo* pSglInfo)
 void
 _RegisterRenderCallback(Evas_Object* pObject)
 {
-       if (pObject != null)
+       if (__evasEngineType == ENGINE_TYPE_OPENGL_X11 && pObject != null)
        {
                if (__registerCallbackCount == 0)
                {
@@ -893,7 +894,7 @@ _RegisterRenderCallback(Evas_Object* pObject)
 void
 _UnregisterRenderCallback(Evas_Object* pObject)
 {
-       if (pObject != null)
+       if (__evasEngineType == ENGINE_TYPE_OPENGL_X11 && pObject != null)
        {
                __registerCallbackCount--;
 
@@ -965,6 +966,8 @@ _SglTerminate(EGLDisplay dpy)
        __pPreviousSglInfo = null;
 #endif
 
+       __pPreviousSurface = EGL_NO_SURFACE;
+       __pPreviousContext = EGL_NO_CONTEXT;
 
        return EGL_TRUE;
 }
@@ -1666,9 +1669,9 @@ CATCH_01:
 EGLBoolean
 _SglDestroySurface(EGLDisplay dpy, EGLSurface surface)
 {
-       if (__pPreviousMakeCurrent == surface)
+       if (__pPreviousSurface == surface)
        {
-               __pPreviousMakeCurrent = EGL_NO_SURFACE;
+               __pPreviousSurface = EGL_NO_SURFACE;
        }
 
        EGLBoolean ret = EGL_FALSE;
@@ -1872,17 +1875,23 @@ _SglCreateContext(EGLDisplay dpy, EGLConfig config, EGLContext shareContext, con
 EGLBoolean
 _SglDestroyContext(EGLDisplay dpy, EGLContext ctx)
 {
+       if (__pPreviousContext == ctx)
+       {
+               __pPreviousContext = EGL_NO_CONTEXT;
+       }
+
        return eglDestroyContext(dpy, ctx);
 }
 
 EGLBoolean
 _SglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx)
 {
-       if (__pPreviousMakeCurrent == draw)
+       if (__pPreviousSurface == draw && __pPreviousContext == ctx)
        {
                return EGL_TRUE;
        }
-       __pPreviousMakeCurrent = draw;
+       __pPreviousSurface = draw;
+       __pPreviousContext = ctx;
 
        _SglInfoTableManipulator* pSglInfoTableManipulatorInstance = _SglInfoTableManipulator::GetInstance();