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