mirror of
https://github.com/hannobraun/Fornjot
synced 2025-10-09 01:18:21 +00:00
commit
a4a5f2cbb2
4
.cargo/config.toml
Normal file
4
.cargo/config.toml
Normal file
@ -0,0 +1,4 @@
|
||||
[build]
|
||||
# As of wgpu 0.19.1, these are necessary to build for WebGPU.
|
||||
rustflags = ["--cfg=web_sys_unstable_apis"]
|
||||
rustdocflags = ["--cfg=web_sys_unstable_apis"]
|
133
Cargo.lock
generated
133
Cargo.lock
generated
@ -587,10 +587,35 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
|
||||
|
||||
[[package]]
|
||||
name = "com-rs"
|
||||
version = "0.2.1"
|
||||
name = "com"
|
||||
version = "0.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bf43edc576402991846b093a7ca18a3477e0ef9c588cde84964b5d3e43016642"
|
||||
checksum = "7e17887fd17353b65b1b2ef1c526c83e26cd72e74f598a8dc1bee13a48f3d9f6"
|
||||
dependencies = [
|
||||
"com_macros",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "com_macros"
|
||||
version = "0.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d375883580a668c7481ea6631fc1a8863e33cc335bf56bfad8d7e6d4b04b13a5"
|
||||
dependencies = [
|
||||
"com_macros_support",
|
||||
"proc-macro2",
|
||||
"syn 1.0.109",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "com_macros_support"
|
||||
version = "0.6.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ad899a1087a9296d5644792d7cb72b8e34c1bec8e7d4fbc002230169a6e8710c"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 1.0.109",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "combine"
|
||||
@ -688,12 +713,12 @@ checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991"
|
||||
|
||||
[[package]]
|
||||
name = "d3d12"
|
||||
version = "0.7.0"
|
||||
version = "0.19.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e16e44ab292b1dddfdaf7be62cfd8877df52f2f3fde5858d95bab606be259f20"
|
||||
checksum = "3e3d747f100290a1ca24b752186f61f6637e1deffe3bf6320de6fcb29510a307"
|
||||
dependencies = [
|
||||
"bitflags 2.4.2",
|
||||
"libloading 0.8.1",
|
||||
"libloading 0.7.4",
|
||||
"winapi",
|
||||
]
|
||||
|
||||
@ -927,7 +952,7 @@ dependencies = [
|
||||
"getrandom",
|
||||
"image",
|
||||
"nalgebra",
|
||||
"raw-window-handle 0.5.2",
|
||||
"raw-window-handle",
|
||||
"thiserror",
|
||||
"tobj",
|
||||
"tracing",
|
||||
@ -956,18 +981,6 @@ dependencies = [
|
||||
"miniz_oxide",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "flume"
|
||||
version = "0.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181"
|
||||
dependencies = [
|
||||
"futures-core",
|
||||
"futures-sink",
|
||||
"nanorand",
|
||||
"spin",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fnv"
|
||||
version = "1.0.7"
|
||||
@ -1196,11 +1209,10 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "gpu-allocator"
|
||||
version = "0.23.0"
|
||||
version = "0.25.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "40fe17c8a05d60c38c0a4e5a3c802f2f1ceb66b76c67d96ffb34bef0475a7fad"
|
||||
checksum = "6f56f6318968d03c18e1bcf4857ff88c61157e9da8e47c5f29055d60e1228884"
|
||||
dependencies = [
|
||||
"backtrace",
|
||||
"log",
|
||||
"presser",
|
||||
"thiserror",
|
||||
@ -1259,14 +1271,14 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "hassle-rs"
|
||||
version = "0.10.0"
|
||||
version = "0.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1397650ee315e8891a0df210707f0fc61771b0cc518c3023896064c5407cb3b0"
|
||||
checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
"com-rs",
|
||||
"bitflags 2.4.2",
|
||||
"com",
|
||||
"libc",
|
||||
"libloading 0.7.4",
|
||||
"libloading 0.8.1",
|
||||
"thiserror",
|
||||
"widestring",
|
||||
"winapi",
|
||||
@ -1767,9 +1779,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "naga"
|
||||
version = "0.14.2"
|
||||
version = "0.19.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ae585df4b6514cf8842ac0f1ab4992edc975892704835b549cf818dc0191249e"
|
||||
checksum = "8878eb410fc90853da3908aebfe61d73d26d4437ef850b70050461f939509899"
|
||||
dependencies = [
|
||||
"bit-set",
|
||||
"bitflags 2.4.2",
|
||||
@ -1812,15 +1824,6 @@ dependencies = [
|
||||
"syn 1.0.109",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nanorand"
|
||||
version = "0.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "native-tls"
|
||||
version = "0.2.11"
|
||||
@ -1850,8 +1853,7 @@ dependencies = [
|
||||
"log",
|
||||
"ndk-sys",
|
||||
"num_enum",
|
||||
"raw-window-handle 0.5.2",
|
||||
"raw-window-handle 0.6.0",
|
||||
"raw-window-handle",
|
||||
"thiserror",
|
||||
]
|
||||
|
||||
@ -2400,12 +2402,6 @@ version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab"
|
||||
|
||||
[[package]]
|
||||
name = "raw-window-handle"
|
||||
version = "0.5.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9"
|
||||
|
||||
[[package]]
|
||||
name = "raw-window-handle"
|
||||
version = "0.6.0"
|
||||
@ -2966,18 +2962,14 @@ name = "spin"
|
||||
version = "0.9.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
|
||||
dependencies = [
|
||||
"lock_api",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "spirv"
|
||||
version = "0.2.0+1.5.4"
|
||||
version = "0.3.0+sdk-1.3.268.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830"
|
||||
checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
"num-traits",
|
||||
"bitflags 2.4.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@ -3733,9 +3725,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "web-sys"
|
||||
version = "0.3.64"
|
||||
version = "0.3.67"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
|
||||
checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed"
|
||||
dependencies = [
|
||||
"js-sys",
|
||||
"wasm-bindgen",
|
||||
@ -3753,19 +3745,19 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "wgpu"
|
||||
version = "0.18.0"
|
||||
version = "0.19.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "30e7d227c9f961f2061c26f4cb0fbd4df0ef37e056edd0931783599d6c94ef24"
|
||||
checksum = "0bfe9a310dcf2e6b85f00c46059aaeaf4184caa8e29a1ecd4b7a704c3482332d"
|
||||
dependencies = [
|
||||
"arrayvec",
|
||||
"cfg-if",
|
||||
"flume",
|
||||
"cfg_aliases",
|
||||
"js-sys",
|
||||
"log",
|
||||
"naga",
|
||||
"parking_lot",
|
||||
"profiling",
|
||||
"raw-window-handle 0.5.2",
|
||||
"raw-window-handle",
|
||||
"smallvec",
|
||||
"static_assertions",
|
||||
"wasm-bindgen",
|
||||
@ -3778,19 +3770,22 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "wgpu-core"
|
||||
version = "0.18.1"
|
||||
version = "0.19.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ef91c1d62d1e9e81c79e600131a258edf75c9531cbdbde09c44a011a47312726"
|
||||
checksum = "6b15e451d4060ada0d99a64df44e4d590213496da7c4f245572d51071e8e30ed"
|
||||
dependencies = [
|
||||
"arrayvec",
|
||||
"bit-vec",
|
||||
"bitflags 2.4.2",
|
||||
"cfg_aliases",
|
||||
"codespan-reporting",
|
||||
"indexmap",
|
||||
"log",
|
||||
"naga",
|
||||
"once_cell",
|
||||
"parking_lot",
|
||||
"profiling",
|
||||
"raw-window-handle 0.5.2",
|
||||
"raw-window-handle",
|
||||
"rustc-hash",
|
||||
"smallvec",
|
||||
"thiserror",
|
||||
@ -3801,9 +3796,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "wgpu-hal"
|
||||
version = "0.18.1"
|
||||
version = "0.19.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b84ecc802da3eb67b4cf3dd9ea6fe45bbb47ef13e6c49c5c3240868a9cc6cdd9"
|
||||
checksum = "e3bb47856236bfafc0bc591a925eb036ac19cd987624a447ff353e7a7e7e6f72"
|
||||
dependencies = [
|
||||
"android_system_properties",
|
||||
"arrayvec",
|
||||
@ -3811,6 +3806,7 @@ dependencies = [
|
||||
"bit-set",
|
||||
"bitflags 2.4.2",
|
||||
"block",
|
||||
"cfg_aliases",
|
||||
"core-graphics-types",
|
||||
"d3d12",
|
||||
"glow",
|
||||
@ -3831,7 +3827,7 @@ dependencies = [
|
||||
"parking_lot",
|
||||
"profiling",
|
||||
"range-alloc",
|
||||
"raw-window-handle 0.5.2",
|
||||
"raw-window-handle",
|
||||
"renderdoc-sys",
|
||||
"rustc-hash",
|
||||
"smallvec",
|
||||
@ -3844,9 +3840,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "wgpu-types"
|
||||
version = "0.18.0"
|
||||
version = "0.19.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0d5ed5f0edf0de351fe311c53304986315ce866f394a2e6df0c4b3c70774bcdd"
|
||||
checksum = "895fcbeb772bfb049eb80b2d6e47f6c9af235284e9703c96fc0218a42ffd5af2"
|
||||
dependencies = [
|
||||
"bitflags 2.4.2",
|
||||
"js-sys",
|
||||
@ -4153,8 +4149,7 @@ dependencies = [
|
||||
"once_cell",
|
||||
"orbclient",
|
||||
"percent-encoding",
|
||||
"raw-window-handle 0.5.2",
|
||||
"raw-window-handle 0.6.0",
|
||||
"raw-window-handle",
|
||||
"redox_syscall 0.3.5",
|
||||
"rustix",
|
||||
"sctk-adwaita",
|
||||
|
@ -19,7 +19,7 @@ fj-interop.workspace = true
|
||||
fj-math.workspace = true
|
||||
nalgebra = "0.32.3"
|
||||
tobj = "4.0.1"
|
||||
raw-window-handle = "0.5.2"
|
||||
raw-window-handle = "0.6.0"
|
||||
thiserror = "1.0.53"
|
||||
tracing = "0.1.40"
|
||||
|
||||
@ -33,7 +33,7 @@ default-features = false
|
||||
features = ["png", "jpeg"]
|
||||
|
||||
[dependencies.wgpu]
|
||||
version = "0.18.0"
|
||||
version = "0.19.1"
|
||||
features = ["webgl"]
|
||||
|
||||
# We don't depend on `getrandom` directly, but we need this to enable the `js`
|
||||
|
@ -9,7 +9,7 @@ pub struct Device {
|
||||
impl Device {
|
||||
pub async fn from_preferred_adapter(
|
||||
instance: &wgpu::Instance,
|
||||
surface: &wgpu::Surface,
|
||||
surface: &wgpu::Surface<'_>,
|
||||
) -> Result<(Self, wgpu::Adapter, wgpu::Features), DeviceError> {
|
||||
let adapter = instance
|
||||
.request_adapter(&wgpu::RequestAdapterOptions {
|
||||
@ -30,8 +30,9 @@ impl Device {
|
||||
pub async fn try_from_all_adapters(
|
||||
instance: &wgpu::Instance,
|
||||
) -> Result<(Self, wgpu::Adapter, wgpu::Features), DeviceError> {
|
||||
let mut all_adapters =
|
||||
instance.enumerate_adapters(wgpu::Backends::all());
|
||||
let mut all_adapters = instance
|
||||
.enumerate_adapters(wgpu::Backends::all())
|
||||
.into_iter();
|
||||
|
||||
let result = loop {
|
||||
let Some(adapter) = all_adapters.next() else {
|
||||
@ -67,7 +68,7 @@ impl Device {
|
||||
pub async fn new(
|
||||
adapter: &wgpu::Adapter,
|
||||
) -> Result<(Self, wgpu::Features), DeviceError> {
|
||||
let features = {
|
||||
let required_features = {
|
||||
let desired_features = wgpu::Features::POLYGON_MODE_LINE;
|
||||
let available_features = adapter.features();
|
||||
|
||||
@ -82,7 +83,7 @@ impl Device {
|
||||
desired_features.intersection(available_features)
|
||||
};
|
||||
|
||||
let limits = {
|
||||
let required_limits = {
|
||||
// This is the lowest of the available defaults. It should guarantee
|
||||
// that we can run pretty much everywhere.
|
||||
let lowest_limits = wgpu::Limits::downlevel_webgl2_defaults();
|
||||
@ -98,14 +99,14 @@ impl Device {
|
||||
.request_device(
|
||||
&wgpu::DeviceDescriptor {
|
||||
label: None,
|
||||
features,
|
||||
limits,
|
||||
required_features,
|
||||
required_limits,
|
||||
},
|
||||
None,
|
||||
)
|
||||
.await?;
|
||||
|
||||
Ok((Device { device, queue }, features))
|
||||
Ok((Device { device, queue }, required_features))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -19,7 +19,7 @@ use super::{
|
||||
/// Graphics rendering state and target abstraction
|
||||
#[derive(Debug)]
|
||||
pub struct Renderer {
|
||||
surface: wgpu::Surface,
|
||||
surface: wgpu::Surface<'static>,
|
||||
device: Device,
|
||||
|
||||
surface_config: wgpu::SurfaceConfiguration,
|
||||
@ -44,7 +44,7 @@ impl Renderer {
|
||||
});
|
||||
|
||||
// This is sound, as `window` is an object to create a surface upon.
|
||||
let surface = unsafe { instance.create_surface(screen.window()) }?;
|
||||
let surface = instance.create_surface(screen.window())?;
|
||||
|
||||
for adapter in instance.enumerate_adapters(wgpu::Backends::all()) {
|
||||
debug!("Available adapter: {:?}", adapter.get_info());
|
||||
@ -106,6 +106,7 @@ impl Renderer {
|
||||
width,
|
||||
height,
|
||||
present_mode: wgpu::PresentMode::AutoVsync,
|
||||
desired_maximum_frame_latency: 2,
|
||||
// I don't understand what this option does. It was introduced with
|
||||
// wgpu 0.14, but we had already been using premultiplied alpha
|
||||
// blending before that. See the `BlendState` configuration of the
|
||||
|
@ -1,17 +1,19 @@
|
||||
//! Types that describe aspects of the screen
|
||||
|
||||
use raw_window_handle::{HasRawDisplayHandle, HasRawWindowHandle};
|
||||
use std::sync::Arc;
|
||||
|
||||
use raw_window_handle::{HasDisplayHandle, HasWindowHandle};
|
||||
|
||||
/// Needs to be implemented by types that can serve as a screen to render to
|
||||
pub trait Screen {
|
||||
/// The window
|
||||
type Window: HasRawDisplayHandle + HasRawWindowHandle;
|
||||
type Window: HasDisplayHandle + HasWindowHandle + Send + Sync + 'static;
|
||||
|
||||
/// Access the size of the screen
|
||||
fn size(&self) -> ScreenSize;
|
||||
|
||||
/// Access the window
|
||||
fn window(&self) -> &Self::Window;
|
||||
fn window(&self) -> Arc<Self::Window>;
|
||||
}
|
||||
|
||||
/// Cursor position in normalized coordinates (-1 to +1)
|
||||
|
@ -20,7 +20,4 @@ fj-math.workspace = true
|
||||
fj-viewer.workspace = true
|
||||
futures = "0.3.30"
|
||||
thiserror = "1.0.53"
|
||||
|
||||
[dependencies.winit]
|
||||
version = "0.29.2"
|
||||
features = ["rwh_05"]
|
||||
winit = "0.29.2"
|
||||
|
@ -1,8 +1,12 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use fj_viewer::{Screen, ScreenSize};
|
||||
use winit::{event_loop::EventLoop, window::WindowBuilder};
|
||||
|
||||
/// A window that can be used with `fj-viewer`
|
||||
pub struct Window(winit::window::Window);
|
||||
pub struct Window {
|
||||
inner: Arc<winit::window::Window>,
|
||||
}
|
||||
|
||||
impl Window {
|
||||
/// Create an instance of `Window` from the given `EventLoop`
|
||||
@ -33,7 +37,9 @@ impl Window {
|
||||
.with_transparent(false)
|
||||
.build(event_loop)?;
|
||||
|
||||
Ok(Self(window))
|
||||
Ok(Self {
|
||||
inner: Arc::new(window),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@ -41,7 +47,7 @@ impl Screen for Window {
|
||||
type Window = winit::window::Window;
|
||||
|
||||
fn size(&self) -> ScreenSize {
|
||||
let size = self.0.inner_size();
|
||||
let size = self.inner.inner_size();
|
||||
|
||||
ScreenSize {
|
||||
width: size.width,
|
||||
@ -49,8 +55,8 @@ impl Screen for Window {
|
||||
}
|
||||
}
|
||||
|
||||
fn window(&self) -> &winit::window::Window {
|
||||
&self.0
|
||||
fn window(&self) -> Arc<Self::Window> {
|
||||
self.inner.clone()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -39,7 +39,10 @@ fn main() -> anyhow::Result<()> {
|
||||
.arg("--all-features")
|
||||
.args(["--target", target.triple])
|
||||
.args(["-p", crate_])
|
||||
.env("RUSTFLAGS", "-D warnings");
|
||||
// Wee need to recreate that `web_sys` cfg here. It's already
|
||||
// specified in `.cargo/config`, but the use of `RUSTFLAGS` here
|
||||
// overwrites that.
|
||||
.env("RUSTFLAGS", "-D warnings --cfg=web_sys_unstable_apis");
|
||||
|
||||
println!("Running {command:?}");
|
||||
let status = command.status()?;
|
||||
|
Loading…
x
Reference in New Issue
Block a user