Skip to content

Commit a7b0ac3

Browse files
committed
refactor(buffer): release on update tex
1 parent 7a52061 commit a7b0ac3

File tree

2 files changed

+28
-27
lines changed

2 files changed

+28
-27
lines changed

src/wayland/core/surface.rs

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use stereokit_rust::{material::Material, shader::Shader};
2121
use waynest::{
2222
server::{
2323
Client, Dispatcher, Result,
24-
protocol::core::wayland::{wl_buffer::WlBuffer, wl_output::Transform, wl_surface::*},
24+
protocol::core::wayland::{wl_output::Transform, wl_surface::*},
2525
},
2626
wire::ObjectId,
2727
};
@@ -144,6 +144,9 @@ impl Surface {
144144
.get_all_param_info()
145145
.set_texture("diffuse", new_tex);
146146
}
147+
let _ = self
148+
.message_sink
149+
.send(Message::ReleaseBuffer(buffer.clone()));
147150
self.apply_surface_materials();
148151

149152
let _ = state_lock.current().clean_lock.set(());
@@ -171,9 +174,7 @@ impl Surface {
171174
}
172175
pub fn frame_event(&self) {
173176
if let Some(callback_obj) = self.frame_callback_object.lock().take() {
174-
let _ = self
175-
.message_sink
176-
.send(Message::FrameNotification(callback_obj));
177+
let _ = self.message_sink.send(Message::Frame(callback_obj));
177178
}
178179
}
179180
// pub fn size(&self) -> Option<Vector2<u32>> {
@@ -185,25 +186,25 @@ impl Surface {
185186
// .map(|b| [b.size.x as u32, b.size.y as u32].into())
186187
// }
187188

188-
async fn release_old_buffer(&self, client: &mut Client) -> Result<()> {
189-
let (old_buffer, object) = {
190-
let lock = self.state.lock();
189+
// pub async fn release_old_buffer(&self, client: &mut Client) -> Result<()> {
190+
// let (old_buffer, object) = {
191+
// let lock = self.state.lock();
191192

192-
let Some(old_buffer) = lock.current().buffer.clone() else {
193-
return Ok(());
194-
};
195-
let new_buffer = lock.pending.buffer.as_ref();
196-
if new_buffer.map(Arc::as_ptr) == Some(Arc::as_ptr(&old_buffer)) {
197-
return Ok(());
198-
}
199-
drop(lock);
193+
// let Some(old_buffer) = lock.current().buffer.clone() else {
194+
// return Ok(());
195+
// };
196+
// let new_buffer = lock.pending.buffer.as_ref();
197+
// if new_buffer.map(Arc::as_ptr) == Some(Arc::as_ptr(&old_buffer)) {
198+
// return Ok(());
199+
// }
200+
// drop(lock);
200201

201-
(old_buffer.clone(), old_buffer.id)
202-
};
203-
old_buffer.release(client, object).await?;
202+
// (old_buffer.clone(), old_buffer.id)
203+
// };
204+
// old_buffer.release(client, object).await?;
204205

205-
Ok(())
206-
}
206+
// Ok(())
207+
// }
207208
}
208209
impl WlSurface for Surface {
209210
async fn attach(
@@ -263,9 +264,7 @@ impl WlSurface for Surface {
263264
Ok(())
264265
}
265266

266-
async fn commit(&self, client: &mut Client, _sender_id: ObjectId) -> Result<()> {
267-
self.release_old_buffer(client).await?;
268-
267+
async fn commit(&self, _client: &mut Client, _sender_id: ObjectId) -> Result<()> {
269268
{
270269
let mut lock = self.state.lock();
271270

src/wayland/mod.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use crate::core::{
88
};
99
use crate::wayland::core::seat::SeatMessage;
1010
use cluFlock::ToFlock;
11-
use core::{callback::Callback, display::Display, surface::WL_SURFACE_REGISTRY};
11+
use core::{buffer::Buffer, callback::Callback, display::Display, surface::WL_SURFACE_REGISTRY};
1212
use mint::Vector2;
1313
use std::{
1414
fs::{self, OpenOptions},
@@ -24,7 +24,7 @@ use waynest::{
2424
server::{
2525
self,
2626
protocol::{
27-
core::wayland::{wl_callback::WlCallback, wl_display::WlDisplay},
27+
core::wayland::{wl_buffer::WlBuffer, wl_callback::WlCallback, wl_display::WlDisplay},
2828
stable::xdg_shell::xdg_toplevel::XdgToplevel,
2929
},
3030
},
@@ -85,7 +85,8 @@ pub fn get_free_wayland_socket_path() -> Option<PathBuf> {
8585
}
8686

8787
pub enum Message {
88-
FrameNotification(Arc<Callback>),
88+
Frame(Arc<Callback>),
89+
ReleaseBuffer(Arc<Buffer>),
8990
CloseToplevel(Arc<Toplevel>),
9091
ResizeToplevel {
9192
toplevel: Arc<Toplevel>,
@@ -167,7 +168,7 @@ impl WaylandClient {
167168
message: Message,
168169
) -> Result<(), waynest::server::Error> {
169170
match message {
170-
Message::FrameNotification(callback) => {
171+
Message::Frame(callback) => {
171172
let serial = client.next_event_serial();
172173
client
173174
.get::<Display>(ObjectId::DISPLAY)
@@ -177,6 +178,7 @@ impl WaylandClient {
177178
client.remove(callback.0);
178179
callback.done(client, callback.0, serial).await
179180
}
181+
Message::ReleaseBuffer(buffer) => buffer.release(client, buffer.id).await,
180182
Message::CloseToplevel(toplevel) => toplevel.close(client, toplevel.object_id).await,
181183
Message::ResizeToplevel { toplevel, size } => {
182184
toplevel.set_size(size);

0 commit comments

Comments
 (0)