@ -83,20 +83,6 @@ static int choosePixelFormat(_GLFWwindow* window, 
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					        const  int  n  =  i  +  1 ;   
			
		
	
		
			
				
					        _GLFWfbconfig *  u  =  usableConfigs  +  usableCount ;   
			
		
	
		
			
				
					        PIXELFORMATDESCRIPTOR  pfd ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( fbconfig - > transparent )  {   
			
		
	
		
			
				
					            if  ( ! DescribePixelFormat ( window - > context . wgl . dc ,   
			
		
	
		
			
				
					                n ,   
			
		
	
		
			
				
					                sizeof ( PIXELFORMATDESCRIPTOR ) ,   
			
		
	
		
			
				
					                & pfd ) )   
			
		
	
		
			
				
					            {   
			
		
	
		
			
				
					                continue ;   
			
		
	
		
			
				
					            }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            if  ( ! ( pfd . dwFlags  &  PFD_SUPPORT_COMPOSITION ) )   
			
		
	
		
			
				
					                continue ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( _glfw . wgl . ARB_pixel_format )   
			
		
	
		
			
				
					        {   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -168,7 +154,9 @@ static int choosePixelFormat(_GLFWwindow* window, 
			
		
	
		
			
				
					        {   
			
		
	
		
			
				
					            // Get pixel format attributes through legacy PFDs
   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            if  ( ! fbconfig - > transparent  & &  DescribePixelFormat ( window - > context . wgl . dc ,   
			
		
	
		
			
				
					            PIXELFORMATDESCRIPTOR  pfd ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					            if  ( ! DescribePixelFormat ( window - > context . wgl . dc ,   
			
		
	
		
			
				
					                                     n ,   
			
		
	
		
			
				
					                                     sizeof ( PIXELFORMATDESCRIPTOR ) ,   
			
		
	
		
			
				
					                                     & pfd ) )   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -215,14 +203,6 @@ static int choosePixelFormat(_GLFWwindow* window, 
			
		
	
		
			
				
					        u - > handle  =  n ;   
			
		
	
		
			
				
					        usableCount + + ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					    // Reiterate the selection loop without looking for transparency supporting
   
			
		
	
		
			
				
					    // formats if no matching pixelformat for a transparent window were found.
   
			
		
	
		
			
				
					    if  ( fbconfig - > transparent  & &  ! usableCount )  {   
			
		
	
		
			
				
					        free ( usableConfigs ) ;   
			
		
	
		
			
				
					        _glfwInputError ( GLFW_PLATFORM_ERROR ,   
			
		
	
		
			
				
					            " WGL: No pixel format found for transparent window. Ignoring transparency. " ) ;   
			
		
	
		
			
				
					        return  choosePixelFormat ( window ,  ctxconfig ,  fbconfig ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    if  ( ! usableCount )   
			
		
	
		
			
				
					    {   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -249,21 +229,6 @@ static int choosePixelFormat(_GLFWwindow* window, 
			
		
	
		
			
				
					    return  pixelFormat ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					// Returns whether desktop compositing is enabled
  
			
		
	
		
			
				
					//
  
			
		
	
		
			
				
					static  GLFWbool  isCompositionEnabled ( void )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    if  ( _glfw . win32 . dwmapi . instance )   
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					        BOOL  enabled ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					        if  ( DwmIsCompositionEnabled ( & enabled )  = =  S_OK )   
			
		
	
		
			
				
					            return  enabled ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    return  FALSE ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  void  makeContextCurrentWGL ( _GLFWwindow *  window )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    if  ( window )   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -292,7 +257,7 @@ static void makeContextCurrentWGL(_GLFWwindow* window) 
			
		
	
		
			
				
					static  void  swapBuffersWGL ( _GLFWwindow *  window )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    // HACK: Use DwmFlush when desktop composition is enabled
   
			
		
	
		
			
				
					    if  ( isCompositionEnabled ( )  & &  ! window - > monitor )   
			
		
	
		
			
				
					    if  ( _glfwIsCompositionEnabledWin32 ( )  & &  ! window - > monitor )   
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					        int  count  =  abs ( window - > context . wgl . interval ) ;   
			
		
	
		
			
				
					        while  ( count - - )   
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -310,7 +275,7 @@ static void swapIntervalWGL(int interval) 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // HACK: Disable WGL swap interval when desktop composition is enabled to
   
			
		
	
		
			
				
					    //       avoid interfering with DWM vsync
   
			
		
	
		
			
				
					    if  ( isCompositionEnabled ( )  & &  ! window - > monitor )   
			
		
	
		
			
				
					    if  ( _glfwIsCompositionEnabledWin32 ( )  & &  ! window - > monitor )   
			
		
	
		
			
				
					        interval  =  0 ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    if  ( _glfw . wgl . EXT_swap_control )   
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -504,75 +469,6 @@ void _glfwTerminateWGL(void) 
			
		
	
		
			
				
					    attribs [ index + + ]  =  v ;  \
  
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  GLFWbool  setupTransparentWindow ( _GLFWwindow *  window )  
			
		
	
		
			
				
					{  
			
		
	
		
			
				
					    if  ( ! isCompositionEnabled )  {   
			
		
	
		
			
				
					        _glfwInputError ( GLFW_PLATFORM_ERROR ,   
			
		
	
		
			
				
					            " WGL: Composition needed for transparent window is disabled " ) ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					    if  ( ! _glfw_DwmEnableBlurBehindWindow )  {   
			
		
	
		
			
				
					        _glfwInputError ( GLFW_PLATFORM_ERROR ,   
			
		
	
		
			
				
					            " WGL: Unable to load DwmEnableBlurBehindWindow required for transparent window " ) ;   
			
		
	
		
			
				
					        return  GLFW_FALSE ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    HRESULT  hr  =  S_OK ;   
			
		
	
		
			
				
					    HWND  handle  =  window - > win32 . handle ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    DWM_BLURBEHIND  bb  =  {  0  } ;   
			
		
	
		
			
				
					    bb . dwFlags  =  DWM_BB_ENABLE  |  DWM_BB_BLURREGION ;   
			
		
	
		
			
				
					    bb . hRgnBlur  =  CreateRectRgn ( 0 ,  0 ,  - 1 ,  - 1 ) ;   // makes the window transparent
   
			
		
	
		
			
				
					    bb . fEnable  =  TRUE ;   
			
		
	
		
			
				
					    hr  =  _glfw_DwmEnableBlurBehindWindow ( handle ,  & bb ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    if  ( ! SUCCEEDED ( hr ) )  {   
			
		
	
		
			
				
					        _glfwInputError ( GLFW_PLATFORM_ERROR ,   
			
		
	
		
			
				
					            " WGL: Failed to enable blur behind window required for transparent window " ) ;   
			
		
	
		
			
				
					        return  GLFW_FALSE ;   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    // Decorated windows on Windows 8+ don't repaint the transparent background
   
			
		
	
		
			
				
					    // leaving a trail behind animations.
   
			
		
	
		
			
				
					    // Hack: making the window layered with a transparency color key seems to fix this.
   
			
		
	
		
			
				
					    // Normally, when specifying a transparency color key to be used when composing
   
			
		
	
		
			
				
					    // the layered window, all pixels painted by the window in this color will be transparent.
   
			
		
	
		
			
				
					    // That doesn't seem to be the case anymore on Windows 8+, at least when used with
   
			
		
	
		
			
				
					    // DwmEnableBlurBehindWindow + negative region.
   
			
		
	
		
			
				
					    if  ( window - > decorated  & &  IsWindows8OrGreater ( ) )   
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					        long  style  =  GetWindowLong ( handle ,  GWL_EXSTYLE ) ;   
			
		
	
		
			
				
					        if  ( ! style )  {   
			
		
	
		
			
				
					            _glfwInputError ( GLFW_PLATFORM_ERROR ,   
			
		
	
		
			
				
					                " WGL: Failed to retrieve extended styles. GetLastError: %d " ,   
			
		
	
		
			
				
					                GetLastError ( ) ) ;   
			
		
	
		
			
				
					            return  GLFW_FALSE ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        style  | =  WS_EX_LAYERED ;   
			
		
	
		
			
				
					        if  ( ! SetWindowLongPtr ( handle ,  GWL_EXSTYLE ,  style ) )   
			
		
	
		
			
				
					        {   
			
		
	
		
			
				
					            _glfwInputError ( GLFW_PLATFORM_ERROR ,   
			
		
	
		
			
				
					                " WGL: Failed to add layered style. GetLastError: %d " ,   
			
		
	
		
			
				
					                GetLastError ( ) ) ;   
			
		
	
		
			
				
					            return  GLFW_FALSE ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					        if  ( ! SetLayeredWindowAttributes ( handle ,   
			
		
	
		
			
				
					            // Using a color key not equal to black to fix the trailing issue.
   
			
		
	
		
			
				
					            // When set to black, something is making the hit test not resize with the
   
			
		
	
		
			
				
					            // window frame.
   
			
		
	
		
			
				
					            RGB ( 0 ,  193 ,  48 ) ,   
			
		
	
		
			
				
					            255 ,   
			
		
	
		
			
				
					            LWA_COLORKEY ) )   
			
		
	
		
			
				
					        {   
			
		
	
		
			
				
					            _glfwInputError ( GLFW_PLATFORM_ERROR ,   
			
		
	
		
			
				
					                " WGL: Failed to set layered window. GetLastError: %d " ,   
			
		
	
		
			
				
					                GetLastError ( ) ) ;   
			
		
	
		
			
				
					            return  GLFW_FALSE ;   
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    return  GLFW_TRUE ;   
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					// Create the OpenGL or OpenGL ES context
  
			
		
	
		
			
				
					//
  
			
		
	
		
			
				
					GLFWbool  _glfwCreateContextWGL ( _GLFWwindow *  window ,  
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -802,14 +698,6 @@ GLFWbool _glfwCreateContextWGL(_GLFWwindow* window, 
			
		
	
		
			
				
					        }   
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    if  ( fbconfig - > transparent )   
			
		
	
		
			
				
					    {   
			
		
	
		
			
				
					        if  ( ! setupTransparentWindow ( window ) )   
			
		
	
		
			
				
					            _glfwInputErrorWin32 ( GLFW_PLATFORM_ERROR ,   
			
		
	
		
			
				
					                    " WGL: Failed to setup window as transparent as requested " ) ;   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    }   
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					    window - > context . makeCurrent  =  makeContextCurrentWGL ;   
			
		
	
		
			
				
					    window - > context . swapBuffers  =  swapBuffersWGL ;   
			
		
	
		
			
				
					    window - > context . swapInterval  =  swapIntervalWGL ;