diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/cursor.rs | 17 | ||||
| -rw-r--r-- | src/niri.rs | 23 |
2 files changed, 25 insertions, 15 deletions
diff --git a/src/cursor.rs b/src/cursor.rs index 6bf92cd1..bdaba542 100644 --- a/src/cursor.rs +++ b/src/cursor.rs @@ -224,7 +224,7 @@ pub enum RenderCursor { }, } -type TextureCache = HashMap<(CursorIcon, i32), Vec<TextureBuffer<GlesTexture>>>; +type TextureCache = HashMap<(CursorIcon, i32), Vec<Option<TextureBuffer<GlesTexture>>>>; #[derive(Default)] pub struct CursorTextureCache { @@ -243,7 +243,7 @@ impl CursorTextureCache { scale: i32, cursor: &XCursor, idx: usize, - ) -> TextureBuffer<GlesTexture> { + ) -> Option<TextureBuffer<GlesTexture>> { self.cache .borrow_mut() .entry((icon, scale)) @@ -254,7 +254,7 @@ impl CursorTextureCache { .map(|frame| { let _span = tracy_client::span!("create TextureBuffer"); - TextureBuffer::from_memory( + let buffer = TextureBuffer::from_memory( renderer, &frame.pixels_rgba, Fourcc::Abgr8888, @@ -263,8 +263,15 @@ impl CursorTextureCache { scale, Transform::Normal, None, - ) - .unwrap() + ); + + match buffer { + Ok(x) => Some(x), + Err(err) => { + warn!("error creating a cursor texture: {err:?}"); + None + } + } }) .collect() })[idx] diff --git a/src/niri.rs b/src/niri.rs index 94a2056f..dc1efd87 100644 --- a/src/niri.rs +++ b/src/niri.rs @@ -1660,16 +1660,19 @@ impl Niri { idx, ); - let pointer_elements = vec![OutputRenderElements::NamedPointer( - PrimaryGpuTextureRenderElement(TextureRenderElement::from_texture_buffer( - pointer_pos.to_f64(), - &texture, - None, - None, - None, - Kind::Cursor, - )), - )]; + let mut pointer_elements = vec![]; + if let Some(texture) = texture { + pointer_elements.push(OutputRenderElements::NamedPointer( + PrimaryGpuTextureRenderElement(TextureRenderElement::from_texture_buffer( + pointer_pos.to_f64(), + &texture, + None, + None, + None, + Kind::Cursor, + )), + )); + } (pointer_elements, pointer_pos) } |
