Notify window before presentation
This commit is contained in:
parent
363b0e903a
commit
31b98ee3eb
5 changed files with 29 additions and 2 deletions
|
|
@ -80,6 +80,7 @@ pub trait Compositor: Sized {
|
||||||
viewport: &Viewport,
|
viewport: &Viewport,
|
||||||
background_color: Color,
|
background_color: Color,
|
||||||
overlay: &[T],
|
overlay: &[T],
|
||||||
|
on_pre_present: impl FnOnce(),
|
||||||
) -> Result<(), SurfaceError>;
|
) -> Result<(), SurfaceError>;
|
||||||
|
|
||||||
/// Screenshots the current [`Renderer`] primitives to an offscreen texture, and returns the bytes of
|
/// Screenshots the current [`Renderer`] primitives to an offscreen texture, and returns the bytes of
|
||||||
|
|
@ -193,6 +194,7 @@ impl Compositor for () {
|
||||||
_viewport: &Viewport,
|
_viewport: &Viewport,
|
||||||
_background_color: Color,
|
_background_color: Color,
|
||||||
_overlay: &[T],
|
_overlay: &[T],
|
||||||
|
_on_pre_present: impl FnOnce(),
|
||||||
) -> Result<(), SurfaceError> {
|
) -> Result<(), SurfaceError> {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -322,6 +322,7 @@ where
|
||||||
viewport: &graphics::Viewport,
|
viewport: &graphics::Viewport,
|
||||||
background_color: Color,
|
background_color: Color,
|
||||||
overlay: &[T],
|
overlay: &[T],
|
||||||
|
on_pre_present: impl FnOnce(),
|
||||||
) -> Result<(), compositor::SurfaceError> {
|
) -> Result<(), compositor::SurfaceError> {
|
||||||
match (self, renderer, surface) {
|
match (self, renderer, surface) {
|
||||||
(
|
(
|
||||||
|
|
@ -334,6 +335,7 @@ where
|
||||||
viewport,
|
viewport,
|
||||||
background_color,
|
background_color,
|
||||||
overlay,
|
overlay,
|
||||||
|
on_pre_present,
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
Self::Secondary(compositor),
|
Self::Secondary(compositor),
|
||||||
|
|
@ -345,6 +347,7 @@ where
|
||||||
viewport,
|
viewport,
|
||||||
background_color,
|
background_color,
|
||||||
overlay,
|
overlay,
|
||||||
|
on_pre_present,
|
||||||
),
|
),
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -114,8 +114,16 @@ impl crate::graphics::Compositor for Compositor {
|
||||||
viewport: &Viewport,
|
viewport: &Viewport,
|
||||||
background_color: Color,
|
background_color: Color,
|
||||||
overlay: &[T],
|
overlay: &[T],
|
||||||
|
on_pre_present: impl FnOnce(),
|
||||||
) -> Result<(), compositor::SurfaceError> {
|
) -> Result<(), compositor::SurfaceError> {
|
||||||
present(renderer, surface, viewport, background_color, overlay)
|
present(
|
||||||
|
renderer,
|
||||||
|
surface,
|
||||||
|
viewport,
|
||||||
|
background_color,
|
||||||
|
overlay,
|
||||||
|
on_pre_present,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn screenshot<T: AsRef<str>>(
|
fn screenshot<T: AsRef<str>>(
|
||||||
|
|
@ -146,6 +154,7 @@ pub fn present<T: AsRef<str>>(
|
||||||
viewport: &Viewport,
|
viewport: &Viewport,
|
||||||
background_color: Color,
|
background_color: Color,
|
||||||
overlay: &[T],
|
overlay: &[T],
|
||||||
|
on_pre_present: impl FnOnce(),
|
||||||
) -> Result<(), compositor::SurfaceError> {
|
) -> Result<(), compositor::SurfaceError> {
|
||||||
let physical_size = viewport.physical_size();
|
let physical_size = viewport.physical_size();
|
||||||
|
|
||||||
|
|
@ -206,6 +215,7 @@ pub fn present<T: AsRef<str>>(
|
||||||
overlay,
|
overlay,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
on_pre_present();
|
||||||
buffer.present().map_err(|_| compositor::SurfaceError::Lost)
|
buffer.present().map_err(|_| compositor::SurfaceError::Lost)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -221,6 +221,7 @@ pub fn present<T: AsRef<str>>(
|
||||||
viewport: &Viewport,
|
viewport: &Viewport,
|
||||||
background_color: Color,
|
background_color: Color,
|
||||||
overlay: &[T],
|
overlay: &[T],
|
||||||
|
on_pre_present: impl FnOnce(),
|
||||||
) -> Result<(), compositor::SurfaceError> {
|
) -> Result<(), compositor::SurfaceError> {
|
||||||
match surface.get_current_texture() {
|
match surface.get_current_texture() {
|
||||||
Ok(frame) => {
|
Ok(frame) => {
|
||||||
|
|
@ -249,6 +250,7 @@ pub fn present<T: AsRef<str>>(
|
||||||
let _ = compositor.engine.submit(&compositor.queue, encoder);
|
let _ = compositor.engine.submit(&compositor.queue, encoder);
|
||||||
|
|
||||||
// Present the frame
|
// Present the frame
|
||||||
|
on_pre_present();
|
||||||
frame.present();
|
frame.present();
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
@ -365,8 +367,17 @@ impl graphics::Compositor for Compositor {
|
||||||
viewport: &Viewport,
|
viewport: &Viewport,
|
||||||
background_color: Color,
|
background_color: Color,
|
||||||
overlay: &[T],
|
overlay: &[T],
|
||||||
|
on_pre_present: impl FnOnce(),
|
||||||
) -> Result<(), compositor::SurfaceError> {
|
) -> Result<(), compositor::SurfaceError> {
|
||||||
present(self, renderer, surface, viewport, background_color, overlay)
|
present(
|
||||||
|
self,
|
||||||
|
renderer,
|
||||||
|
surface,
|
||||||
|
viewport,
|
||||||
|
background_color,
|
||||||
|
overlay,
|
||||||
|
on_pre_present,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn screenshot<T: AsRef<str>>(
|
fn screenshot<T: AsRef<str>>(
|
||||||
|
|
|
||||||
|
|
@ -892,6 +892,7 @@ async fn run_instance<P, C>(
|
||||||
window.state.viewport(),
|
window.state.viewport(),
|
||||||
window.state.background_color(),
|
window.state.background_color(),
|
||||||
&debug.overlay(),
|
&debug.overlay(),
|
||||||
|
|| window.raw.pre_present_notify(),
|
||||||
) {
|
) {
|
||||||
Ok(()) => {
|
Ok(()) => {
|
||||||
debug.render_finished();
|
debug.render_finished();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue