mirror of
				https://gitlab.freedesktop.org/wayland/wayland.git
				synced 2025-11-03 09:01:42 -05:00 
			
		
		
		
	Add wl_shm_buffer_create()
This commit is contained in:
		
							parent
							
								
									c855d6eec4
								
							
						
					
					
						commit
						7d3ccec18e
					
				
					 2 changed files with 50 additions and 1 deletions
				
			
		| 
						 | 
					@ -440,6 +440,11 @@ wl_buffer_is_shm(struct wl_buffer *buffer);
 | 
				
			||||||
int
 | 
					int
 | 
				
			||||||
wl_display_init_shm(struct wl_display *display);
 | 
					wl_display_init_shm(struct wl_display *display);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct wl_buffer *
 | 
				
			||||||
 | 
					wl_shm_buffer_create(struct wl_client *client,
 | 
				
			||||||
 | 
							     uint32_t id, int32_t width, int32_t height,
 | 
				
			||||||
 | 
							     int32_t stride, uint32_t format);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void wl_log_set_handler_server(wl_log_func_t handler);
 | 
					void wl_log_set_handler_server(wl_log_func_t handler);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef  __cplusplus
 | 
					#ifdef  __cplusplus
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -255,6 +255,47 @@ wl_display_init_shm(struct wl_display *display)
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					WL_EXPORT struct wl_buffer *
 | 
				
			||||||
 | 
					wl_shm_buffer_create(struct wl_client *client,
 | 
				
			||||||
 | 
							     uint32_t id, int32_t width, int32_t height,
 | 
				
			||||||
 | 
							     int32_t stride, uint32_t format)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct wl_shm_buffer *buffer;
 | 
				
			||||||
 | 
								     
 | 
				
			||||||
 | 
						switch (format) {
 | 
				
			||||||
 | 
						case WL_SHM_FORMAT_ARGB8888:
 | 
				
			||||||
 | 
						case WL_SHM_FORMAT_XRGB8888:
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							return NULL;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						buffer = malloc(sizeof *buffer + stride * height);
 | 
				
			||||||
 | 
						if (buffer == NULL)
 | 
				
			||||||
 | 
							return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						buffer->buffer.width = width;
 | 
				
			||||||
 | 
						buffer->buffer.height = height;
 | 
				
			||||||
 | 
						buffer->buffer.busy_count = 0;
 | 
				
			||||||
 | 
						buffer->format = format;
 | 
				
			||||||
 | 
						buffer->stride = stride;
 | 
				
			||||||
 | 
						buffer->offset = 0;
 | 
				
			||||||
 | 
						buffer->pool = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						buffer->buffer.resource.object.id = id;
 | 
				
			||||||
 | 
						buffer->buffer.resource.object.interface = &wl_buffer_interface;
 | 
				
			||||||
 | 
						buffer->buffer.resource.object.implementation = (void (**)(void))
 | 
				
			||||||
 | 
							&shm_buffer_interface;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						buffer->buffer.resource.data = buffer;
 | 
				
			||||||
 | 
						buffer->buffer.resource.client = client;
 | 
				
			||||||
 | 
						buffer->buffer.resource.destroy = destroy_buffer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						wl_client_add_resource(client, &buffer->buffer.resource);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &buffer->buffer;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
WL_EXPORT int
 | 
					WL_EXPORT int
 | 
				
			||||||
wl_buffer_is_shm(struct wl_buffer *buffer)
 | 
					wl_buffer_is_shm(struct wl_buffer *buffer)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
| 
						 | 
					@ -281,7 +322,10 @@ wl_shm_buffer_get_data(struct wl_buffer *buffer_base)
 | 
				
			||||||
	if (!wl_buffer_is_shm(buffer_base))
 | 
						if (!wl_buffer_is_shm(buffer_base))
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return buffer->pool->data + buffer->offset;
 | 
						if (buffer->pool)
 | 
				
			||||||
 | 
							return buffer->pool->data + buffer->offset;
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
							return buffer + 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
WL_EXPORT uint32_t
 | 
					WL_EXPORT uint32_t
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue