From: Wonsik Jung Date: Mon, 1 Jul 2019 05:22:37 +0000 (+0900) Subject: [Tizen] Use OpenGL es 2.0 if eglCreateContext is fail, Prevent glFinish without makeC... X-Git-Tag: accepted/tizen/unified/20190701.111718~4 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git;a=commitdiff_plain;h=42f3204bda7eb518d520bc139e12e5150a713cd4 [Tizen] Use OpenGL es 2.0 if eglCreateContext is fail, Prevent glFinish without makeCurrent, Remove ifdef ARM in ChooseConfig This reverts commit bec086b627c3759766812e06cf8c8199a0c089a1. --- 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 1cd3520..d27fc94 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; }