#if !defined (_OSP_EMUL_)
#define FGRAPHICS_INTERNAL_USE_DOUBLE_PIXMAP
#endif
-bool isDoublePixmapEnabled = false;
-#define FGRAPHICS_INTERNAL_USE_EVAS_NATIVE_SURFACE
-bool isEvasNativeSetEnabled = false;
+enum _engineType
+{
+ ENGINE_TYPE_SOFEWARE_X11 = 0,
+ ENGINE_TYPE_OPENGL_X11,
+ ENGINE_TYPE_ETC,
+};
+
+_engineType __evasEngineType = ENGINE_TYPE_SOFEWARE_X11;
+bool __isDoublePixmapEnabled = false;
void _OnBoundsChanged(void* pData);
}
#endif
- SysTryReturnVoidResult(NID_GRP, pObject != null, E_OPERATION_FAILED, "Invalid object.");
+ if (pObject == null)
+ {
+ return;
+ }
if (pVisualElement != null)
{
delete pBitmap;
bool needAllocateObject = true;
- if (isEvasNativeSetEnabled)
+ if (__isDoublePixmapEnabled)
{
- if (isDoublePixmapEnabled)
+ if (!isBackbuffer)
{
- if (!isBackbuffer)
- {
- needAllocateObject = false;
- }
+ needAllocateObject = false;
}
}
if (needAllocateObject)
pSglInfo->swapDone = false;
pSglInfo->isFirstSwap = true;
- if (isDoublePixmapEnabled)
+ if (__isDoublePixmapEnabled)
{
_SglInfo* pSglInfoSecond = pSglInfo->pSecondSglInfo;
SysTryReturnVoidResult(NID_GRP, pSglInfoSecond != null, E_INVALID_STATE, "Invalid pSecondSglInfo.");
{
pSglInfo->pVisualElement = null;
- if (isDoublePixmapEnabled && pSglInfo->pSecondSglInfo != null)
+ if (__isDoublePixmapEnabled && pSglInfo->pSecondSglInfo != null)
{
pSglInfo->pSecondSglInfo->pVisualElement = null;
}
}
#endif
-bool
-_IsEvasGlEnabled(void)
+_engineType
+_GetEvasEngineType(Evas_Object* pObject)
{
- const char* pString = elm_config_preferred_engine_get();
- String engineName(pString);
-
- if (engineName.Contains(String("opengl_x11")))
- {
- SysLog(NID_GRP, "gl backend : %s", pString);
- return true;
- }
- else if (engineName.Contains(String("software_x11")))
+ if (pObject == null)
{
- SysLog(NID_GRP, "sw backend : %s", pString);
- return false;
+ const char* pString = elm_config_preferred_engine_get();
+ String engineName(pString);
+ SysLog(NID_GRP, "evas backend : %s", pString);
+
+ if (engineName.Contains(String("opengl_x11")))
+ {
+ return ENGINE_TYPE_OPENGL_X11;
+ }
+ else if (engineName.Contains(String("software_x11")))
+ {
+ return ENGINE_TYPE_SOFEWARE_X11;
+ }
+ else
+ {
+ pString = elm_config_engine_get();
+ String engineName(pString);
+ SysLog(NID_GRP, "system evas backend : %s", pString);
+ if (engineName.Contains(String("opengl_x11")))
+ {
+ return ENGINE_TYPE_OPENGL_X11;
+ }
+ else
+ {
+ return ENGINE_TYPE_SOFEWARE_X11;
+ }
+ }
}
else
{
- pString = elm_config_engine_get();
+ Evas* pEvas = evas_object_evas_get(pObject);
+ if (pEvas == null)
+ {
+ SysLogException(NID_GRP, E_OPERATION_FAILED, "Getting pEvas failed.");
+ return ENGINE_TYPE_SOFEWARE_X11;
+ }
+
+ Ecore_Evas* pEcoreEvas = ecore_evas_ecore_evas_get(pEvas);
+ if (pEcoreEvas == null)
+ {
+ SysLogException(NID_GRP, E_OPERATION_FAILED, "Getting pEcoreEvas failed.");
+ return ENGINE_TYPE_SOFEWARE_X11;
+ }
+
+ const char* pString = ecore_evas_engine_name_get(pEcoreEvas);
String engineName(pString);
+ SysLog(NID_GRP, "evas backend : %s", pString);
+
if (engineName.Contains(String("opengl_x11")))
{
- SysLog(NID_GRP, "system gl backend : %s", pString);
- return true;
+ return ENGINE_TYPE_OPENGL_X11;
+ }
+ else if (engineName.Contains(String("software_x11")))
+ {
+ return ENGINE_TYPE_SOFEWARE_X11;
+ }
+ else
+ {
+ return ENGINE_TYPE_ETC;
}
}
-
- SysLog(NID_GRP, "system sw backend : %s", pString);
- return false;
}
void
_EvasObjectImageChange(_SglInfo* pSglInfo)
{
- Evas* pEvas = evas_object_evas_get(pSglInfo->pObject);
- if (pEvas == null)
+ if(__evasEngineType == ENGINE_TYPE_SOFEWARE_X11 || __evasEngineType == ENGINE_TYPE_OPENGL_X11)
{
- return;
- }
+ Evas* pEvas = evas_object_evas_get(pSglInfo->pObject);
+ if (pEvas == null)
+ {
+ SysLogException(NID_GRP, E_OPERATION_FAILED, "Getting pEvas failed.");
+ return;
+ }
+
+ Evas_Engine_Info_GL_X11* pEvasInfo = (Evas_Engine_Info_GL_X11*)evas_engine_info_get(pEvas);
+ if (pEvasInfo == null)
+ {
+ SysLog(NID_GRP, "Getting evas engine info failed!");
+ return;
+ }
- Evas_Engine_Info_GL_X11* pEvasInfo = (Evas_Engine_Info_GL_X11 *)evas_engine_info_get(pEvas);
- if (pEvasInfo == null)
+ 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);
+ }
+ else
{
- return;
+ BufferInfo bufferInfo;
+ pSglInfo->pBitmap->Lock(bufferInfo);
+ evas_object_image_data_set(pSglInfo->pObject, bufferInfo.pPixels);
+ pSglInfo->pBitmap->Unlock();
}
- 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)
EGLSurface surface = __pPreviousSglInfo->surface;
EGLContext context = __pPreviousSglInfo->context;
- if (isDoublePixmapEnabled)
+ if (__isDoublePixmapEnabled)
{
_SglInfo* pBackSglInfo = null;
_SglInfo* pFrontSglInfo = null;
_SglInfoTableManipulator::GetInstance()->DestroySglInfoTable();
- if (!_IsEvasGlEnabled())
+ if (!__isDoublePixmapEnabled)
{
eglTerminate(dpy);
}
_SglInfoTableManipulator* pSglInfoTableManipulatorInstance = _SglInfoTableManipulator::GetInstance();
#if 0//!defined(_OSP_EMUL_)
- if (pFrame != null && !_IsEvasGlEnabled())
+ if (pFrame != null && _GetEvasEngineType(null) != ENGINE_TYPE_OPENGL_X11)
{
_ControlImpl* pControlImpl = _ControlImpl::GetInstance(*pControl);
_WindowImpl* pWindowImpl = dynamic_cast<_WindowImpl*> (pControlImpl);
{
result r = E_SUCCESS;
-#if defined (FGRAPHICS_INTERNAL_USE_EVAS_NATIVE_SURFACE)
- isEvasNativeSetEnabled = _IsEvasGlEnabled();
-#else
- isEvasNativeSetEnabled = false;
-#endif
-
-#if defined (FGRAPHICS_INTERNAL_USE_DOUBLE_PIXMAP)
- isDoublePixmapEnabled = isEvasNativeSetEnabled;
-#else
- isDoublePixmapEnabled = false;
-#endif
-
if (pVisualElement == null)
{
pVisualElement = pControl->GetVisualElement();
pSglInfo->pVisualElementSurface = pVisualElementSurface;
pSglInfoTableManipulatorInstance->UnlockSglInfoTable();
- if (isDoublePixmapEnabled)
+ __evasEngineType = _GetEvasEngineType(pObject);
+
+#if defined (FGRAPHICS_INTERNAL_USE_DOUBLE_PIXMAP)
+ if (__evasEngineType == ENGINE_TYPE_OPENGL_X11)
+ {
+ __isDoublePixmapEnabled = true;
+ }
+ else
+ {
+ __isDoublePixmapEnabled = false;
+ }
+#else
+ __isDoublePixmapEnabled = false;
+#endif
+
+ if (__isDoublePixmapEnabled)
{
pObject = evas_object_image_filled_add(pEvas);
SysTryReturn(NID_GRP, pObject != null, EGL_NO_SURFACE, E_OPERATION_FAILED, "Invalid object.");
ret = eglDestroySurface(dpy, pSglInfo->surface);
pSglInfoTableManipulatorInstance->UnlockSglInfoTable();
- if (isDoublePixmapEnabled && pSglInfo->pSecondSglInfo != null)
+ if (__isDoublePixmapEnabled && pSglInfo->pSecondSglInfo != null)
{
eglDestroySurface(dpy, pSglInfo->pSecondSglInfo->surface);
pSglInfoTableManipulatorInstance->DestroySglIndex(pSglInfo->pSecondSglInfo->sglIndex);
}
sglInfoReadSurface = sglInfoRead->surface;
- if (isDoublePixmapEnabled && !sglInfoRead->isBackbuffer)
+ if (__isDoublePixmapEnabled && !sglInfoRead->isBackbuffer)
{
sglInfoReadSurface = sglInfoRead->pSecondSglInfo->surface;
}
return eglMakeCurrent(dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, ctx);
}
- if (isDoublePixmapEnabled && !pSglInfoDraw->isBackbuffer && pSglInfoDraw->pSecondSglInfo != null)
+ if (__isDoublePixmapEnabled && !pSglInfoDraw->isBackbuffer && pSglInfoDraw->pSecondSglInfo != null)
{
pSglInfoDraw = pSglInfoDraw->pSecondSglInfo;
}
#if defined(FGRAPHICS_INTERNAL_USE_EGLCOPYBUFFER)
_SglUpdateBufferOSP(dpy, surface);
#else
- if (isEvasNativeSetEnabled)
+ if(__evasEngineType == ENGINE_TYPE_OPENGL_X11)
{
if (pSglInfo->glVersion == 1)
{
}
#endif
- if (isDoublePixmapEnabled && pSglInfo->pSecondSglInfo != null)
+ if(__evasEngineType == ENGINE_TYPE_SOFEWARE_X11 || __evasEngineType == ENGINE_TYPE_OPENGL_X11)
{
- if (pSglInfo->swapDone || pSglInfo->pSecondSglInfo->swapDone)
+ if (__isDoublePixmapEnabled && pSglInfo->pSecondSglInfo != null)
{
- _SglInfo* pBackSglInfo = null;
- _SglInfo* pFrontSglInfo = null;
-
- if (pSglInfo->isBackbuffer)
+ if (pSglInfo->swapDone || pSglInfo->pSecondSglInfo->swapDone)
{
- pBackSglInfo = pSglInfo;
- pFrontSglInfo = pSglInfo->pSecondSglInfo;
+ _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();
+ }
}
- 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)
+ }
+ else
+ {
+ if (pSglInfo->pObject != null)
{
- 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();
+ evas_object_image_pixels_dirty_set(pSglInfo->pObject, EINA_TRUE);
}
}
}
else
{
- if (pSglInfo->pObject != null)
+ if (pSglInfo->pVisualElement != null)
{
- evas_object_image_pixels_dirty_set(pSglInfo->pObject, EINA_TRUE);
+ pSglInfo->pVisualElement->SetFlushNeeded();
}
}
+
pSglInfoTableManipulatorInstance->UnlockSglInfoTable();
return EGL_TRUE;
}