@ -34,6 +34,35 @@ static bool gles2_surface_attach_pixels(struct wlr_surface_state *surface,
 
			
		
	
		
			
				
						return  true ; 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  bool  gles2_surface_attach_shm ( struct  wlr_surface_state  * surface ,  
			
		
	
		
			
				
							uint32_t  format ,  struct  wl_shm_buffer  * buffer )  { 
 
			
		
	
		
			
				
						const  struct  pixel_format  * fmt  =  gl_format_for_wl_format ( format ) ; 
 
			
		
	
		
			
				
						if  ( ! fmt  | |  ! fmt - > gl_format )  { 
 
			
		
	
		
			
				
							wlr_log ( L_ERROR ,  " No supported pixel format for this surface " ) ; 
 
			
		
	
		
			
				
							return  false ; 
 
			
		
	
		
			
				
						} 
 
			
		
	
		
			
				
						wl_shm_buffer_begin_access ( buffer ) ; 
 
			
		
	
		
			
				
						uint8_t  * pixels  =  wl_shm_buffer_get_data ( buffer ) ; 
 
			
		
	
		
			
				
						int  width  =  wl_shm_buffer_get_width ( buffer ) ; 
 
			
		
	
		
			
				
						int  height  =  wl_shm_buffer_get_height ( buffer ) ; 
 
			
		
	
		
			
				
						int  pitch  =  wl_shm_buffer_get_stride ( buffer )  /  ( fmt - > bpp  /  8 ) ; 
 
			
		
	
		
			
				
						surface - > wlr_surface - > width  =  width ; 
 
			
		
	
		
			
				
						surface - > wlr_surface - > height  =  height ; 
 
			
		
	
		
			
				
						surface - > wlr_surface - > format  =  format ; 
 
			
		
	
		
			
				
						surface - > pixel_format  =  fmt ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						GL_CALL ( glActiveTexture ( GL_TEXTURE0 ) ) ; 
 
			
		
	
		
			
				
						GL_CALL ( glGenTextures ( 1 ,  & surface - > tex_id ) ) ; 
 
			
		
	
		
			
				
						GL_CALL ( glBindTexture ( GL_TEXTURE_2D ,  surface - > tex_id ) ) ; 
 
			
		
	
		
			
				
						GL_CALL ( glPixelStorei ( GL_UNPACK_ROW_LENGTH_EXT ,  pitch ) ) ; 
 
			
		
	
		
			
				
						GL_CALL ( glTexImage2D ( GL_TEXTURE_2D ,  0 ,  fmt - > gl_format ,  width ,  height ,  0 , 
 
			
		
	
		
			
				
									fmt - > gl_format ,  fmt - > gl_type ,  pixels ) ) ; 
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
						surface - > wlr_surface - > valid  =  true ; 
 
			
		
	
		
			
				
						wl_shm_buffer_end_access ( buffer ) ; 
 
			
		
	
		
			
				
						return  true ; 
 
			
		
	
		
			
				
					}  
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  void  gles2_surface_get_matrix ( struct  wlr_surface_state  * surface ,  
			
		
	
		
			
				
							float  ( * matrix ) [ 16 ] ,  const  float  ( * projection ) [ 16 ] ,  int  x ,  int  y )  { 
 
			
		
	
		
			
				
						struct  wlr_surface  * _surface  =  surface - > wlr_surface ; 
 
			
		
	
	
		
			
				
					
						
							
								 
						
						
							
								 
						
						
					 
				
				@ -61,7 +90,7 @@ static void gles2_surface_destroy(struct wlr_surface_state *surface) {
 
			
		
	
		
			
				
					
 
			
		
	
		
			
				
					static  struct  wlr_surface_impl  wlr_surface_impl  =  {  
			
		
	
		
			
				
						. attach_pixels  =  gles2_surface_attach_pixels , 
 
			
		
	
		
			
				
						// .attach_shm = TODO
 
 
			
		
	
		
			
				
						. attach_shm  =  gles2_surface_attach_shm , 
 
			
		
	
		
			
				
						. get_matrix  =  gles2_surface_get_matrix , 
 
			
		
	
		
			
				
						. bind  =  gles2_surface_bind , 
 
			
		
	
		
			
				
						. destroy  =  gles2_surface_destroy ,