diff options
| author | Alexander Orzechowski <[email protected]> | 2022-05-19 14:16:52 -0400 | 
|---|---|---|
| committer | Alexander Orzechowski <[email protected]> | 2022-05-19 14:16:52 -0400 | 
| commit | f6e31284060e036898877ed4e13d07af6397cf4b (patch) | |
| tree | 72189e521cbd66590cd94aecb74b1bfab63a2c33 | |
| parent | fc43a84af93cbf3a76207a1e43bda40993f689f0 (diff) | |
wlr_scene: Allow buffer in wlr_scene_buffer to be NULL
This is useful to emulate an unmapped surface.
| -rw-r--r-- | wlr_scene.c | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/wlr_scene.c b/wlr_scene.c index d88dd55..777f8cb 100644 --- a/wlr_scene.c +++ b/wlr_scene.c @@ -358,7 +358,9 @@ struct wlr_scene_buffer *wlr_scene_buffer_create(struct wlr_scene_node *parent,  	}  	scene_node_init(&scene_buffer->node, WLR_SCENE_NODE_BUFFER, parent); -	scene_buffer->buffer = wlr_buffer_lock(buffer); +	if (buffer) { +		scene_buffer->buffer = wlr_buffer_lock(buffer); +	}  	scene_node_damage_whole(&scene_buffer->node); @@ -447,7 +449,7 @@ static void scene_node_get_size(struct wlr_scene_node *node,  		if (scene_buffer->dst_width > 0 && scene_buffer->dst_height > 0) {  			*width = scene_buffer->dst_width;  			*height = scene_buffer->dst_height; -		} else { +		} else if (scene_buffer->buffer) {  			if (scene_buffer->transform & WL_OUTPUT_TRANSFORM_90) {  				*height = scene_buffer->buffer->width;  				*width = scene_buffer->buffer->height; @@ -838,6 +840,9 @@ static void render_node_iterator(struct wlr_scene_node *node,  		break;  	case WLR_SCENE_NODE_BUFFER:;  		struct wlr_scene_buffer *scene_buffer = scene_buffer_from_node(node); +		if (!scene_buffer->buffer) { +			return; +		}  		struct wlr_renderer *renderer = output->renderer;  		texture = scene_buffer_get_texture(scene_buffer, renderer);  | 
