From 1d0bd69296bf4b5e7f4c5662d512dfca4b67344f Mon Sep 17 00:00:00 2001 From: Sukwon Suh Date: Tue, 7 May 2013 16:21:14 +0900 Subject: [PATCH] enable native_surface_set for SW backend Change-Id: Ibb21109ccef95351fb0e46fe5247d3ce9b7c5f22 Signed-off-by: Sukwon Suh --- src/graphics/opengl/FGrpEgl.cpp | 122 +++++++++++++++++----------------------- 1 file changed, 53 insertions(+), 69 deletions(-) diff --git a/src/graphics/opengl/FGrpEgl.cpp b/src/graphics/opengl/FGrpEgl.cpp index 572c514..652da3d 100644 --- a/src/graphics/opengl/FGrpEgl.cpp +++ b/src/graphics/opengl/FGrpEgl.cpp @@ -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); } } -- 2.7.4