@ -94,7 +94,18 @@ static GLFWbool chooseEGLConfig(const _GLFWctxconfig* ctxconfig,
EGLConfig * nativeConfigs ;
EGLConfig * nativeConfigs ;
_GLFWfbconfig * usableConfigs ;
_GLFWfbconfig * usableConfigs ;
const _GLFWfbconfig * closest ;
const _GLFWfbconfig * closest ;
int i , nativeCount , usableCount ;
int i , nativeCount , usableCount , apiBit ;
GLFWbool wrongApiAvailable = GLFW_FALSE ;
if ( ctxconfig - > client = = GLFW_OPENGL_ES_API )
{
if ( ctxconfig - > major = = 1 )
apiBit = EGL_OPENGL_ES_BIT ;
else
apiBit = EGL_OPENGL_ES2_BIT ;
}
else
apiBit = EGL_OPENGL_BIT ;
eglGetConfigs ( _glfw . egl . display , NULL , 0 , & nativeCount ) ;
eglGetConfigs ( _glfw . egl . display , NULL , 0 , & nativeCount ) ;
if ( ! nativeCount )
if ( ! nativeCount )
@ -146,23 +157,10 @@ static GLFWbool chooseEGLConfig(const _GLFWctxconfig* ctxconfig,
}
}
# endif // _GLFW_X11
# endif // _GLFW_X11
if ( ctxconfig - > client = = GLFW_OPENGL_ES_API )
if ( ! ( getEGLConfigAttrib ( n , EGL_RENDERABLE_TYPE ) & apiBit ) )
{
if ( ctxconfig - > major = = 1 )
{
if ( ! ( getEGLConfigAttrib ( n , EGL_RENDERABLE_TYPE ) & EGL_OPENGL_ES_BIT ) )
continue ;
}
else
{
if ( ! ( getEGLConfigAttrib ( n , EGL_RENDERABLE_TYPE ) & EGL_OPENGL_ES2_BIT ) )
continue ;
}
}
else if ( ctxconfig - > client = = GLFW_OPENGL_API )
{
{
if ( ! ( getEGLConfigAttrib ( n , EGL_RENDERABLE_TYPE ) & EGL_OPENGL_BIT ) )
wrongApiAvailable = GLFW_TRUE ;
continue ;
continue ;
}
}
u - > redBits = getEGLConfigAttrib ( n , EGL_RED_SIZE ) ;
u - > redBits = getEGLConfigAttrib ( n , EGL_RED_SIZE ) ;
@ -198,6 +196,35 @@ static GLFWbool chooseEGLConfig(const _GLFWctxconfig* ctxconfig,
closest = _glfwChooseFBConfig ( desired , usableConfigs , usableCount ) ;
closest = _glfwChooseFBConfig ( desired , usableConfigs , usableCount ) ;
if ( closest )
if ( closest )
* result = ( EGLConfig ) closest - > handle ;
* result = ( EGLConfig ) closest - > handle ;
else
{
if ( wrongApiAvailable )
{
if ( ctxconfig - > client = = GLFW_OPENGL_ES_API )
{
if ( ctxconfig - > major = = 1 )
{
_glfwInputError ( GLFW_API_UNAVAILABLE ,
" EGL: Failed to find support for OpenGL ES 1.x " ) ;
}
else
{
_glfwInputError ( GLFW_API_UNAVAILABLE ,
" EGL: Failed to find support for OpenGL ES 2 or later " ) ;
}
}
else
{
_glfwInputError ( GLFW_API_UNAVAILABLE ,
" EGL: Failed to find support for OpenGL " ) ;
}
}
else
{
_glfwInputError ( GLFW_FORMAT_UNAVAILABLE ,
" EGL: Failed to find a suitable EGLConfig " ) ;
}
}
_glfw_free ( nativeConfigs ) ;
_glfw_free ( nativeConfigs ) ;
_glfw_free ( usableConfigs ) ;
_glfw_free ( usableConfigs ) ;
@ -550,11 +577,7 @@ GLFWbool _glfwCreateContextEGL(_GLFWwindow* window,
share = ctxconfig - > share - > context . egl . handle ;
share = ctxconfig - > share - > context . egl . handle ;
if ( ! chooseEGLConfig ( ctxconfig , fbconfig , & config ) )
if ( ! chooseEGLConfig ( ctxconfig , fbconfig , & config ) )
{
_glfwInputError ( GLFW_FORMAT_UNAVAILABLE ,
" EGL: Failed to find a suitable EGLConfig " ) ;
return GLFW_FALSE ;
return GLFW_FALSE ;
}
if ( ctxconfig - > client = = GLFW_OPENGL_ES_API )
if ( ctxconfig - > client = = GLFW_OPENGL_ES_API )
{
{
@ -815,11 +838,7 @@ GLFWbool _glfwChooseVisualEGL(const _GLFWwndconfig* wndconfig,
const long vimask = VisualScreenMask | VisualIDMask ;
const long vimask = VisualScreenMask | VisualIDMask ;
if ( ! chooseEGLConfig ( ctxconfig , fbconfig , & native ) )
if ( ! chooseEGLConfig ( ctxconfig , fbconfig , & native ) )
{
_glfwInputError ( GLFW_FORMAT_UNAVAILABLE ,
" EGL: Failed to find a suitable EGLConfig " ) ;
return GLFW_FALSE ;
return GLFW_FALSE ;
}
eglGetConfigAttrib ( _glfw . egl . display , native ,
eglGetConfigAttrib ( _glfw . egl . display , native ,
EGL_NATIVE_VISUAL_ID , & visualID ) ;
EGL_NATIVE_VISUAL_ID , & visualID ) ;