- If EGL_KHR_Create_Context extension is not supported, Do not use EGL_CONTEXT_MINOR_VERSION_KHR
- Without any Current Context, do not call glFinish
- Remove ARM condition in the ChooseConfig
Change-Id: I27cf679943694f91329454e63441a100ab04e706
Signed-off-by: Seungho, Baek <sbsh.baek@samsung.com>
+ const uint32_t CHECK_EXTENSION_NUMBER = 2;
const std::string EGL_KHR_SURFACELESS_CONTEXT = "EGL_KHR_surfaceless_context";
const std::string EGL_KHR_SURFACELESS_CONTEXT = "EGL_KHR_surfaceless_context";
+ const std::string EGL_KHR_CREATE_CONTEXT = "EGL_KHR_create_context";
mIsWindow( true ),
mDepthBufferRequired( depthBufferRequired == Integration::DepthBufferAvailable::TRUE ),
mStencilBufferRequired( stencilBufferRequired == Integration::StencilBufferAvailable::TRUE ),
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 );
// 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;
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;
{
mIsSurfacelessContextSupported = true;
+ extensionCheckCount++;
+ }
+ if( currentExtension == EGL_KHR_CREATE_CONTEXT )
+ {
+ mIsKhrCreateContextSupported = true;
+ extensionCheckCount++;
+ if( mCurrentEglContext != EGL_NO_CONTEXT )
+ {
+ glFinish();
+ }
eglMakeCurrent( mEglDisplay, eglSurface, eglSurface, eglContext );
eglMakeCurrent( mEglDisplay, eglSurface, eglSurface, eglContext );
+ if( mCurrentEglContext != EGL_NO_CONTEXT )
+ {
+ glFinish();
+ }
eglMakeCurrent( mEglDisplay, eglSurface, eglSurface, mEglContext );
eglMakeCurrent( mEglDisplay, eglSurface, eglSurface, mEglContext );
if( mGlesVersion >= 30 )
{
if( mGlesVersion >= 30 )
{
configAttribs.PushBack( EGL_OPENGL_ES3_BIT_KHR );
configAttribs.PushBack( EGL_OPENGL_ES3_BIT_KHR );
-#else
- configAttribs.PushBack( EGL_OPENGL_ES2_BIT );
-#endif // _ARCH_ARM_
if( mGlesVersion >= 30 )
{
mEglConfig = NULL;
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.");
Integration::Log::LogMessage(Integration::Log::DebugInfo, "Using OpenGL es %d.%d.\n", mGlesVersion / 10, mGlesVersion % 10 );
mContextAttribs.Clear();
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(5);
mContextAttribs.PushBack( EGL_CONTEXT_MAJOR_VERSION_KHR );
{
mContextAttribs.Reserve(3);
mContextAttribs.PushBack( EGL_CONTEXT_CLIENT_VERSION );
{
mContextAttribs.Reserve(3);
mContextAttribs.PushBack( EGL_CONTEXT_CLIENT_VERSION );
- mContextAttribs.PushBack( 2 );
+ mContextAttribs.PushBack( mGlesVersion / 10 );
}
mContextAttribs.PushBack( EGL_NONE );
}
mContextAttribs.PushBack( EGL_NONE );
bool mDepthBufferRequired;
bool mStencilBufferRequired;
bool mIsSurfacelessContextSupported;
bool mDepthBufferRequired;
bool mStencilBufferRequired;
bool mIsSurfacelessContextSupported;
+ bool mIsKhrCreateContextSupported;
};
} // namespace Adaptor
};
} // namespace Adaptor