mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-11-03 09:01:40 -05:00 
			
		
		
		
	Implement shm buffer surface attach interface
Implement surface_attach method. This is called when a client attaches an shm buffer with wl_surface_attach(). Implement the GLES2 interface for attaching shm buffers. This creates an opengl texture with the shm buffer contents for the surface. This commit also includes some working code to render the surfaces onto the screen for demonstration purposes.
This commit is contained in:
		
							parent
							
								
									555914a13b
								
							
						
					
					
						commit
						6610aa7ca7
					
				
					 4 changed files with 49 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -28,7 +28,18 @@ void handle_output_frame(struct output_state *output, struct timespec *ts) {
 | 
			
		|||
 | 
			
		||||
	wlr_output_make_current(wlr_output);
 | 
			
		||||
	wlr_renderer_begin(sample->renderer, wlr_output);
 | 
			
		||||
	// TODO: render surfaces
 | 
			
		||||
 | 
			
		||||
	struct wl_resource *_res;
 | 
			
		||||
	float matrix[16];
 | 
			
		||||
	wl_list_for_each(_res, &sample->compositor.surfaces, link) {
 | 
			
		||||
		struct wlr_surface *surface = wl_resource_get_user_data(_res);
 | 
			
		||||
		if (surface->valid) {
 | 
			
		||||
			wlr_surface_get_matrix(surface, &matrix,
 | 
			
		||||
					&wlr_output->transform_matrix, 200, 200);
 | 
			
		||||
			wlr_render_with_matrix(sample->renderer, surface, &matrix);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	wlr_renderer_end(sample->renderer);
 | 
			
		||||
	wlr_output_swap_buffers(wlr_output);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,7 +10,10 @@ static void surface_destroy(struct wl_client *client, struct wl_resource *resour
 | 
			
		|||
static void surface_attach(struct wl_client *client,
 | 
			
		||||
		struct wl_resource *resource,
 | 
			
		||||
		struct wl_resource *buffer_resource, int32_t sx, int32_t sy) {
 | 
			
		||||
	wlr_log(L_DEBUG, "TODO: surface attach");
 | 
			
		||||
	struct wlr_surface *surface = wl_resource_get_user_data(resource);
 | 
			
		||||
	struct wl_shm_buffer *buffer = wl_shm_buffer_get(buffer_resource);
 | 
			
		||||
	uint32_t format = wl_shm_buffer_get_format(buffer);
 | 
			
		||||
	wlr_surface_attach_shm(surface, format, buffer);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void surface_damage(struct wl_client *client,
 | 
			
		||||
| 
						 | 
				
			
			@ -87,7 +90,7 @@ static void wl_compositor_create_surface(struct wl_client *client,
 | 
			
		|||
	wl_resource_set_implementation(surface_resource, &surface_interface,
 | 
			
		||||
			surface, destroy_surface);
 | 
			
		||||
	wl_resource_set_user_data(surface_resource, surface);
 | 
			
		||||
 | 
			
		||||
	wl_list_insert(&state->surfaces, wl_resource_get_link(surface_resource));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void wl_compositor_create_region(struct wl_client *client,
 | 
			
		||||
| 
						 | 
				
			
			@ -135,4 +138,5 @@ void wl_compositor_init(struct wl_display *display,
 | 
			
		|||
	state->wl_global = wl_global;
 | 
			
		||||
	state->renderer = renderer;
 | 
			
		||||
	wl_list_init(&state->wl_resources);
 | 
			
		||||
	wl_list_init(&state->surfaces);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue