1
0
Fork 0
forked from wry/wry

video: unify output rendering

This commit is contained in:
Julian Orth 2024-02-16 18:27:51 +01:00
parent 82b3650e67
commit 0ba8648844
3 changed files with 34 additions and 25 deletions

View file

@ -380,22 +380,16 @@ impl MetalConnector {
if let Some(node) = self.state.root.outputs.get(&self.connector_id) { if let Some(node) = self.state.root.outputs.get(&self.connector_id) {
let mut rr = self.render_result.borrow_mut(); let mut rr = self.render_result.borrow_mut();
let render_fb = buffer.render_fb(); let render_fb = buffer.render_fb();
render_fb.render_node( self.state.present_output(
&*node, &node,
&self.state, &render_fb,
Some(node.global.pos.get()), &buffer.render_tex,
Some(&mut rr), &mut rr,
node.preferred_scale.get(),
!self.cursor_enabled.get(), !self.cursor_enabled.get(),
); );
if let Some(tex) = &buffer.dev_tex { if let Some(tex) = &buffer.dev_tex {
buffer.dev_fb.copy_texture(tex, 0, 0); buffer.dev_fb.copy_texture(tex, 0, 0);
} }
for fr in rr.frame_requests.drain(..) {
fr.send_done();
let _ = fr.client.remove_obj(&*fr);
}
node.perform_screencopies(&*render_fb, &buffer.render_tex);
} }
changes.change_object(plane.id, |c| { changes.change_object(plane.id, |c| {
c.change(plane.fb_id, buffer.drm.id().0 as _); c.change(plane.fb_id, buffer.drm.id().0 as _);

View file

@ -57,7 +57,6 @@ use {
collections::VecDeque, collections::VecDeque,
error::Error, error::Error,
future::pending, future::pending,
ops::DerefMut,
rc::Rc, rc::Rc,
}, },
thiserror::Error, thiserror::Error,
@ -733,21 +732,13 @@ impl XBackend {
image.last_serial.set(serial); image.last_serial.set(serial);
if let Some(node) = self.state.root.outputs.get(&output.id) { if let Some(node) = self.state.root.outputs.get(&output.id) {
let mut rr = self.render_result.borrow_mut(); self.state.present_output(
let fb = image.fb.get();
fb.render_node(
&*node, &*node,
&self.state, &image.fb.get(),
Some(node.global.pos.get()), &image.tex.get(),
Some(rr.deref_mut()), &mut self.render_result.borrow_mut(),
node.preferred_scale.get(),
true, true,
); );
for fr in rr.frame_requests.drain(..) {
fr.send_done();
let _ = fr.client.remove_obj(&*fr);
}
node.perform_screencopies(&*fb, &image.tex.get());
} }
let pp = PresentPixmap { let pp = PresentPixmap {

View file

@ -14,7 +14,7 @@ use {
dbus::Dbus, dbus::Dbus,
drm_feedback::DrmFeedback, drm_feedback::DrmFeedback,
forker::ForkerProxy, forker::ForkerProxy,
gfx_api::{GfxContext, GfxError}, gfx_api::{GfxContext, GfxError, GfxFramebuffer, GfxTexture},
gfx_apis::create_gfx_context, gfx_apis::create_gfx_context,
globals::{Globals, GlobalsError, WaylandGlobal}, globals::{Globals, GlobalsError, WaylandGlobal},
ifs::{ ifs::{
@ -36,6 +36,7 @@ use {
leaks::Tracker, leaks::Tracker,
logger::Logger, logger::Logger,
rect::Rect, rect::Rect,
renderer::RenderResult,
scale::Scale, scale::Scale,
theme::Theme, theme::Theme,
tree::{ tree::{
@ -730,4 +731,27 @@ impl State {
f(tester); f(tester);
} }
} }
pub fn present_output(
&self,
output: &OutputNode,
fb: &Rc<dyn GfxFramebuffer>,
tex: &Rc<dyn GfxTexture>,
rr: &mut RenderResult,
render_hw_cursor: bool,
) {
fb.render_node(
&*output,
self,
Some(output.global.pos.get()),
Some(rr),
output.preferred_scale.get(),
render_hw_cursor,
);
for fr in rr.frame_requests.drain(..) {
fr.send_done();
let _ = fr.client.remove_obj(&*fr);
}
output.perform_screencopies(&**fb, tex);
}
} }