From 02a0b6a8425ee880dcf8e8a4d5dd5b6d79c38fe4 Mon Sep 17 00:00:00 2001 From: "Seungho, Baek" Date: Wed, 12 Jun 2019 17:12:13 +0900 Subject: [PATCH] [Tizen] Use OpenGL es 2.0 if eglCreateContext is fail, Prevent glFinish without makeCurrent, Remove ifdef ARM in ChooseConfig - If eglChooseConfig is passed but eglCreateContext is failed, than retry them with OpenGL es 2.0 - Without any Current Context, do not call glFinish - Remove ARM condition in the ChooseConfig Change-Id: I27cf679943694f91329454e63441a100ab04e706 Signed-off-by: Seungho, Baek --- .../common/combined-update-render-controller.cpp | 14 ++++++++++- dali/internal/graphics/gles/egl-implementation.cpp | 27 ++++++++++++++++------ 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/dali/internal/adaptor/common/combined-update-render-controller.cpp b/dali/internal/adaptor/common/combined-update-render-controller.cpp index 4486766..2185ed8 100644 --- a/dali/internal/adaptor/common/combined-update-render-controller.cpp +++ b/dali/internal/adaptor/common/combined-update-render-controller.cpp @@ -445,6 +445,15 @@ void CombinedUpdateRenderController::UpdateRenderThread() eglGraphics->SetGlesVersion( 20 ); eglImpl.ChooseConfig( true, COLOR_DEPTH_32 ); } + else + { + if( !eglImpl.CreateContext() ) + { + // Retry to use OpenGL es 2.0 + eglGraphics->SetGlesVersion( 20 ); + eglImpl.ChooseConfig( true, COLOR_DEPTH_32 ); + } + } // Check whether surfaceless context is supported bool isSurfacelessContextSupported = eglImpl.IsSurfacelessContextSupported(); @@ -453,7 +462,10 @@ void CombinedUpdateRenderController::UpdateRenderThread() if ( isSurfacelessContextSupported ) { // Create a surfaceless OpenGL context for shared resources - eglImpl.CreateContext(); + if( eglImpl.GetContext() == 0 ) + { + eglImpl.CreateContext(); + } eglImpl.MakeContextCurrent( EGL_NO_SURFACE, eglImpl.GetContext() ); } else diff --git a/dali/internal/graphics/gles/egl-implementation.cpp b/dali/internal/graphics/gles/egl-implementation.cpp index 2ac0a63..ae7c6bc 100755 --- a/dali/internal/graphics/gles/egl-implementation.cpp +++ b/dali/internal/graphics/gles/egl-implementation.cpp @@ -147,6 +147,17 @@ bool EglImplementation::CreateContext() DALI_ASSERT_ALWAYS( (mEglContext == 0) && "EGL context recreated" ); mEglContext = eglCreateContext(mEglDisplay, mEglConfig, NULL, &(mContextAttribs[0])); + if ( eglGetError() != EGL_SUCCESS ) + { + if( mGlesVersion >= 30 ) + { + eglDestroySurface( mEglDisplay, mEglContext ); + mEglContext = NULL; + mEglConfig = NULL; + DALI_LOG_ERROR("Fail to use OpenGL es 3.0. Retrying to use OpenGL es 2.0."); + return false; + } + } TEST_EGL_ERROR("eglCreateContext render thread"); DALI_ASSERT_ALWAYS( EGL_NO_CONTEXT != mEglContext && "EGL context not created" ); @@ -211,7 +222,10 @@ void EglImplementation::MakeContextCurrent( EGLSurface eglSurface, EGLContext eg if(mIsOwnSurface) { - glFinish(); + if( mCurrentEglContext != EGL_NO_CONTEXT ) + { + glFinish(); + } eglMakeCurrent( mEglDisplay, eglSurface, eglSurface, eglContext ); @@ -240,7 +254,10 @@ void EglImplementation::MakeCurrent( EGLNativePixmapType pixmap, EGLSurface eglS if(mIsOwnSurface) { - glFinish(); + if( mCurrentEglContext != EGL_NO_CONTEXT ) + { + glFinish(); + } eglMakeCurrent( mEglDisplay, eglSurface, eglSurface, mEglContext ); @@ -348,11 +365,7 @@ bool EglImplementation::ChooseConfig( bool isWindowType, ColorDepth depth ) if( mGlesVersion >= 30 ) { -#ifdef _ARCH_ARM_ configAttribs.PushBack( EGL_OPENGL_ES3_BIT_KHR ); -#else - configAttribs.PushBack( EGL_OPENGL_ES2_BIT ); -#endif // _ARCH_ARM_ } else { @@ -399,7 +412,7 @@ bool EglImplementation::ChooseConfig( bool isWindowType, ColorDepth depth ) if( mGlesVersion >= 30 ) { mEglConfig = NULL; - DALI_LOG_ERROR("Fail to use OpenGL es 3.0. Retring to use OpenGL es 2.0."); + DALI_LOG_ERROR("Fail to use OpenGL es 3.0. Retrying to use OpenGL es 2.0."); return false; } -- 2.7.4