backend genericisation (?) and rwh 0.6

This commit is contained in:
Alex Janka 2024-02-08 15:27:48 +11:00
parent 63301c692e
commit 43b800ff80
18 changed files with 219 additions and 363 deletions

339
Cargo.lock generated
View file

@ -212,8 +212,7 @@ checksum = "175571dd1d178ced59193a6fc02dde1b972eb0bc56c892cde9beeceac5bf0f6b"
[[package]] [[package]]
name = "ash" name = "ash"
version = "0.37.3+1.3.251" version = "0.37.3+1.3.251"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://git.alexjanka.com/alex/ash?branch=raw-window-handle-0.6.0#55628b4023d692d604fb8cce67babb9eab0fa785"
checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a"
dependencies = [ dependencies = [
"libloading 0.7.4", "libloading 0.7.4",
] ]
@ -233,11 +232,10 @@ dependencies = [
[[package]] [[package]]
name = "ash-window" name = "ash-window"
version = "0.12.0" version = "0.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://git.alexjanka.com/alex/ash?branch=raw-window-handle-0.6.0#55628b4023d692d604fb8cce67babb9eab0fa785"
checksum = "b912285a7c29f3a8f87ca6f55afc48768624e5e33ec17dbd2f2075903f5e35ab"
dependencies = [ dependencies = [
"ash", "ash",
"raw-window-handle 0.5.2", "raw-window-handle 0.6.0",
"raw-window-metal", "raw-window-metal",
] ]
@ -310,32 +308,14 @@ checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
[[package]] [[package]]
name = "baseview" name = "baseview"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/RustAudio/baseview.git?rev=2c1b1a7b0fef1a29a5150a6a8f6fef6a0cbab8c4#2c1b1a7b0fef1a29a5150a6a8f6fef6a0cbab8c4" source = "git+https://git.alexjanka.com/alex/baseview#b3bbdea6c0f46d71de812d4f64835b13a8f7ffab"
dependencies = [ dependencies = [
"cocoa 0.24.1", "cocoa 0.24.1",
"core-foundation 0.9.4", "core-foundation 0.9.4",
"keyboard-types", "keyboard-types",
"nix 0.22.3", "nix 0.22.3",
"objc", "objc",
"raw-window-handle 0.5.2", "raw-window-handle 0.6.0",
"uuid 0.8.2",
"winapi",
"x11",
"xcb",
"xcb-util",
]
[[package]]
name = "baseview"
version = "0.1.0"
source = "git+https://git.alexjanka.com/alex/baseview#50a5602bca9b438fd125fb48cf0ade48fd794a36"
dependencies = [
"cocoa 0.24.1",
"core-foundation 0.9.4",
"keyboard-types",
"nix 0.22.3",
"objc",
"raw-window-handle 0.5.2",
"uuid 0.8.2", "uuid 0.8.2",
"winapi", "winapi",
"x11", "x11",
@ -532,7 +512,7 @@ checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
[[package]] [[package]]
name = "cacao" name = "cacao"
version = "0.4.0-beta2" version = "0.4.0-beta2"
source = "git+https://git.alexjanka.com/alex/cacao#65b32e79c0a8d088d19799b13e86634f3a64c10b" source = "git+https://git.alexjanka.com/alex/cacao#b19806af9731609e2875cb32acaeea17792a492a"
dependencies = [ dependencies = [
"bitmask-enum", "bitmask-enum",
"block2 0.2.0-alpha.6", "block2 0.2.0-alpha.6",
@ -804,12 +784,6 @@ dependencies = [
"com_macros", "com_macros",
] ]
[[package]]
name = "com-rs"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf43edc576402991846b093a7ca18a3477e0ef9c588cde84964b5d3e43016642"
[[package]] [[package]]
name = "com_macros" name = "com_macros"
version = "0.6.0" version = "0.6.0"
@ -1156,17 +1130,6 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991" checksum = "96a6ac251f4a2aca6b3f91340350eab87ae57c3f127ffeb585e92bd336717991"
[[package]]
name = "d3d12"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8f0de2f5a8e7bd4a9eec0e3c781992a4ce1724f68aec7d7a3715344de8b39da"
dependencies = [
"bitflags 1.3.2",
"libloading 0.7.4",
"winapi",
]
[[package]] [[package]]
name = "d3d12" name = "d3d12"
version = "0.19.0" version = "0.19.0"
@ -1174,7 +1137,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3e3d747f100290a1ca24b752186f61f6637e1deffe3bf6320de6fcb29510a307" checksum = "3e3d747f100290a1ca24b752186f61f6637e1deffe3bf6320de6fcb29510a307"
dependencies = [ dependencies = [
"bitflags 2.4.2", "bitflags 2.4.2",
"libloading 0.7.4", "libloading 0.8.1",
"winapi", "winapi",
] ]
@ -1473,7 +1436,7 @@ dependencies = [
"gilrs", "gilrs",
"image", "image",
"nokhwa", "nokhwa",
"raw-window-handle 0.5.2", "raw-window-handle 0.6.0",
"send_wrapper", "send_wrapper",
"serde", "serde",
"winit", "winit",
@ -1585,14 +1548,15 @@ dependencies = [
"librashader", "librashader",
"librashader-common", "librashader-common",
"librashader-presets", "librashader-presets",
"naga 0.19.0", "naga",
"num-traits", "num-traits",
"pixels", "pixels",
"rand", "rand",
"raw-window-handle 0.5.2", "raw-window-handle 0.6.0",
"ron", "ron",
"serde", "serde",
"serde_with", "serde_with",
"wgpu",
] ]
[[package]] [[package]]
@ -1685,18 +1649,6 @@ version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
[[package]]
name = "glow"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ca0fe580e4b60a8ab24a868bc08e2f03cbcb20d3d676601fa909386713333728"
dependencies = [
"js-sys",
"slotmap",
"wasm-bindgen",
"web-sys",
]
[[package]] [[package]]
name = "glow" name = "glow"
version = "0.13.1" version = "0.13.1"
@ -1729,16 +1681,6 @@ dependencies = [
"scroll", "scroll",
] ]
[[package]]
name = "gpu-alloc"
version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "22beaafc29b38204457ea030f6fb7a84c9e4dd1b86e311ba0542533453d87f62"
dependencies = [
"bitflags 1.3.2",
"gpu-alloc-types 0.2.0",
]
[[package]] [[package]]
name = "gpu-alloc" name = "gpu-alloc"
version = "0.6.0" version = "0.6.0"
@ -1746,16 +1688,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171"
dependencies = [ dependencies = [
"bitflags 2.4.2", "bitflags 2.4.2",
"gpu-alloc-types 0.3.0", "gpu-alloc-types",
]
[[package]]
name = "gpu-alloc-types"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "54804d0d6bc9d7f26db4eaec1ad10def69b599315f487d32c334a80d1efe67a5"
dependencies = [
"bitflags 1.3.2",
] ]
[[package]] [[package]]
@ -1777,8 +1710,6 @@ dependencies = [
"backtrace", "backtrace",
"log", "log",
"thiserror", "thiserror",
"winapi",
"windows 0.44.0",
] ]
[[package]] [[package]]
@ -1823,7 +1754,7 @@ dependencies = [
"frontend-common", "frontend-common",
"gb-emu-lib", "gb-emu-lib",
"objc2 0.3.0-beta.3", "objc2 0.3.0-beta.3",
"raw-window-handle 0.5.2", "raw-window-handle 0.6.0",
"serde", "serde",
"twinc_emu_vst", "twinc_emu_vst",
"uuid 1.7.0", "uuid 1.7.0",
@ -1864,21 +1795,6 @@ dependencies = [
"hashbrown 0.14.3", "hashbrown 0.14.3",
] ]
[[package]]
name = "hassle-rs"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1397650ee315e8891a0df210707f0fc61771b0cc518c3023896064c5407cb3b0"
dependencies = [
"bitflags 1.3.2",
"com-rs",
"libc",
"libloading 0.7.4",
"thiserror",
"widestring",
"winapi",
]
[[package]] [[package]]
name = "hassle-rs" name = "hassle-rs"
version = "0.11.0" version = "0.11.0"
@ -1888,7 +1804,7 @@ dependencies = [
"bitflags 2.4.2", "bitflags 2.4.2",
"com", "com",
"libc", "libc",
"libloading 0.7.4", "libloading 0.8.1",
"thiserror", "thiserror",
"widestring", "widestring",
"winapi", "winapi",
@ -2171,17 +2087,6 @@ dependencies = [
"unicode-segmentation", "unicode-segmentation",
] ]
[[package]]
name = "khronos-egl"
version = "4.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c2352bd1d0bceb871cb9d40f24360c8133c11d7486b68b5381c1dd1a32015e3"
dependencies = [
"libc",
"libloading 0.7.4",
"pkg-config",
]
[[package]] [[package]]
name = "khronos-egl" name = "khronos-egl"
version = "6.0.0" version = "6.0.0"
@ -2257,7 +2162,7 @@ dependencies = [
"librashader-runtime", "librashader-runtime",
"librashader-runtime-vk", "librashader-runtime-vk",
"librashader-runtime-wgpu", "librashader-runtime-wgpu",
"wgpu 0.19.1", "wgpu",
] ]
[[package]] [[package]]
@ -2283,7 +2188,7 @@ source = "git+https://git.alexjanka.com/alex/librashader#446b052657fee7cc364ae33
dependencies = [ dependencies = [
"ash", "ash",
"num-traits", "num-traits",
"wgpu-types 0.19.0", "wgpu-types",
] ]
[[package]] [[package]]
@ -2323,12 +2228,12 @@ dependencies = [
"librashader-presets", "librashader-presets",
"librashader-spirv-cross", "librashader-spirv-cross",
"matches", "matches",
"naga 0.19.0", "naga",
"rspirv", "rspirv",
"rustc-hash", "rustc-hash",
"serde", "serde",
"shaderc", "shaderc",
"spirv 0.3.0+sdk-1.3.268.0", "spirv",
"thiserror", "thiserror",
] ]
@ -2384,7 +2289,7 @@ dependencies = [
"rayon", "rayon",
"rustc-hash", "rustc-hash",
"thiserror", "thiserror",
"wgpu 0.19.1", "wgpu",
] ]
[[package]] [[package]]
@ -2544,20 +2449,6 @@ dependencies = [
"objc", "objc",
] ]
[[package]]
name = "metal"
version = "0.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "de11355d1f6781482d027a3b4d4de7825dcedb197bf573e0596d00008402d060"
dependencies = [
"bitflags 1.3.2",
"block",
"core-graphics-types 0.1.3",
"foreign-types 0.3.2",
"log",
"objc",
]
[[package]] [[package]]
name = "metal" name = "metal"
version = "0.27.0" version = "0.27.0"
@ -2635,26 +2526,6 @@ dependencies = [
"nasm-rs", "nasm-rs",
] ]
[[package]]
name = "naga"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bbcc2e0513220fd2b598e6068608d4462db20322c0e77e47f6f488dfcfc279cb"
dependencies = [
"bit-set",
"bitflags 1.3.2",
"codespan-reporting",
"hexf-parse",
"indexmap 1.9.3",
"log",
"num-traits",
"rustc-hash",
"spirv 0.2.0+1.5.4",
"termcolor",
"thiserror",
"unicode-xid",
]
[[package]] [[package]]
name = "naga" name = "naga"
version = "0.19.0" version = "0.19.0"
@ -2670,7 +2541,7 @@ dependencies = [
"num-traits", "num-traits",
"petgraph", "petgraph",
"rustc-hash", "rustc-hash",
"spirv 0.3.0+sdk-1.3.268.0", "spirv",
"termcolor", "termcolor",
"thiserror", "thiserror",
"unicode-xid", "unicode-xid",
@ -2762,14 +2633,14 @@ dependencies = [
[[package]] [[package]]
name = "nih_plug" name = "nih_plug"
version = "0.0.0" version = "0.0.0"
source = "git+https://github.com/robbert-vdh/nih-plug#7a01b57735bb0cb18da048e4eb5b303b85b30c4d" source = "git+https://git.alexjanka.com/alex/nih-plug#a54abb48e7571ce453a6b7a43d7a8d20f6b95a3e"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"anymap", "anymap",
"atomic_float", "atomic_float",
"atomic_refcell", "atomic_refcell",
"backtrace", "backtrace",
"baseview 0.1.0 (git+https://github.com/RustAudio/baseview.git?rev=2c1b1a7b0fef1a29a5150a6a8f6fef6a0cbab8c4)", "baseview",
"bitflags 1.3.2", "bitflags 1.3.2",
"cfg-if 1.0.0", "cfg-if 1.0.0",
"clap", "clap",
@ -2787,7 +2658,7 @@ dependencies = [
"nih_plug_derive", "nih_plug_derive",
"objc", "objc",
"parking_lot", "parking_lot",
"raw-window-handle 0.5.2", "raw-window-handle 0.6.0",
"rtrb", "rtrb",
"serde", "serde",
"serde_json", "serde_json",
@ -2799,7 +2670,7 @@ dependencies = [
[[package]] [[package]]
name = "nih_plug_derive" name = "nih_plug_derive"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/robbert-vdh/nih-plug#7a01b57735bb0cb18da048e4eb5b303b85b30c4d" source = "git+https://git.alexjanka.com/alex/nih-plug#a54abb48e7571ce453a6b7a43d7a8d20f6b95a3e"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -2809,7 +2680,7 @@ dependencies = [
[[package]] [[package]]
name = "nih_plug_xtask" name = "nih_plug_xtask"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/robbert-vdh/nih-plug#7a01b57735bb0cb18da048e4eb5b303b85b30c4d" source = "git+https://git.alexjanka.com/alex/nih-plug#a54abb48e7571ce453a6b7a43d7a8d20f6b95a3e"
dependencies = [ dependencies = [
"anyhow", "anyhow",
"goblin", "goblin",
@ -3225,15 +3096,14 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]] [[package]]
name = "pixels" name = "pixels"
version = "0.13.0" version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "git+https://git.alexjanka.com/alex/pixels#b577b326a8e661645ca5643091dbaf4348a70bb8"
checksum = "8ba8189b31db4f12fbf0d4a8eab2d7d7343a504a8d8a7ea4b14ffb2e6129136a"
dependencies = [ dependencies = [
"bytemuck", "bytemuck",
"pollster", "pollster",
"raw-window-handle 0.5.2", "raw-window-handle 0.6.0",
"thiserror", "thiserror",
"ultraviolet", "ultraviolet",
"wgpu 0.16.3", "wgpu",
] ]
[[package]] [[package]]
@ -3442,14 +3312,14 @@ checksum = "42a9830a0e1b9fb145ebb365b8bc4ccd75f290f98c0247deafbbe2c75cefb544"
[[package]] [[package]]
name = "raw-window-metal" name = "raw-window-metal"
version = "0.3.2" version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac4ea493258d54c24cb46aa9345d099e58e2ea3f30dd63667fc54fc892f18e76" checksum = "76e8caa82e31bb98fee12fa8f051c94a6aa36b07cddb03f0d4fc558988360ff1"
dependencies = [ dependencies = [
"cocoa 0.25.0", "cocoa 0.25.0",
"core-graphics 0.23.1 (registry+https://github.com/rust-lang/crates.io-index)", "core-graphics 0.23.1 (registry+https://github.com/rust-lang/crates.io-index)",
"objc", "objc",
"raw-window-handle 0.5.2", "raw-window-handle 0.6.0",
] ]
[[package]] [[package]]
@ -3591,7 +3461,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "69cf3a93856b6e5946537278df0d3075596371b1950ccff012f02b0f7eafec8d" checksum = "69cf3a93856b6e5946537278df0d3075596371b1950ccff012f02b0f7eafec8d"
dependencies = [ dependencies = [
"rustc-hash", "rustc-hash",
"spirv 0.3.0+sdk-1.3.268.0", "spirv",
] ]
[[package]] [[package]]
@ -3892,16 +3762,6 @@ dependencies = [
"lock_api", "lock_api",
] ]
[[package]]
name = "spirv"
version = "0.2.0+1.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830"
dependencies = [
"bitflags 1.3.2",
"num-traits",
]
[[package]] [[package]]
name = "spirv" name = "spirv"
version = "0.3.0+sdk-1.3.268.0" version = "0.3.0+sdk-1.3.268.0"
@ -4144,13 +4004,14 @@ name = "twinc_emu_vst"
version = "0.5.1" version = "0.5.1"
dependencies = [ dependencies = [
"async-ringbuf", "async-ringbuf",
"baseview 0.1.0 (git+https://git.alexjanka.com/alex/baseview)", "baseview",
"futures", "futures",
"gb-emu-lib", "gb-emu-lib",
"keyboard-types", "keyboard-types",
"nih_plug", "nih_plug",
"raw-window-handle 0.5.2", "raw-window-handle 0.6.0",
"serde", "serde",
"thiserror",
] ]
[[package]] [[package]]
@ -4525,30 +4386,6 @@ version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082"
[[package]]
name = "wgpu"
version = "0.16.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "480c965c9306872eb6255fa55e4b4953be55a8b64d57e61d7ff840d3dcc051cd"
dependencies = [
"arrayvec",
"cfg-if 1.0.0",
"js-sys",
"log",
"naga 0.12.3",
"parking_lot",
"profiling",
"raw-window-handle 0.5.2",
"smallvec",
"static_assertions",
"wasm-bindgen",
"wasm-bindgen-futures",
"web-sys",
"wgpu-core 0.16.1",
"wgpu-hal 0.16.2",
"wgpu-types 0.16.1",
]
[[package]] [[package]]
name = "wgpu" name = "wgpu"
version = "0.19.1" version = "0.19.1"
@ -4560,7 +4397,7 @@ dependencies = [
"cfg_aliases", "cfg_aliases",
"js-sys", "js-sys",
"log", "log",
"naga 0.19.0", "naga",
"parking_lot", "parking_lot",
"profiling", "profiling",
"raw-window-handle 0.6.0", "raw-window-handle 0.6.0",
@ -4569,32 +4406,9 @@ dependencies = [
"wasm-bindgen", "wasm-bindgen",
"wasm-bindgen-futures", "wasm-bindgen-futures",
"web-sys", "web-sys",
"wgpu-core 0.19.0", "wgpu-core",
"wgpu-hal 0.19.1", "wgpu-hal",
"wgpu-types 0.19.0", "wgpu-types",
]
[[package]]
name = "wgpu-core"
version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f478237b4bf0d5b70a39898a66fa67ca3a007d79f2520485b8b0c3dfc46f8c2"
dependencies = [
"arrayvec",
"bit-vec",
"bitflags 2.4.2",
"codespan-reporting",
"log",
"naga 0.12.3",
"parking_lot",
"profiling",
"raw-window-handle 0.5.2",
"rustc-hash",
"smallvec",
"thiserror",
"web-sys",
"wgpu-hal 0.16.2",
"wgpu-types 0.16.1",
] ]
[[package]] [[package]]
@ -4610,7 +4424,7 @@ dependencies = [
"codespan-reporting", "codespan-reporting",
"indexmap 2.1.0", "indexmap 2.1.0",
"log", "log",
"naga 0.19.0", "naga",
"once_cell", "once_cell",
"parking_lot", "parking_lot",
"profiling", "profiling",
@ -4619,50 +4433,8 @@ dependencies = [
"smallvec", "smallvec",
"thiserror", "thiserror",
"web-sys", "web-sys",
"wgpu-hal 0.19.1", "wgpu-hal",
"wgpu-types 0.19.0", "wgpu-types",
]
[[package]]
name = "wgpu-hal"
version = "0.16.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ecb3258078e936deee14fd4e0febe1cfe9bbb5ffef165cb60218d2ee5eb4448"
dependencies = [
"android_system_properties",
"arrayvec",
"ash",
"bit-set",
"bitflags 2.4.2",
"block",
"core-graphics-types 0.1.3",
"d3d12 0.6.0",
"foreign-types 0.3.2",
"glow 0.12.3",
"gpu-alloc 0.5.4",
"gpu-allocator 0.22.0",
"gpu-descriptor",
"hassle-rs 0.10.0",
"js-sys",
"khronos-egl 4.1.0",
"libc",
"libloading 0.8.1",
"log",
"metal 0.24.0",
"naga 0.12.3",
"objc",
"parking_lot",
"profiling",
"range-alloc",
"raw-window-handle 0.5.2",
"renderdoc-sys",
"rustc-hash",
"smallvec",
"thiserror",
"wasm-bindgen",
"web-sys",
"wgpu-types 0.16.1",
"winapi",
] ]
[[package]] [[package]]
@ -4679,20 +4451,20 @@ dependencies = [
"block", "block",
"cfg_aliases", "cfg_aliases",
"core-graphics-types 0.1.3", "core-graphics-types 0.1.3",
"d3d12 0.19.0", "d3d12",
"glow 0.13.1", "glow",
"glutin_wgl_sys", "glutin_wgl_sys",
"gpu-alloc 0.6.0", "gpu-alloc",
"gpu-allocator 0.25.0", "gpu-allocator 0.25.0",
"gpu-descriptor", "gpu-descriptor",
"hassle-rs 0.11.0", "hassle-rs",
"js-sys", "js-sys",
"khronos-egl 6.0.0", "khronos-egl",
"libc", "libc",
"libloading 0.7.4", "libloading 0.8.1",
"log", "log",
"metal 0.27.0", "metal 0.27.0",
"naga 0.19.0", "naga",
"objc", "objc",
"once_cell", "once_cell",
"parking_lot", "parking_lot",
@ -4705,21 +4477,10 @@ dependencies = [
"thiserror", "thiserror",
"wasm-bindgen", "wasm-bindgen",
"web-sys", "web-sys",
"wgpu-types 0.19.0", "wgpu-types",
"winapi", "winapi",
] ]
[[package]]
name = "wgpu-types"
version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0c153280bb108c2979eb5c7391cb18c56642dd3c072e55f52065e13e2a1252a"
dependencies = [
"bitflags 2.4.2",
"js-sys",
"web-sys",
]
[[package]] [[package]]
name = "wgpu-types" name = "wgpu-types"
version = "0.19.0" version = "0.19.0"

View file

@ -4,11 +4,13 @@ default-members = ["cli"]
resolver = "2" resolver = "2"
[workspace.dependencies] [workspace.dependencies]
thiserror = "1.0"
raw-window-handle = "0.6"
gb-emu-lib = { path = "./lib", features = ["config"] } gb-emu-lib = { path = "./lib", features = ["config"] }
frontend-common = { path = "./frontend-common" } frontend-common = { path = "./frontend-common" }
baseview = { git = "https://git.alexjanka.com/alex/baseview" } baseview = { git = "https://git.alexjanka.com/alex/baseview", default-features = false }
nih_plug = { git = "https://github.com/robbert-vdh/nih-plug" } nih_plug = { git = "https://git.alexjanka.com/alex/nih-plug" }
nih_plug_xtask = { git = "https://github.com/robbert-vdh/nih-plug" } nih_plug_xtask = { git = "https://git.alexjanka.com/alex/nih-plug" }
librashader = { git = "https://git.alexjanka.com/alex/librashader", default-features = false } librashader = { git = "https://git.alexjanka.com/alex/librashader", default-features = false }
librashader-common = { git = "https://git.alexjanka.com/alex/librashader" } librashader-common = { git = "https://git.alexjanka.com/alex/librashader" }
librashader-presets = { git = "https://git.alexjanka.com/alex/librashader" } librashader-presets = { git = "https://git.alexjanka.com/alex/librashader" }
@ -17,3 +19,11 @@ librashader-reflect = { git = "https://git.alexjanka.com/alex/librashader" }
librashader-runtime = { git = "https://git.alexjanka.com/alex/librashader" } librashader-runtime = { git = "https://git.alexjanka.com/alex/librashader" }
librashader-runtime-vk = { git = "https://git.alexjanka.com/alex/librashader" } librashader-runtime-vk = { git = "https://git.alexjanka.com/alex/librashader" }
librashader-cache = { git = "https://git.alexjanka.com/alex/librashader" } librashader-cache = { git = "https://git.alexjanka.com/alex/librashader" }
ash = { git = "https://git.alexjanka.com/alex/ash", branch = "raw-window-handle-0.6.0" }
ash-window = { git = "https://git.alexjanka.com/alex/ash", branch = "raw-window-handle-0.6.0" }
[patch."https://github.com/RustAudio/baseview.git"]
baseview = { git = "https://git.alexjanka.com/alex/baseview" }
[patch.crates-io]
ash = { git = "https://git.alexjanka.com/alex/ash", branch = "raw-window-handle-0.6.0" }

View file

@ -8,7 +8,7 @@ description = "Frontend common library for TWINC Game Boy (CGB/DMG) emulator"
identifier = "com.alexjanka.TWINC" identifier = "com.alexjanka.TWINC"
[features] [features]
default = ["vulkan-static"] default = ["wgpu", "pixels", "vulkan-static"]
pixels = ["gb-emu-lib/pixels-renderer"] pixels = ["gb-emu-lib/pixels-renderer"]
vulkan = ["gb-emu-lib/vulkan-renderer", "gb-emu-lib/vulkan-debug"] vulkan = ["gb-emu-lib/vulkan-renderer", "gb-emu-lib/vulkan-debug"]
vulkan-static = ["vulkan", "gb-emu-lib/vulkan-static"] vulkan-static = ["vulkan", "gb-emu-lib/vulkan-static"]
@ -26,7 +26,7 @@ nokhwa = { version = "0.10", features = [
send_wrapper = { version = "0.6.0", optional = true } send_wrapper = { version = "0.6.0", optional = true }
winit = { version = "0.29", features = ["rwh_05"] } winit = { version = "0.29", features = ["rwh_05"] }
winit_input_helper = "0.15" winit_input_helper = "0.15"
raw-window-handle = { version = "0.5" } raw-window-handle = { workspace = true }
serde = { version = "1.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] }
image = { version = "0.24", default-features = false, features = ["png"] } image = { version = "0.24", default-features = false, features = ["png"] }
bytemuck = "1.14" bytemuck = "1.14"

View file

@ -24,12 +24,6 @@ mod camera;
pub mod debug; pub mod debug;
pub mod window; pub mod window;
#[cfg(any(
all(feature = "vulkan", feature = "pixels"),
all(feature = "vulkan", feature = "wgpu"),
all(feature = "wgpu", feature = "pixels")
))]
compile_error!("select only one rendering backend!");
#[cfg(all( #[cfg(all(
not(feature = "vulkan"), not(feature = "vulkan"),
not(feature = "pixels"), not(feature = "pixels"),

View file

@ -14,7 +14,7 @@ use gb_emu_lib::{
}; };
use gilrs::{Button, Gilrs}; use gilrs::{Button, Gilrs};
use image::ImageBuffer; use image::ImageBuffer;
use raw_window_handle::HasRawDisplayHandle; use raw_window_handle::HasDisplayHandle;
use winit::{ use winit::{
dpi::PhysicalSize, dpi::PhysicalSize,
event::{Event, WindowEvent}, event::{Event, WindowEvent},
@ -64,7 +64,7 @@ where
let event_loop = EventLoop::new().unwrap(); let event_loop = EventLoop::new().unwrap();
let window_data_manager = Arc::new(Backend::RendererBackendManager::new( let window_data_manager = Arc::new(Backend::RendererBackendManager::new(
event_loop.raw_display_handle(), event_loop.display_handle().unwrap(),
)); ));
Self { Self {
event_loop, event_loop,

View file

@ -7,7 +7,7 @@ edition = "2021"
crate-type = ["cdylib", "rlib"] crate-type = ["cdylib", "rlib"]
[features] [features]
default = ["plugin", "vulkan-static"] default = ["plugin", "wgpu", "pixels", "vulkan-static"]
pixels = ["gb-emu-lib/pixels-renderer"] pixels = ["gb-emu-lib/pixels-renderer"]
vulkan = ["gb-emu-lib/vulkan-renderer"] vulkan = ["gb-emu-lib/vulkan-renderer"]
vulkan-static = ["vulkan", "gb-emu-lib/vulkan-static"] vulkan-static = ["vulkan", "gb-emu-lib/vulkan-static"]
@ -22,10 +22,14 @@ plugin = [
[dependencies] [dependencies]
gb-emu-lib = { workspace = true } gb-emu-lib = { workspace = true }
nih_plug = { workspace = true, features = ["standalone"], optional = true } nih_plug = { workspace = true, features = [
"standalone",
"vst3",
], optional = true }
baseview = { workspace = true, optional = true } baseview = { workspace = true, optional = true }
async-ringbuf = { version = "0.1", optional = true } async-ringbuf = { version = "0.1", optional = true }
futures = { version = "0.3", optional = true } futures = { version = "0.3", optional = true }
keyboard-types = { version = "0.6.2", optional = true } keyboard-types = { version = "0.6.2", optional = true }
raw-window-handle = { version = "0.5" } raw-window-handle = { workspace = true }
serde = { version = "1.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] }
thiserror = { workspace = true }

View file

@ -9,7 +9,7 @@ use gb_emu_lib::{
}; };
use keyboard_types::{Code, KeyState}; use keyboard_types::{Code, KeyState};
use nih_plug::prelude::*; use nih_plug::prelude::*;
use raw_window_handle::HasRawDisplayHandle; use raw_window_handle::HasDisplayHandle;
use super::{access_config, EmuComms}; use super::{access_config, EmuComms};
@ -68,11 +68,12 @@ impl Editor for TwincEditor {
title: String::from("gb-emu"), title: String::from("gb-emu"),
size, size,
scale: baseview::WindowScalePolicy::SystemScaleFactor, scale: baseview::WindowScalePolicy::SystemScaleFactor,
gl_config: Default::default(),
}, },
move |window| { move |window| {
let manager = Arc::new( let manager = Arc::new(
<ActiveBackend as RendererBackend>::RendererBackendManager::new( <ActiveBackend as RendererBackend>::RendererBackendManager::new(
window.raw_display_handle(), window.display_handle().unwrap(),
), ),
); );
TwincEditorWindow::new(window, rr_cloned, manager, size, shader_path) TwincEditorWindow::new(window, rr_cloned, manager, size, shader_path)

View file

@ -20,6 +20,6 @@ twinc_emu_vst = { path = "../gb-vst", default-features = false }
cacao = { git = "https://git.alexjanka.com/alex/cacao" } cacao = { git = "https://git.alexjanka.com/alex/cacao" }
objc = { version = "=0.3.0-beta.3", package = "objc2" } objc = { version = "=0.3.0-beta.3", package = "objc2" }
uuid = { version = "1.6", features = ["v4", "fast-rng"] } uuid = { version = "1.6", features = ["v4", "fast-rng"] }
raw-window-handle = { version = "0.5" } raw-window-handle = { workspace = true }
cpal = "0.15" cpal = "0.15"
serde = { version = "1.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] }

View file

@ -13,7 +13,6 @@ use cacao::{
window::{Window, WindowConfig, WindowDelegate, WindowStyle}, window::{Window, WindowConfig, WindowDelegate, WindowStyle},
Event, EventMask, EventMonitor, Event, EventMask, EventMonitor,
}, },
core_foundation::base::TCFTypeRef,
filesystem::ModalResponse, filesystem::ModalResponse,
foundation::{NSInteger, NSString}, foundation::{NSInteger, NSString},
}; };
@ -32,8 +31,8 @@ use objc::{
runtime::Object, runtime::Object,
}; };
use raw_window_handle::{ use raw_window_handle::{
AppKitDisplayHandle, AppKitWindowHandle, HasRawDisplayHandle, HasRawWindowHandle, AppKitDisplayHandle, AppKitWindowHandle, DisplayHandle, HasDisplayHandle, HasWindowHandle,
RawDisplayHandle, RawWindowHandle, RawDisplayHandle, RawWindowHandle, WindowHandle,
}; };
use super::{dispatch, AppMessage, CoreMessage}; use super::{dispatch, AppMessage, CoreMessage};
@ -165,7 +164,7 @@ pub struct CacaoWindowManager {
} }
impl CacaoWindowManager { impl CacaoWindowManager {
pub fn new(display_handle: RawDisplayHandle) -> Self { pub fn new(display_handle: DisplayHandle) -> Self {
let _button_handler = ButtonHandler::new(); let _button_handler = ButtonHandler::new();
Self { Self {
@ -506,18 +505,23 @@ impl WindowDelegate for CacaoWindow {
struct WindowHandleWrapper<'a, T>(&'a Window<T>); struct WindowHandleWrapper<'a, T>(&'a Window<T>);
unsafe impl<'a, T> HasRawDisplayHandle for WindowHandleWrapper<'a, T> { impl<'a, T> HasDisplayHandle for WindowHandleWrapper<'a, T> {
fn raw_display_handle(&self) -> RawDisplayHandle { fn display_handle(&self) -> Result<DisplayHandle<'_>, raw_window_handle::HandleError> {
RawDisplayHandle::AppKit(AppKitDisplayHandle::empty()) Ok(unsafe {
DisplayHandle::borrow_raw(RawDisplayHandle::AppKit(AppKitDisplayHandle::new()))
})
} }
} }
unsafe impl<'a, T> HasRawWindowHandle for WindowHandleWrapper<'a, T> { impl<'a, T> HasWindowHandle for WindowHandleWrapper<'a, T> {
fn raw_window_handle(&self) -> RawWindowHandle { fn window_handle(&self) -> Result<WindowHandle<'_>, raw_window_handle::HandleError> {
let Self(w) = self; let Self(w) = self;
let mut handle = AppKitWindowHandle::empty();
handle.ns_window = objc::rc::Id::as_ptr(&w.objc).as_void_ptr().cast_mut();
RawWindowHandle::AppKit(handle) Ok(unsafe {
WindowHandle::borrow_raw(RawWindowHandle::AppKit(AppKitWindowHandle::new(
w.content_view_ptr()
.ok_or(raw_window_handle::HandleError::Unavailable)?,
)))
})
} }
} }

View file

@ -10,7 +10,7 @@ use cacao::notification_center::Dispatcher;
use frontend_common::audio; use frontend_common::audio;
use gb_emu_lib::config::{NamedConfig, CONFIG_MANAGER}; use gb_emu_lib::config::{NamedConfig, CONFIG_MANAGER};
use gb_emu_lib::connect::{EmulatorCoreTrait, EmulatorMessage}; use gb_emu_lib::connect::{EmulatorCoreTrait, EmulatorMessage};
use raw_window_handle::{AppKitDisplayHandle, RawDisplayHandle}; use raw_window_handle::{AppKitDisplayHandle, DisplayHandle, RawDisplayHandle};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use self::cacao_window_manager::{CacaoWindowManager, EmuWindowMessage}; use self::cacao_window_manager::{CacaoWindowManager, EmuWindowMessage};
@ -92,9 +92,9 @@ impl Default for TwincUiApp {
}, },
PreferencesUi::new(), PreferencesUi::new(),
)), )),
current_game: RwLock::new(CacaoWindowManager::new(RawDisplayHandle::AppKit( current_game: RwLock::new(CacaoWindowManager::new(unsafe {
AppKitDisplayHandle::empty(), DisplayHandle::borrow_raw(RawDisplayHandle::AppKit(AppKitDisplayHandle::new()))
))), })),
gui_config: RwLock::new(CONFIG_MANAGER.load_or_create_config()), gui_config: RwLock::new(CONFIG_MANAGER.load_or_create_config()),
} }
} }

View file

@ -19,7 +19,12 @@ vulkan-renderer = [
vulkan-static = ["dep:ash-molten", "vulkan-renderer"] vulkan-static = ["dep:ash-molten", "vulkan-renderer"]
vulkan-debug = [] vulkan-debug = []
pixels-renderer = ["renderer", "dep:pixels"] pixels-renderer = ["renderer", "dep:pixels"]
wgpu-renderer = ["renderer", "dep:librashader", "librashader/runtime-wgpu"] wgpu-renderer = [
"renderer",
"dep:librashader",
"librashader/runtime-wgpu",
"dep:wgpu",
]
renderer = [] renderer = []
config = ["dep:directories", "dep:ron"] config = ["dep:directories", "dep:ron"]
error-colour = [] error-colour = []
@ -33,16 +38,18 @@ serde = { version = "1.0", features = ["derive"] }
serde_with = "3.0" serde_with = "3.0"
bytemuck = "1.14" bytemuck = "1.14"
num-traits = "0.2" num-traits = "0.2"
pixels = { version = "0.13", optional = true } pixels = { git = "https://git.alexjanka.com/alex/pixels", optional = true }
ash = { version = "0.37", features = ["linked"], optional = true } ash = { workspace = true, features = ["linked"], optional = true }
ash-window = { version = "0.12", optional = true } ash-window = { workspace = true, optional = true }
raw-window-handle = { version = "0.5" }
raw-window-handle = { workspace = true }
librashader = { workspace = true, optional = true } librashader = { workspace = true, optional = true }
librashader-presets = { workspace = true, optional = true } librashader-presets = { workspace = true, optional = true }
librashader-common = { workspace = true, optional = true } librashader-common = { workspace = true, optional = true }
directories = { version = "5.0", optional = true } directories = { version = "5.0", optional = true }
ron = { version = "0.8", optional = true } ron = { version = "0.8", optional = true }
lazy_static = "1.4" lazy_static = "1.4"
wgpu = { version = "0.19", optional = true }
[build-dependencies] [build-dependencies]
naga = { version = "0.19", optional = true, features = ["wgsl-in", "spv-out"] } naga = { version = "0.19", optional = true, features = ["wgsl-in", "spv-out"] }

View file

@ -8,13 +8,6 @@ use processor::{
}; };
use std::sync::mpsc::Receiver; use std::sync::mpsc::Receiver;
#[cfg(any(
all(feature = "vulkan-renderer", feature = "pixels-renderer"),
all(feature = "vulkan-renderer", feature = "wgpu-renderer"),
all(feature = "wgpu-renderer", feature = "pixels-renderer")
))]
compile_error!("select only one rendering backend!");
pub mod renderer; pub mod renderer;
#[cfg(feature = "config")] #[cfg(feature = "config")]

View file

@ -0,0 +1,35 @@
use raw_window_handle::{DisplayHandle, HasDisplayHandle, HasWindowHandle};
pub struct DummyHandle<'a> {
pub window: raw_window_handle::WindowHandle<'a>,
pub display: raw_window_handle::DisplayHandle<'a>,
}
impl<'a> DummyHandle<'a> {
pub fn new<T>(value: &'a T) -> Option<Self>
where
T: HasWindowHandle + HasDisplayHandle + 'a,
{
Some(Self {
window: value.window_handle().ok()?,
display: value.display_handle().ok()?,
})
}
}
unsafe impl<'a> Sync for DummyHandle<'a> {}
unsafe impl<'a> Send for DummyHandle<'a> {}
impl<'a> HasWindowHandle for DummyHandle<'a> {
fn window_handle(
&self,
) -> Result<raw_window_handle::WindowHandle<'_>, raw_window_handle::HandleError> {
Ok(self.window)
}
}
impl<'a> HasDisplayHandle for DummyHandle<'a> {
fn display_handle(&self) -> Result<DisplayHandle<'_>, raw_window_handle::HandleError> {
Ok(self.display)
}
}

View file

@ -1,14 +1,17 @@
use std::{path::PathBuf, sync::Arc}; use std::{path::PathBuf, sync::Arc};
use raw_window_handle::{HasRawDisplayHandle, HasRawWindowHandle, RawDisplayHandle}; use raw_window_handle::{DisplayHandle, HasDisplayHandle, HasWindowHandle};
use crate::connect::ResolutionData; use crate::connect::ResolutionData;
#[cfg(feature = "vulkan-renderer")]
pub type ActiveBackend = vulkan::VulkanBackend;
#[cfg(feature = "wgpu-renderer")] #[cfg(feature = "wgpu-renderer")]
pub type ActiveBackend = wgpu::WgpuBackend; pub type ActiveBackend = wgpu::WgpuBackend;
#[cfg(feature = "pixels-renderer")] #[cfg(all(feature = "vulkan-renderer", not(feature = "wgpu-renderer")))]
pub type ActiveBackend = vulkan::VulkanBackend;
#[cfg(all(
feature = "pixels-renderer",
not(any(feature = "wgpu-renderer", feature = "vulkan-renderer"))
))]
pub type ActiveBackend = pixels::PixelsBackend; pub type ActiveBackend = pixels::PixelsBackend;
#[cfg(feature = "pixels-renderer")] #[cfg(feature = "pixels-renderer")]
@ -18,16 +21,18 @@ pub mod vulkan;
#[cfg(feature = "wgpu-renderer")] #[cfg(feature = "wgpu-renderer")]
pub mod wgpu; pub mod wgpu;
mod compat;
pub trait RendererBackend { pub trait RendererBackend {
type RendererBackendManager: RendererBackendManager; type RendererBackendManager: RendererBackendManager;
fn new<W: HasRawDisplayHandle + HasRawWindowHandle>( fn new<W: HasDisplayHandle + HasWindowHandle>(
resolutions: ResolutionData, resolutions: ResolutionData,
window: &W, window: &W,
shader_path: Option<PathBuf>, shader_path: Option<PathBuf>,
manager: Arc<Self::RendererBackendManager>, manager: Arc<Self::RendererBackendManager>,
) -> Self; ) -> Self;
fn resize<W: HasRawDisplayHandle + HasRawWindowHandle>( fn resize<W: HasDisplayHandle + HasWindowHandle>(
&mut self, &mut self,
resolutions: ResolutionData, resolutions: ResolutionData,
window: &W, window: &W,
@ -37,5 +42,5 @@ pub trait RendererBackend {
} }
pub trait RendererBackendManager { pub trait RendererBackendManager {
fn new(display_handle: RawDisplayHandle) -> Self; fn new(display_handle: DisplayHandle) -> Self;
} }

View file

@ -1,19 +1,16 @@
use std::{path::PathBuf, sync::Arc}; use std::{path::PathBuf, sync::Arc};
use pixels::{ use pixels::{Pixels, SurfaceTexture};
raw_window_handle::{HasRawDisplayHandle, HasRawWindowHandle}, use raw_window_handle::{DisplayHandle, HasDisplayHandle, HasWindowHandle};
Pixels, SurfaceTexture,
};
use raw_window_handle::RawDisplayHandle;
use crate::connect::ResolutionData; use crate::connect::ResolutionData;
use super::{RendererBackend, RendererBackendManager}; use super::{compat::DummyHandle, RendererBackend, RendererBackendManager};
pub struct PixelsBackendManager {} pub struct PixelsBackendManager {}
impl RendererBackendManager for PixelsBackendManager { impl RendererBackendManager for PixelsBackendManager {
fn new(_: RawDisplayHandle) -> Self { fn new(_: DisplayHandle) -> Self {
Self {} Self {}
} }
} }
@ -25,7 +22,7 @@ pub struct PixelsBackend {
impl RendererBackend for PixelsBackend { impl RendererBackend for PixelsBackend {
type RendererBackendManager = PixelsBackendManager; type RendererBackendManager = PixelsBackendManager;
fn new<W: HasRawDisplayHandle + HasRawWindowHandle>( fn new<W: HasDisplayHandle + HasWindowHandle>(
resolutions: ResolutionData, resolutions: ResolutionData,
window: &W, window: &W,
_: Option<PathBuf>, _: Option<PathBuf>,
@ -36,7 +33,7 @@ impl RendererBackend for PixelsBackend {
} }
} }
fn resize<W: HasRawDisplayHandle + HasRawWindowHandle>( fn resize<W: HasDisplayHandle + HasWindowHandle>(
&mut self, &mut self,
resolutions: ResolutionData, resolutions: ResolutionData,
window: &W, window: &W,
@ -57,12 +54,13 @@ impl RendererBackend for PixelsBackend {
} }
} }
fn new_pixels<W: HasRawDisplayHandle + HasRawWindowHandle>( fn new_pixels<W: HasDisplayHandle + HasWindowHandle>(
resolutions: ResolutionData, resolutions: ResolutionData,
window: &W, window: &W,
) -> Pixels { ) -> Pixels {
let surface_texture: SurfaceTexture<'_, W> = let dummy = DummyHandle::new(window).unwrap();
SurfaceTexture::new(resolutions.real_width, resolutions.real_height, window); let surface_texture: SurfaceTexture<'_, DummyHandle> =
SurfaceTexture::new(resolutions.real_width, resolutions.real_height, &dummy);
pixels::PixelsBuilder::new( pixels::PixelsBuilder::new(
resolutions.scaled_width, resolutions.scaled_width,
resolutions.scaled_height, resolutions.scaled_height,

View file

@ -1,7 +1,7 @@
use ash::{util::Align, vk, Entry, Instance}; use ash::{util::Align, vk, Entry, Instance};
use ash_window::enumerate_required_extensions; use ash_window::enumerate_required_extensions;
use librashader::runtime::vk::{FilterChain, FilterChainOptions, FrameOptions, VulkanObjects}; use librashader::runtime::vk::{FilterChain, FilterChainOptions, FrameOptions, VulkanObjects};
use raw_window_handle::{HasRawDisplayHandle, HasRawWindowHandle, RawDisplayHandle}; use raw_window_handle::{DisplayHandle, HasDisplayHandle, HasWindowHandle};
use std::{mem::ManuallyDrop, path::PathBuf, sync::Arc}; use std::{mem::ManuallyDrop, path::PathBuf, sync::Arc};
use crate::connect::ResolutionData; use crate::connect::ResolutionData;
@ -36,7 +36,7 @@ pub struct VulkanBackendManager {
} }
impl RendererBackendManager for VulkanBackendManager { impl RendererBackendManager for VulkanBackendManager {
fn new(display_handle: RawDisplayHandle) -> Self { fn new(display_handle: DisplayHandle) -> Self {
#[cfg(all(any(target_os = "macos", target_os = "ios"), feature = "vulkan-static"))] #[cfg(all(any(target_os = "macos", target_os = "ios"), feature = "vulkan-static"))]
let entry = ash_molten::load(); let entry = ash_molten::load();
#[cfg(not(all(any(target_os = "macos", target_os = "ios"), feature = "vulkan-static")))] #[cfg(not(all(any(target_os = "macos", target_os = "ios"), feature = "vulkan-static")))]
@ -45,7 +45,7 @@ impl RendererBackendManager for VulkanBackendManager {
let name = std::ffi::CString::new("gameboy").unwrap(); let name = std::ffi::CString::new("gameboy").unwrap();
#[allow(unused_mut)] #[allow(unused_mut)]
let mut extension_names = enumerate_required_extensions(display_handle) let mut extension_names = enumerate_required_extensions(display_handle.as_raw())
.unwrap() .unwrap()
.to_vec(); .to_vec();
@ -120,7 +120,7 @@ pub struct VulkanWindowOptions {
impl RendererBackend for VulkanBackend { impl RendererBackend for VulkanBackend {
type RendererBackendManager = VulkanBackendManager; type RendererBackendManager = VulkanBackendManager;
fn new<W: HasRawDisplayHandle + HasRawWindowHandle>( fn new<W: HasDisplayHandle + HasWindowHandle>(
resolutions: ResolutionData, resolutions: ResolutionData,
window: &W, window: &W,
shader_path: Option<PathBuf>, shader_path: Option<PathBuf>,
@ -189,7 +189,7 @@ impl RendererBackend for VulkanBackend {
} }
} }
fn resize<W: HasRawDisplayHandle + HasRawWindowHandle>( fn resize<W: HasDisplayHandle + HasWindowHandle>(
&mut self, &mut self,
resolutions: ResolutionData, resolutions: ResolutionData,
_window: &W, _window: &W,
@ -220,7 +220,7 @@ struct VulkanWindowInner {
} }
impl VulkanWindowInner { impl VulkanWindowInner {
unsafe fn new<W: HasRawDisplayHandle + HasRawWindowHandle>( unsafe fn new<W: HasDisplayHandle + HasWindowHandle>(
resolutions: ResolutionData, resolutions: ResolutionData,
window: &W, window: &W,
manager: &VulkanBackendManager, manager: &VulkanBackendManager,

View file

@ -2,6 +2,7 @@ use ash::{
extensions::khr::{Surface, Swapchain}, extensions::khr::{Surface, Swapchain},
vk, Device, vk, Device,
}; };
#[allow(deprecated)]
use raw_window_handle::{HasRawDisplayHandle, HasRawWindowHandle}; use raw_window_handle::{HasRawDisplayHandle, HasRawWindowHandle};
use crate::connect::ResolutionData; use crate::connect::ResolutionData;
@ -207,6 +208,7 @@ pub(super) struct SurfaceData {
} }
impl SurfaceData { impl SurfaceData {
#[allow(deprecated)]
pub(super) unsafe fn new<W: HasRawDisplayHandle + HasRawWindowHandle>( pub(super) unsafe fn new<W: HasRawDisplayHandle + HasRawWindowHandle>(
window: &W, window: &W,
manager: &VulkanBackendManager, manager: &VulkanBackendManager,
@ -214,8 +216,8 @@ impl SurfaceData {
let surface = ash_window::create_surface( let surface = ash_window::create_surface(
&manager.entry, &manager.entry,
&manager.instance, &manager.instance,
window.raw_display_handle(), window.raw_display_handle().unwrap(),
window.raw_window_handle(), window.raw_window_handle().unwrap(),
None, None,
) )
.unwrap(); .unwrap();

View file

@ -1,3 +1,45 @@
use raw_window_handle::{DisplayHandle, HasDisplayHandle, HasWindowHandle};
use crate::{
connect::ResolutionData,
renderer::{RendererBackend, RendererBackendManager},
};
pub struct WgpuBackend {} pub struct WgpuBackend {}
impl RendererBackend for WgpuBackend {
type RendererBackendManager = WgpuBackendManager;
fn new<W: HasDisplayHandle + HasWindowHandle>(
resolutions: ResolutionData,
window: &W,
shader_path: Option<std::path::PathBuf>,
manager: std::sync::Arc<Self::RendererBackendManager>,
) -> Self {
todo!()
}
fn resize<W: HasDisplayHandle + HasWindowHandle>(
&mut self,
resolutions: ResolutionData,
window: &W,
) {
todo!()
}
fn new_frame(&mut self, buffer: &[[u8; 4]]) {
todo!()
}
fn render(&mut self, resolutions: ResolutionData, manager: &Self::RendererBackendManager) {
todo!()
}
}
pub struct WgpuBackendManager {} pub struct WgpuBackendManager {}
impl RendererBackendManager for WgpuBackendManager {
fn new(display_handle: DisplayHandle) -> Self {
todo!()
}
}