namespace
{
+ const uint32_t CHECK_EXTENSION_NUMBER = 2;
const std::string EGL_KHR_SURFACELESS_CONTEXT = "EGL_KHR_surfaceless_context";
+ const std::string EGL_KHR_CREATE_CONTEXT = "EGL_KHR_create_context";
}
namespace Dali
mIsWindow( true ),
mDepthBufferRequired( depthBufferRequired == Integration::DepthBufferAvailable::TRUE ),
mStencilBufferRequired( stencilBufferRequired == Integration::StencilBufferAvailable::TRUE ),
- mIsSurfacelessContextSupported( false )
+ mIsSurfacelessContextSupported( false ),
+ mIsKhrCreateContextSupported( false )
{
}
// Query EGL extensions to check whether surfaceless context is supported
const char* const extensionStr = eglQueryString( mEglDisplay, EGL_EXTENSIONS );
- std::istringstream stream(extensionStr);
+ std::istringstream stream( extensionStr );
std::string currentExtension;
- while ( std::getline( stream, currentExtension, ' ' ) )
+ uint32_t extensionCheckCount = 0;
+ while( std::getline( stream, currentExtension, ' ' ) || extensionCheckCount < CHECK_EXTENSION_NUMBER )
{
- if ( currentExtension == EGL_KHR_SURFACELESS_CONTEXT )
+ if( currentExtension == EGL_KHR_SURFACELESS_CONTEXT )
{
mIsSurfacelessContextSupported = true;
- break;
+ extensionCheckCount++;
+ }
+ if( currentExtension == EGL_KHR_CREATE_CONTEXT )
+ {
+ mIsKhrCreateContextSupported = true;
+ extensionCheckCount++;
}
}
if(mIsOwnSurface)
{
- glFinish();
+ if( mCurrentEglContext != EGL_NO_CONTEXT )
+ {
+ glFinish();
+ }
eglMakeCurrent( mEglDisplay, eglSurface, eglSurface, eglContext );
if(mIsOwnSurface)
{
- glFinish();
+ if( mCurrentEglContext != EGL_NO_CONTEXT )
+ {
+ glFinish();
+ }
eglMakeCurrent( mEglDisplay, eglSurface, eglSurface, mEglContext );
if( mGlesVersion >= 30 )
{
-#ifdef _ARCH_ARM_
configAttribs.PushBack( EGL_OPENGL_ES3_BIT_KHR );
-#else
- configAttribs.PushBack( EGL_OPENGL_ES2_BIT );
-#endif // _ARCH_ARM_
}
else
{
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;
}
Integration::Log::LogMessage(Integration::Log::DebugInfo, "Using OpenGL es %d.%d.\n", mGlesVersion / 10, mGlesVersion % 10 );
mContextAttribs.Clear();
- if( mGlesVersion >= 30 )
+ if( mIsKhrCreateContextSupported )
{
mContextAttribs.Reserve(5);
mContextAttribs.PushBack( EGL_CONTEXT_MAJOR_VERSION_KHR );
{
mContextAttribs.Reserve(3);
mContextAttribs.PushBack( EGL_CONTEXT_CLIENT_VERSION );
- mContextAttribs.PushBack( 2 );
+ mContextAttribs.PushBack( mGlesVersion / 10 );
}
mContextAttribs.PushBack( EGL_NONE );