} // namespace
Ecore_Evas* prepared_ee = nullptr;
+Ecore_Evas* dummy_hw_ee = nullptr;
#if BUILDFLAG(IS_TIZEN_TV)
bool EflWindow::is_cursor_initialized_ = false;
// static
Ecore_Evas* EflWindow::CreateEvasObject(const gfx::Rect& bounds) {
#if defined(USE_WAYLAND)
- return ecore_evas_new("wayland_egl", 0, 0, bounds.width(), bounds.height(),
+ return ecore_evas_new("wayland_shm", 0, 0, bounds.width(), bounds.height(),
nullptr);
#else
return ecore_evas_new("opengl_x11", 0, 0, bounds.width(), bounds.height(),
if (ee_)
ecore_evas_free(ee_);
+ if (dummy_hw_ee) {
+ ecore_evas_free(dummy_hw_ee);
+ dummy_hw_ee = nullptr;
+ }
+
#if defined(TIZEN_VIDEO_HOLE)
media::VideoPlaneController::SetSharedVideoWindowHandle(
nullptr, media::VideoPlaneController::RenderingMode::ONSCREEN);
}
}
+ // In the case of onscreen rendering, if Evas engine creates an egl window
+ // then two egl windows will be created overall and it causes the egl
+ // specification violation. So we use sw backend for main window rendering.
+ // In the case of a Popup, it appears as a separate HW window. When this
+ // Popup is closed, |eglTerminate| is called within the Evas engine. (When
+ // the last window is released, the EGL resources are freed in the Evas
+ // engine.) This will release all EGL resources for the entire process and it
+ // causes rendering issue. To prevent this, creates dummy hw window.
+ if (!dummy_hw_ee) {
+ dummy_hw_ee = ecore_evas_new("wayland_egl", 0, 0, 1, 1, nullptr);
+ }
+
evas_ = ecore_evas_get(ee_);
// Evas engine creates it's own egl window and egl surface to render.