mirror of
				https://gitlab.freedesktop.org/wlroots/wlroots.git
				synced 2025-11-03 09:01:40 -05:00 
			
		
		
		
	single-pixel-buffer: send wl_buffer.release
This commit is contained in:
		
							parent
							
								
									58bb49a00b
								
							
						
					
					
						commit
						0b090c83fb
					
				
					 1 changed files with 13 additions and 0 deletions
				
			
		| 
						 | 
					@ -19,6 +19,8 @@ struct wlr_single_pixel_buffer_v1 {
 | 
				
			||||||
	struct wl_resource *resource;
 | 
						struct wl_resource *resource;
 | 
				
			||||||
	uint32_t r, g, b, a;
 | 
						uint32_t r, g, b, a;
 | 
				
			||||||
	uint8_t argb8888[4]; // packed little-endian DRM_FORMAT_ARGB8888
 | 
						uint8_t argb8888[4]; // packed little-endian DRM_FORMAT_ARGB8888
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						struct wl_listener release;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void destroy_resource(struct wl_client *client,
 | 
					static void destroy_resource(struct wl_client *client,
 | 
				
			||||||
| 
						 | 
					@ -60,6 +62,7 @@ static void buffer_destroy(struct wlr_buffer *wlr_buffer) {
 | 
				
			||||||
	if (buffer->resource != NULL) {
 | 
						if (buffer->resource != NULL) {
 | 
				
			||||||
		wl_resource_set_user_data(buffer->resource, NULL);
 | 
							wl_resource_set_user_data(buffer->resource, NULL);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						wl_list_remove(&buffer->release.link);
 | 
				
			||||||
	free(buffer);
 | 
						free(buffer);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -92,6 +95,13 @@ static void buffer_handle_resource_destroy(struct wl_resource *resource) {
 | 
				
			||||||
	wlr_buffer_drop(&buffer->base);
 | 
						wlr_buffer_drop(&buffer->base);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void buffer_handle_release(struct wl_listener *listener, void *data) {
 | 
				
			||||||
 | 
						struct wlr_single_pixel_buffer_v1 *buffer = wl_container_of(listener, buffer, release);
 | 
				
			||||||
 | 
						if (buffer->resource != NULL) {
 | 
				
			||||||
 | 
							wl_buffer_send_release(buffer->resource);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void manager_handle_create_u32_rgba_buffer(struct wl_client *client,
 | 
					static void manager_handle_create_u32_rgba_buffer(struct wl_client *client,
 | 
				
			||||||
		struct wl_resource *resource, uint32_t id, uint32_t r, uint32_t g,
 | 
							struct wl_resource *resource, uint32_t id, uint32_t r, uint32_t g,
 | 
				
			||||||
		uint32_t b, uint32_t a) {
 | 
							uint32_t b, uint32_t a) {
 | 
				
			||||||
| 
						 | 
					@ -122,6 +132,9 @@ static void manager_handle_create_u32_rgba_buffer(struct wl_client *client,
 | 
				
			||||||
	buffer->argb8888[1] = (uint8_t)((double)buffer->g * f);
 | 
						buffer->argb8888[1] = (uint8_t)((double)buffer->g * f);
 | 
				
			||||||
	buffer->argb8888[2] = (uint8_t)((double)buffer->r * f);
 | 
						buffer->argb8888[2] = (uint8_t)((double)buffer->r * f);
 | 
				
			||||||
	buffer->argb8888[3] = (uint8_t)((double)buffer->a * f);
 | 
						buffer->argb8888[3] = (uint8_t)((double)buffer->a * f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						buffer->release.notify = buffer_handle_release;
 | 
				
			||||||
 | 
						wl_signal_add(&buffer->base.events.release, &buffer->release);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const struct wp_single_pixel_buffer_manager_v1_interface manager_impl = {
 | 
					static const struct wp_single_pixel_buffer_manager_v1_interface manager_impl = {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue