Added ability to disable vsync

This commit is contained in:
Jonathan Johnson 2024-03-17 08:44:02 -07:00
parent 3762bc6dc1
commit 18abfc66f2
No known key found for this signature in database
GPG key ID: A66D6A34D6620579
3 changed files with 71 additions and 49 deletions

View file

@ -233,6 +233,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
for a given `LoadedFont`.
- `Graphics::font_system()` returns a reference to the underlying Cosmic Text
`FontSystem`.
- `Window::vsync` is a new setting that allows disabling VSync for that window.
[plotters]: https://github.com/plotters-rs/plotters

96
Cargo.lock generated
View file

@ -172,7 +172,7 @@ dependencies = [
"attribute-derive-macro",
"proc-macro2",
"quote",
"syn 2.0.52",
"syn 2.0.53",
]
[[package]]
@ -188,7 +188,7 @@ dependencies = [
"proc-macro2",
"quote",
"quote-use 0.7.2",
"syn 2.0.52",
"syn 2.0.53",
]
[[package]]
@ -257,28 +257,28 @@ dependencies = [
[[package]]
name = "bumpalo"
version = "3.15.3"
version = "3.15.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b"
checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa"
[[package]]
name = "bytemuck"
version = "1.14.3"
version = "1.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2ef034f05691a48569bd920a96c81b9d91bbad1ab5ac7c4616c1f6ef36cb79f"
checksum = "5d6d68c57235a3a081186990eca2867354726650f42f7516ca50c28d6281fd15"
dependencies = [
"bytemuck_derive",
]
[[package]]
name = "bytemuck_derive"
version = "1.5.0"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1"
checksum = "4da9a32f3fed317401fa3c862968128267c3106685286e15d5aaa3d7389c2f60"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.52",
"syn 2.0.53",
]
[[package]]
@ -349,9 +349,9 @@ checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
[[package]]
name = "clipboard-win"
version = "5.2.0"
version = "5.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12f9a0700e0127ba15d1d52dd742097f821cd9c65939303a44d970465040a297"
checksum = "d517d4b86184dbb111d3556a10f1c8a04da7428d2987bf1081602bf11c3aa9ee"
dependencies = [
"error-code",
]
@ -586,7 +586,7 @@ dependencies = [
"proc-macro2",
"quote",
"quote-use 0.8.0",
"syn 2.0.52",
"syn 2.0.53",
]
[[package]]
@ -608,7 +608,7 @@ checksum = "62d671cc41a825ebabc75757b62d3d168c577f9149b2d49ece1dad1f72119d25"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.52",
"syn 2.0.53",
]
[[package]]
@ -755,9 +755,9 @@ dependencies = [
[[package]]
name = "font-types"
version = "0.4.2"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bd7f3ea17572640b606b35df42cfb6ecdf003704b062580e59918692190b73d"
checksum = "5b7f6040d337bd44434ab21fc6509154edf2cece88b23758d9d64654c4e7730b"
[[package]]
name = "fontconfig-parser"
@ -800,7 +800,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.52",
"syn 2.0.53",
]
[[package]]
@ -1099,9 +1099,9 @@ checksum = "d7e253b574775d0ebd7975c471fc18f72f0775a4d42b563b5fbc3c4068aa1075"
[[package]]
name = "kempt"
version = "0.2.3"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a37a6bdb52eae6acb1efbab069af766555a6d77712380fd48876b83543d3071"
checksum = "35bf4433cfb4933c3e4ad1964ec3dcb183a07154174b96944c20d7f0ae4b1f1b"
[[package]]
name = "khronos-egl"
@ -1123,7 +1123,7 @@ checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
[[package]]
name = "kludgine"
version = "0.7.0"
source = "git+https://github.com/khonsulabs/kludgine#f2bc0d6ea9ebe2709ab208723fc7a072cf87164f"
source = "git+https://github.com/khonsulabs/kludgine#c87af7ebc008842f6ed2584e4b0f004cfe5d0f1c"
dependencies = [
"ahash",
"alot",
@ -1279,7 +1279,7 @@ dependencies = [
"manyhow-macros 0.8.1",
"proc-macro2",
"quote",
"syn 2.0.52",
"syn 2.0.53",
]
[[package]]
@ -1291,7 +1291,7 @@ dependencies = [
"manyhow-macros 0.10.4",
"proc-macro2",
"quote",
"syn 2.0.52",
"syn 2.0.53",
]
[[package]]
@ -1459,7 +1459,7 @@ dependencies = [
"proc-macro-crate",
"proc-macro2",
"quote",
"syn 2.0.52",
"syn 2.0.53",
]
[[package]]
@ -1573,7 +1573,7 @@ checksum = "e8890702dbec0bad9116041ae586f84805b13eecd1d8b1df27c29998a9969d6d"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.52",
"syn 2.0.53",
]
[[package]]
@ -1641,7 +1641,7 @@ dependencies = [
"phf_shared",
"proc-macro2",
"quote",
"syn 2.0.52",
"syn 2.0.53",
]
[[package]]
@ -1735,7 +1735,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5"
dependencies = [
"proc-macro2",
"syn 2.0.52",
"syn 2.0.53",
]
[[package]]
@ -1760,9 +1760,9 @@ dependencies = [
[[package]]
name = "proc-macro2"
version = "1.0.78"
version = "1.0.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e"
dependencies = [
"unicode-ident",
]
@ -1808,7 +1808,7 @@ checksum = "a7b5abe3fe82fdeeb93f44d66a7b444dedf2e4827defb0a8e69c437b2de2ef94"
dependencies = [
"quote",
"quote-use-macros 0.7.2",
"syn 2.0.52",
"syn 2.0.53",
]
[[package]]
@ -1830,7 +1830,7 @@ dependencies = [
"derive-where",
"proc-macro2",
"quote",
"syn 2.0.52",
"syn 2.0.53",
]
[[package]]
@ -1843,7 +1843,7 @@ dependencies = [
"proc-macro-utils",
"proc-macro2",
"quote",
"syn 2.0.52",
"syn 2.0.53",
]
[[package]]
@ -1916,9 +1916,9 @@ dependencies = [
[[package]]
name = "read-fonts"
version = "0.15.6"
version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "17ea23eedb4d938031b6d4343222444608727a6aa68ec355e13588d9947ffe92"
checksum = "81c524658d3b77930a391f559756d91dbe829ab6cf4687083f615d395df99722"
dependencies = [
"font-types",
]
@ -2090,7 +2090,7 @@ checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.52",
"syn 2.0.53",
]
[[package]]
@ -2216,9 +2216,9 @@ checksum = "f83ba502a3265efb76efb89b0a2f7782ad6f2675015d4ce37e4b547dda42b499"
[[package]]
name = "swash"
version = "0.1.12"
version = "0.1.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d06ff4664af8923625604261c645f5c4cc610cc83c84bec74b50d76237089de7"
checksum = "9af636fb90d39858650cae1088a37e2862dab4e874a0bb49d6dfb5b2dacf0e24"
dependencies = [
"read-fonts",
"yazi",
@ -2238,9 +2238,9 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.52"
version = "2.0.53"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b699d15b36d1f02c3e7c69f8ffef53de37aefae075d8488d4ba1a7788d574a07"
checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032"
dependencies = [
"proc-macro2",
"quote",
@ -2267,22 +2267,22 @@ dependencies = [
[[package]]
name = "thiserror"
version = "1.0.57"
version = "1.0.58"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b"
checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297"
dependencies = [
"thiserror-impl",
]
[[package]]
name = "thiserror-impl"
version = "1.0.57"
version = "1.0.58"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81"
checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.52",
"syn 2.0.53",
]
[[package]]
@ -2382,7 +2382,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.52",
"syn 2.0.53",
]
[[package]]
@ -2539,7 +2539,7 @@ dependencies = [
"once_cell",
"proc-macro2",
"quote",
"syn 2.0.52",
"syn 2.0.53",
"wasm-bindgen-shared",
]
@ -2573,7 +2573,7 @@ checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.52",
"syn 2.0.53",
"wasm-bindgen-backend",
"wasm-bindgen-shared",
]
@ -3082,9 +3082,9 @@ checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8"
[[package]]
name = "winit"
version = "0.29.14"
version = "0.29.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7a3db69ffbe53a9babec7804da7a90f21020fcce1f2f5e5291e2311245b993d"
checksum = "0d59ad965a635657faf09c8f062badd885748428933dad8e8bdd64064d92e5ca"
dependencies = [
"ahash",
"android-activity",
@ -3238,7 +3238,7 @@ checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.52",
"syn 2.0.53",
]
[[package]]

View file

@ -475,6 +475,13 @@ where
pub cursive_font_family: FontFamilyList,
/// A collection of fonts that this window will load.
pub fonts: FontCollection,
/// When true, Cushy will try to use "vertical sync" to try to eliminate
/// graphical tearing that can occur if the graphics card has a new frame
/// presented while the monitor is currently rendering another frame.
///
/// Under the hood, Cushy uses `wgpu::PresentMode::AutoVsync` when true and
/// `wgpu::PresentMode::AutoNoVsync` when false.
pub vsync: bool,
on_closed: Option<OnceCallback>,
inner_size: Option<Dynamic<Size<UPx>>>,
@ -642,6 +649,7 @@ where
fonts.push(include_bytes!("../assets/RobotoFlex.ttf").to_vec());
fonts
},
vsync: true,
}
}
}
@ -689,6 +697,7 @@ where
fantasy_font_family: self.fantasy_font_family,
monospace_font_family: self.monospace_font_family,
cursive_font_family: self.cursive_font_family,
vsync: self.vsync,
}),
},
)?;
@ -767,6 +776,7 @@ struct OpenWindow<T> {
fonts: FontState,
cushy: Cushy,
on_closed: Option<OnceCallback>,
vsync: bool,
}
impl<T> OpenWindow<T>
@ -1124,6 +1134,7 @@ where
let theme = settings.theme.take().unwrap_or_default();
let inner_size = settings.inner_size.clone();
let on_closed = settings.on_closed.take();
let vsync = settings.vsync;
inner_size.set(window.inner_size());
@ -1179,6 +1190,7 @@ where
fonts,
cushy,
on_closed,
vsync,
}
}
@ -1212,7 +1224,6 @@ where
let fonts_changed = self.fonts.next_frame(graphics.font_system().db_mut());
if fonts_changed {
println!("Rebuilding font system");
graphics.rebuild_font_system();
}
let graphics = self.contents.new_frame(graphics);
@ -1707,6 +1718,14 @@ where
self.prepare(window, graphics);
}
fn present_mode(&self) -> wgpu::PresentMode {
if self.vsync {
wgpu::PresentMode::AutoVsync
} else {
wgpu::PresentMode::AutoNoVsync
}
}
fn focus_changed(
&mut self,
window: kludgine::app::Window<'_, WindowCommand>,
@ -1986,6 +2005,7 @@ pub(crate) mod sealed {
pub cursive_font_family: FontFamilyList,
pub font_data_to_load: FontCollection,
pub on_closed: Option<OnceCallback>,
pub vsync: bool,
}
#[derive(Debug, Clone)]
@ -2514,6 +2534,7 @@ impl CushyWindowBuilder {
cursive_font_family: FontFamilyList::default(),
font_data_to_load: FontCollection::default(),
on_closed: None,
vsync: false,
},
);