mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-11-03 09:01:40 -05:00 
			
		
		
		
	compositor: make renderer optional
This is a first step towards moving texture uploading out of wlr_compositor. This commit allows compositors to opt-out of the texture uploading by passing a NULL wlr_renderer. An immediate user of this is gamescope, which currently implements a stub wlr_renderer just to make wlr_compositor happy.
This commit is contained in:
		
							parent
							
								
									1978a91717
								
							
						
					
					
						commit
						42016fa262
					
				
					 2 changed files with 15 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -90,7 +90,7 @@ struct wlr_surface_output {
 | 
			
		|||
 | 
			
		||||
struct wlr_surface {
 | 
			
		||||
	struct wl_resource *resource;
 | 
			
		||||
	struct wlr_renderer *renderer;
 | 
			
		||||
	struct wlr_renderer *renderer; // may be NULL
 | 
			
		||||
	/**
 | 
			
		||||
	 * The surface's buffer, if any. A surface has an attached buffer when it
 | 
			
		||||
	 * commits with a non-null buffer in its pending state. A surface will not
 | 
			
		||||
| 
						 | 
				
			
			@ -168,7 +168,7 @@ struct wlr_renderer;
 | 
			
		|||
 | 
			
		||||
struct wlr_compositor {
 | 
			
		||||
	struct wl_global *global;
 | 
			
		||||
	struct wlr_renderer *renderer;
 | 
			
		||||
	struct wlr_renderer *renderer; // may be NULL
 | 
			
		||||
 | 
			
		||||
	struct wl_listener display_destroy;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -305,6 +305,9 @@ void wlr_surface_unlock_cached(struct wlr_surface *surface, uint32_t seq);
 | 
			
		|||
/**
 | 
			
		||||
 * Create the wl_compositor global, which can be used by clients to create
 | 
			
		||||
 * surfaces and regions.
 | 
			
		||||
 *
 | 
			
		||||
 * If a renderer is supplied, the compositor will create struct wlr_texture
 | 
			
		||||
 * objects from client buffers on surface commit.
 | 
			
		||||
 */
 | 
			
		||||
struct wlr_compositor *wlr_compositor_create(struct wl_display *display,
 | 
			
		||||
	struct wlr_renderer *renderer);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -370,6 +370,10 @@ static void surface_apply_damage(struct wlr_surface *surface) {
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (surface->renderer == NULL) {
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	struct wlr_client_buffer *buffer = wlr_client_buffer_create(
 | 
			
		||||
			surface->current.buffer, surface->renderer);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -699,8 +703,12 @@ static struct wlr_surface *surface_create(struct wl_client *client,
 | 
			
		|||
	pixman_region32_init(&surface->input_region);
 | 
			
		||||
	wlr_addon_set_init(&surface->addons);
 | 
			
		||||
 | 
			
		||||
	if (renderer != NULL) {
 | 
			
		||||
		wl_signal_add(&renderer->events.destroy, &surface->renderer_destroy);
 | 
			
		||||
		surface->renderer_destroy.notify = surface_handle_renderer_destroy;
 | 
			
		||||
	} else {
 | 
			
		||||
		wl_list_init(&surface->renderer_destroy.link);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return surface;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue