render: add support for explicit sync
This commit is contained in:
parent
1b4492c670
commit
816315170f
22 changed files with 531 additions and 94 deletions
|
|
@ -1,6 +1,6 @@
|
|||
use {
|
||||
crate::{
|
||||
gfx_api::{GfxApiOpt, SampleRect},
|
||||
gfx_api::{AcquireSync, GfxApiOpt, ReleaseSync, SampleRect},
|
||||
ifs::{
|
||||
wl_callback::WlCallback,
|
||||
wl_surface::{
|
||||
|
|
@ -151,13 +151,33 @@ impl Renderer<'_> {
|
|||
let scale = output.global.persistent.scale.get();
|
||||
for title in &rd.titles {
|
||||
let (x, y) = self.base.scale_point(x + title.tex_x, y + title.tex_y);
|
||||
self.base
|
||||
.render_texture(&title.tex, x, y, None, None, scale, None, None);
|
||||
self.base.render_texture(
|
||||
&title.tex,
|
||||
x,
|
||||
y,
|
||||
None,
|
||||
None,
|
||||
scale,
|
||||
None,
|
||||
None,
|
||||
AcquireSync::None,
|
||||
ReleaseSync::None,
|
||||
);
|
||||
}
|
||||
if let Some(status) = &rd.status {
|
||||
let (x, y) = self.base.scale_point(x + status.tex_x, y + status.tex_y);
|
||||
self.base
|
||||
.render_texture(&status.tex.texture, x, y, None, None, scale, None, None);
|
||||
self.base.render_texture(
|
||||
&status.tex.texture,
|
||||
x,
|
||||
y,
|
||||
None,
|
||||
None,
|
||||
scale,
|
||||
None,
|
||||
None,
|
||||
AcquireSync::None,
|
||||
ReleaseSync::None,
|
||||
);
|
||||
}
|
||||
}
|
||||
if let Some(ws) = output.workspace.get() {
|
||||
|
|
@ -193,8 +213,18 @@ impl Renderer<'_> {
|
|||
let (tex_width, tex_height) = tex.texture.size();
|
||||
let x = x + (pos.width() - tex_width) / 2;
|
||||
let y = y + (pos.height() - tex_height) / 2;
|
||||
self.base
|
||||
.render_texture(&tex.texture, x, y, None, None, self.base.scale, None, None);
|
||||
self.base.render_texture(
|
||||
&tex.texture,
|
||||
x,
|
||||
y,
|
||||
None,
|
||||
None,
|
||||
self.base.scale,
|
||||
None,
|
||||
None,
|
||||
AcquireSync::None,
|
||||
ReleaseSync::None,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -232,6 +262,8 @@ impl Renderer<'_> {
|
|||
self.base.scale,
|
||||
None,
|
||||
None,
|
||||
AcquireSync::None,
|
||||
ReleaseSync::None,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -354,6 +386,10 @@ impl Renderer<'_> {
|
|||
bounds: Option<&Rect>,
|
||||
) {
|
||||
if let Some(tex) = buffer.buffer.texture.get() {
|
||||
let release_sync = match buffer.sync {
|
||||
AcquireSync::Implicit => ReleaseSync::Implicit,
|
||||
AcquireSync::None | AcquireSync::SyncFile { .. } => ReleaseSync::Explicit,
|
||||
};
|
||||
self.base.render_texture(
|
||||
&tex,
|
||||
x,
|
||||
|
|
@ -363,6 +399,8 @@ impl Renderer<'_> {
|
|||
self.base.scale,
|
||||
bounds,
|
||||
Some(buffer.clone()),
|
||||
buffer.sync.clone(),
|
||||
release_sync,
|
||||
);
|
||||
} else if let Some(color) = &buffer.buffer.color {
|
||||
if let Some(rect) = Rect::new_sized(x, y, tsize.0, tsize.1) {
|
||||
|
|
@ -420,6 +458,8 @@ impl Renderer<'_> {
|
|||
self.base.scale,
|
||||
None,
|
||||
None,
|
||||
AcquireSync::None,
|
||||
ReleaseSync::None,
|
||||
);
|
||||
}
|
||||
let body = Rect::new_sized(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue