enable native_surface_set for SW backend
authorSukwon Suh <sukwon.suh@samsung.com>
Tue, 7 May 2013 07:21:14 +0000 (16:21 +0900)
committerSukwon Suh <sukwon.suh@samsung.com>
Tue, 7 May 2013 07:21:14 +0000 (16:21 +0900)
Change-Id: Ibb21109ccef95351fb0e46fe5247d3ce9b7c5f22
Signed-off-by: Sukwon Suh <sukwon.suh@samsung.com>
src/graphics/opengl/FGrpEgl.cpp

index 572c514..652da3d 100644 (file)
@@ -431,6 +431,10 @@ _OnBoundsChanged(void* pData)
        pSglInfo->pBitmap = bitmap.release();
        _EvasObjectImageChange(pSglInfo);
 
+       BufferInfo bufferInfo;
+       pSglInfo->pBitmap->Lock(bufferInfo);
+       pSglInfo->pBitmap->Unlock();
+
        if (needSglMakeCurrent)
        {
                _SglMakeCurrent(eglDisplay, drawSurface, readSurface, eglContext);
@@ -734,33 +738,23 @@ _IsEvasGlEnabled(void)
 void
 _EvasObjectImageChange(_SglInfo* pSglInfo)
 {
-       if (isEvasNativeSetEnabled)
+       Evas* pEvas = evas_object_evas_get(pSglInfo->pObject);
+       if (pEvas == null)
        {
-               Evas* pEvas = evas_object_evas_get(pSglInfo->pObject);
-               if (pEvas == null)
-               {
-                       return;
-               }
-
-               Evas_Engine_Info_GL_X11* pEvasInfo = (Evas_Engine_Info_GL_X11 *)evas_engine_info_get(pEvas);
-               if (pEvasInfo == null)
-               {
-                       return;
-               }
-               Evas_Native_Surface nativeSurface = {0, };
-               nativeSurface.type = EVAS_NATIVE_SURFACE_X11;
-               nativeSurface.version = EVAS_NATIVE_SURFACE_VERSION;
-               nativeSurface.data.x11.pixmap = (unsigned long)pSglInfo->nativePixmap;
-               nativeSurface.data.x11.visual = pEvasInfo->info.visual;
-               evas_object_image_native_surface_set(pSglInfo->pObject, &nativeSurface);
+               return;
        }
-       else
+
+       Evas_Engine_Info_GL_X11* pEvasInfo = (Evas_Engine_Info_GL_X11 *)evas_engine_info_get(pEvas);
+       if (pEvasInfo == null)
        {
-               BufferInfo bufferInfo;
-               pSglInfo->pBitmap->Lock(bufferInfo);
-               evas_object_image_data_set(pSglInfo->pObject, bufferInfo.pPixels);
-               pSglInfo->pBitmap->Unlock();
+               return;
        }
+       Evas_Native_Surface nativeSurface = {0, };
+       nativeSurface.type = EVAS_NATIVE_SURFACE_X11;
+       nativeSurface.version = EVAS_NATIVE_SURFACE_VERSION;
+       nativeSurface.data.x11.pixmap = (unsigned long)pSglInfo->nativePixmap;
+       nativeSurface.data.x11.visual = pEvasInfo->info.visual;
+       evas_object_image_native_surface_set(pSglInfo->pObject, &nativeSurface);
 }
 
 #if defined(FGRAPHICS_INTERNAL_USE_RESTORE_CONTEXT)
@@ -1982,63 +1976,53 @@ _SglSwapBuffers(EGLDisplay dpy, EGLSurface surface)
                }
 #endif
 
-               if (isEvasNativeSetEnabled)
+               if (isDoublePixmapEnabled && pSglInfo->pSecondSglInfo != null)
                {
-                       if (isDoublePixmapEnabled && pSglInfo->pSecondSglInfo != null)
+                       if (pSglInfo->swapDone || pSglInfo->pSecondSglInfo->swapDone)
                        {
-                               if (pSglInfo->swapDone || pSglInfo->pSecondSglInfo->swapDone)
+                               _SglInfo* pBackSglInfo = null;
+                               _SglInfo* pFrontSglInfo = null;
+
+                               if (pSglInfo->isBackbuffer)
                                {
-                                       _SglInfo* pBackSglInfo = null;
-                                       _SglInfo* pFrontSglInfo = null;
-
-                                       if (pSglInfo->isBackbuffer)
-                                       {
-                                               pBackSglInfo = pSglInfo;
-                                               pFrontSglInfo = pSglInfo->pSecondSglInfo;
-                                       }
-                                       else
-                                       {
-                                               pBackSglInfo = pSglInfo->pSecondSglInfo;
-                                               pFrontSglInfo = pSglInfo;
-                                       }
-                                       pBackSglInfo->isBackbuffer = false;
-                                       pFrontSglInfo->isBackbuffer = true;
-
-                                       pFrontSglInfo->wasShown = false;
-                                       pFrontSglInfo->swapDone = false;
-                                       if (pSglInfo->pVisualElement != null)
-                                       {
-                                               pSglInfo->pVisualElement->SetSurface(pFrontSglInfo->pVisualElementSurface);
-                                       }
-                                       evas_object_image_pixels_dirty_set(pFrontSglInfo->pObject, EINA_TRUE);
-                                       evas_object_hide(pBackSglInfo->pObject);
-
-                                       if (pSglInfo->isFirstSwap)
-                                       {
-                                               pBackSglInfo->isFirstSwap = false;
-                                               pFrontSglInfo->isFirstSwap = false;
-
-                                               eglWaitGL();
-                                               BufferInfo bufferInfo;
-                                               pFrontSglInfo->pBitmap->Lock(bufferInfo);
-                                               pFrontSglInfo->pBitmap->Merge(Point(0, 0), *pBackSglInfo->pBitmap, Rectangle(0, 0, bufferInfo.width, bufferInfo.height));
-                                               pFrontSglInfo->pBitmap->Unlock();
-                                       }
+                                       pBackSglInfo = pSglInfo;
+                                       pFrontSglInfo = pSglInfo->pSecondSglInfo;
                                }
-                       }
-                       else
-                       {
-                               if (pSglInfo->pObject != null)
+                               else
+                               {
+                                       pBackSglInfo = pSglInfo->pSecondSglInfo;
+                                       pFrontSglInfo = pSglInfo;
+                               }
+                               pBackSglInfo->isBackbuffer = false;
+                               pFrontSglInfo->isBackbuffer = true;
+
+                               pFrontSglInfo->wasShown = false;
+                               pFrontSglInfo->swapDone = false;
+                               if (pSglInfo->pVisualElement != null)
+                               {
+                                       pSglInfo->pVisualElement->SetSurface(pFrontSglInfo->pVisualElementSurface);
+                               }
+                               evas_object_image_pixels_dirty_set(pFrontSglInfo->pObject, EINA_TRUE);
+                               evas_object_hide(pBackSglInfo->pObject);
+
+                               if (pSglInfo->isFirstSwap)
                                {
-                                       evas_object_image_pixels_dirty_set(pSglInfo->pObject, EINA_TRUE);
+                                       pBackSglInfo->isFirstSwap = false;
+                                       pFrontSglInfo->isFirstSwap = false;
+
+                                       eglWaitGL();
+                                       BufferInfo bufferInfo;
+                                       pFrontSglInfo->pBitmap->Lock(bufferInfo);
+                                       pFrontSglInfo->pBitmap->Merge(Point(0, 0), *pBackSglInfo->pBitmap, Rectangle(0, 0, bufferInfo.width, bufferInfo.height));
+                                       pFrontSglInfo->pBitmap->Unlock();
                                }
                        }
                }
                else
                {
-                       if (pSglInfo->pVisualElement != null)
+                       if (pSglInfo->pObject != null)
                        {
-                               pSglInfo->pVisualElement->SetFlushNeeded();
+                               evas_object_image_pixels_dirty_set(pSglInfo->pObject, EINA_TRUE);
                        }
                }