| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -87,13 +87,21 @@ static int getEGLConfigAttrib(EGLConfig config, int attrib) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					//
 | 
					 | 
					 | 
					 | 
					//
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static GLFWbool chooseEGLConfig(const _GLFWctxconfig* ctxconfig, | 
					 | 
					 | 
					 | 
					static GLFWbool chooseEGLConfig(const _GLFWctxconfig* ctxconfig, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                const _GLFWfbconfig* desired, | 
					 | 
					 | 
					 | 
					                                const _GLFWfbconfig* desired, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                                EGLConfig* result) | 
					 | 
					 | 
					 | 
					                                EGLConfig* result, | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                GLFWbool findTransparent) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{ | 
					 | 
					 | 
					 | 
					{ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    EGLConfig* nativeConfigs; | 
					 | 
					 | 
					 | 
					    EGLConfig* nativeConfigs; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    _GLFWfbconfig* usableConfigs; | 
					 | 
					 | 
					 | 
					    _GLFWfbconfig* usableConfigs; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    const _GLFWfbconfig* closest; | 
					 | 
					 | 
					 | 
					    const _GLFWfbconfig* closest; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    int i, nativeCount, usableCount; | 
					 | 
					 | 
					 | 
					    int i, nativeCount, usableCount; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#if defined(_GLFW_X11) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    XVisualInfo visualTemplate = {0}; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    if ( !(_glfw.xrender.major || _glfw.xrender.minor) ) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        findTransparent = GLFW_FALSE; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					#endif // _GLFW_X11
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    eglGetConfigs(_glfw.egl.display, NULL, 0, &nativeCount); | 
					 | 
					 | 
					 | 
					    eglGetConfigs(_glfw.egl.display, NULL, 0, &nativeCount); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (!nativeCount) | 
					 | 
					 | 
					 | 
					    if (!nativeCount) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    { | 
					 | 
					 | 
					 | 
					    { | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -107,6 +115,7 @@ static GLFWbool chooseEGLConfig(const _GLFWctxconfig* ctxconfig, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    usableConfigs = calloc(nativeCount, sizeof(_GLFWfbconfig)); | 
					 | 
					 | 
					 | 
					    usableConfigs = calloc(nativeCount, sizeof(_GLFWfbconfig)); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    usableCount = 0; | 
					 | 
					 | 
					 | 
					    usableCount = 0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					selectionloop: | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    for (i = 0;  i < nativeCount;  i++) | 
					 | 
					 | 
					 | 
					    for (i = 0;  i < nativeCount;  i++) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    { | 
					 | 
					 | 
					 | 
					    { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        const EGLConfig n = nativeConfigs[i]; | 
					 | 
					 | 
					 | 
					        const EGLConfig n = nativeConfigs[i]; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -122,8 +131,31 @@ static GLFWbool chooseEGLConfig(const _GLFWctxconfig* ctxconfig, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#if defined(_GLFW_X11) | 
					 | 
					 | 
					 | 
					#if defined(_GLFW_X11) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        // Only consider EGLConfigs with associated Visuals
 | 
					 | 
					 | 
					 | 
					        // Only consider EGLConfigs with associated Visuals
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (!getEGLConfigAttrib(n, EGL_NATIVE_VISUAL_ID)) | 
					 | 
					 | 
					 | 
					    visualTemplate.visualid = getEGLConfigAttrib(n, EGL_NATIVE_VISUAL_ID); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        if (!visualTemplate.visualid) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            continue; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    if( findTransparent ) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        int n_vi; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            XVisualInfo *visualinfo; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            XRenderPictFormat *pictFormat; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        visualinfo = XGetVisualInfo(_glfw.x11.display, VisualIDMask, &visualTemplate, &n_vi); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        if (!visualinfo) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            continue; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            pictFormat = XRenderFindVisualFormat(_glfw.x11.display, visualinfo->visual); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            if( !pictFormat ) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            XFree( visualinfo ); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            continue; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            if( !pictFormat->direct.alphaMask ) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					            XFree( visualinfo ); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					            continue; | 
					 | 
					 | 
					 | 
					            continue; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        XFree( visualinfo ); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#endif // _GLFW_X11
 | 
					 | 
					 | 
					 | 
					#endif // _GLFW_X11
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        if (ctxconfig->client == GLFW_OPENGL_ES_API) | 
					 | 
					 | 
					 | 
					        if (ctxconfig->client == GLFW_OPENGL_ES_API) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -159,6 +191,12 @@ static GLFWbool chooseEGLConfig(const _GLFWctxconfig* ctxconfig, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        u->handle = (uintptr_t) n; | 
					 | 
					 | 
					 | 
					        u->handle = (uintptr_t) n; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        usableCount++; | 
					 | 
					 | 
					 | 
					        usableCount++; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    } | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    // reiterate the selection loop without looking for transparency supporting
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    // formats if no matchig FB configs for a transparent window were found. 
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    if( findTransparent && !usableCount ) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					        findTransparent = GLFW_FALSE; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    goto selectionloop; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    closest = _glfwChooseFBConfig(desired, usableConfigs, usableCount); | 
					 | 
					 | 
					 | 
					    closest = _glfwChooseFBConfig(desired, usableConfigs, usableCount); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (closest) | 
					 | 
					 | 
					 | 
					    if (closest) | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -455,7 +493,7 @@ GLFWbool _glfwCreateContextEGL(_GLFWwindow* window, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (ctxconfig->share) | 
					 | 
					 | 
					 | 
					    if (ctxconfig->share) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        share = ctxconfig->share->context.egl.handle; | 
					 | 
					 | 
					 | 
					        share = ctxconfig->share->context.egl.handle; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (!chooseEGLConfig(ctxconfig, fbconfig, &config)) | 
					 | 
					 | 
					 | 
					    if (!chooseEGLConfig(ctxconfig, fbconfig, &config, window->transparent)) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    { | 
					 | 
					 | 
					 | 
					    { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        _glfwInputError(GLFW_FORMAT_UNAVAILABLE, | 
					 | 
					 | 
					 | 
					        _glfwInputError(GLFW_FORMAT_UNAVAILABLE, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        "EGL: Failed to find a suitable EGLConfig"); | 
					 | 
					 | 
					 | 
					                        "EGL: Failed to find a suitable EGLConfig"); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -689,7 +727,8 @@ GLFWbool _glfwCreateContextEGL(_GLFWwindow* window, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					// Returns the Visual and depth of the chosen EGLConfig
 | 
					 | 
					 | 
					 | 
					// Returns the Visual and depth of the chosen EGLConfig
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					//
 | 
					 | 
					 | 
					 | 
					//
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					#if defined(_GLFW_X11) | 
					 | 
					 | 
					 | 
					#if defined(_GLFW_X11) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					GLFWbool _glfwChooseVisualEGL(const _GLFWctxconfig* ctxconfig, | 
					 | 
					 | 
					 | 
					GLFWbool _glfwChooseVisualEGL(const _GLFWwndconfig* wndconfig, | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					                              const _GLFWctxconfig* ctxconfig, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                              const _GLFWfbconfig* fbconfig, | 
					 | 
					 | 
					 | 
					                              const _GLFWfbconfig* fbconfig, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                              Visual** visual, int* depth) | 
					 | 
					 | 
					 | 
					                              Visual** visual, int* depth) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{ | 
					 | 
					 | 
					 | 
					{ | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -699,7 +738,7 @@ GLFWbool _glfwChooseVisualEGL(const _GLFWctxconfig* ctxconfig, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    EGLint visualID = 0, count = 0; | 
					 | 
					 | 
					 | 
					    EGLint visualID = 0, count = 0; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    const long vimask = VisualScreenMask | VisualIDMask; | 
					 | 
					 | 
					 | 
					    const long vimask = VisualScreenMask | VisualIDMask; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    if (!chooseEGLConfig(ctxconfig, fbconfig, &native)) | 
					 | 
					 | 
					 | 
					    if (!chooseEGLConfig(ctxconfig, fbconfig, &native, wndconfig->transparent)) | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					    { | 
					 | 
					 | 
					 | 
					    { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					        _glfwInputError(GLFW_FORMAT_UNAVAILABLE, | 
					 | 
					 | 
					 | 
					        _glfwInputError(GLFW_FORMAT_UNAVAILABLE, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					                        "EGL: Failed to find a suitable EGLConfig"); | 
					 | 
					 | 
					 | 
					                        "EGL: Failed to find a suitable EGLConfig"); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |