@ -552,23 +552,32 @@ void wlr_scene_buffer_set_buffer_with_damage(struct wlr_scene_buffer *scene_buff
 
			
		
	
		
			
				
						// coordinates. 
 
 
			
		
	
		
			
				
						assert ( buffer  | |  ! damage ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						if  ( buffer  ! =  scene_buffer - > buffer )  { 
 
			
		
	
		
			
				
							wlr_texture_destroy ( scene_buffer - > texture ) ; 
 
			
		
	
		
			
				
							scene_buffer - > texture  =  NULL ; 
 
			
		
	
		
			
				
							wlr_buffer_unlock ( scene_buffer - > buffer ) ; 
 
			
		
	
		
			
				
						if  ( buffer  = =  scene_buffer - > buffer )  { 
 
			
		
	
		
			
				
							return ; 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  ( buffer )  { 
 
			
		
	
		
			
				
								scene_buffer - > buffer  =  wlr_buffer_lock ( buffer ) ; 
 
			
		
	
		
			
				
							}  else  { 
 
			
		
	
		
			
				
								scene_buffer - > buffer  =  NULL ; 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
						bool  update  =  false ; 
 
			
		
	
		
			
				
						wlr_buffer_unlock ( scene_buffer - > buffer ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							if  ( ! damage )  { 
 
			
		
	
		
			
				
								scene_node_update ( & scene_buffer - > node ,  NULL ) ; 
 
			
		
	
		
			
				
							} 
 
			
		
	
		
			
				
						if  ( buffer )  { 
 
			
		
	
		
			
				
							// if this node used to not be mapped or its previous displayed
 
 
			
		
	
		
			
				
							// buffer region will be different from what the new buffer would
 
 
			
		
	
		
			
				
							// produce we need to update the node.
 
 
			
		
	
		
			
				
							update  =  ! scene_buffer - > buffer  | | 
 
			
		
	
		
			
				
								( scene_buffer - > dst_width  = =  0  & &  scene_buffer - > dst_height  = =  0  & & 
 
			
		
	
		
			
				
									( scene_buffer - > buffer - > width  ! =  buffer - > width  | | 
 
			
		
	
		
			
				
									scene_buffer - > buffer - > height  ! =  buffer - > height ) ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
							scene_buffer - > buffer  =  wlr_buffer_lock ( buffer ) ; 
 
			
		
	
		
			
				
						}  else  { 
 
			
		
	
		
			
				
							update  =  true ; 
 
			
		
	
		
			
				
							scene_buffer - > buffer  =  NULL ; 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						if  ( ! damage )  { 
 
			
		
	
		
			
				
						if  ( update )  { 
 
			
		
	
		
			
				
							scene_node_update ( & scene_buffer - > node ,  NULL ) ; 
 
			
		
	
		
			
				
							// updating the node will already damage the whole node for us. Return
 
 
			
		
	
		
			
				
							// early to not damage again
 
 
			
		
	
		
			
				
							return ; 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
	
		
			
				
					
						
						
						
							
								 
						
					 
				
				@ -577,6 +586,12 @@ void wlr_scene_buffer_set_buffer_with_damage(struct wlr_scene_buffer *scene_buff
 
			
		
	
		
			
				
							return ; 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						pixman_region32_t  fallback_damage ; 
 
			
		
	
		
			
				
						pixman_region32_init_rect ( & fallback_damage ,  0 ,  0 ,  buffer - > width ,  buffer - > height ) ; 
 
			
		
	
		
			
				
						if  ( ! damage )  { 
 
			
		
	
		
			
				
							damage  =  & fallback_damage ; 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						struct  wlr_fbox  box  =  scene_buffer - > src_box ; 
 
			
		
	
		
			
				
						if  ( wlr_fbox_empty ( & box ) )  { 
 
			
		
	
		
			
				
							box . x  =  0 ; 
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -633,6 +648,7 @@ void wlr_scene_buffer_set_buffer_with_damage(struct wlr_scene_buffer *scene_buff
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						pixman_region32_fini ( & trans_damage ) ; 
 
			
		
	
		
			
				
						pixman_region32_fini ( & fallback_damage ) ; 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					void  wlr_scene_buffer_set_buffer ( struct  wlr_scene_buffer  * scene_buffer ,