vst is more renderer agnostic

This commit is contained in:
Alex Janka 2023-10-05 11:05:41 +11:00
parent b3572f5262
commit ffe677088f
2 changed files with 29 additions and 13 deletions

View file

@ -8,13 +8,15 @@ name = "vst"
crate-type = ["cdylib", "rlib"] crate-type = ["cdylib", "rlib"]
[features] [features]
default = [] default = ["vulkan"]
pixels = ["gb-emu-lib/pixels-renderer"]
vulkan = ["dep:raw-window-handle", "gb-emu-lib/vulkan-static"]
[dependencies] [dependencies]
gb-emu-lib = { path = "../lib", features = ["vulkan-renderer", "config"] } gb-emu-lib = { path = "../lib", features = ["config"] }
nih_plug = { path = "../vendored/nih-plug", features = ["standalone"] } nih_plug = { path = "../vendored/nih-plug", features = ["standalone"] }
baseview = { path = "../vendored/baseview" } baseview = { path = "../vendored/baseview" }
async-ringbuf = "0.1" async-ringbuf = "0.1"
futures = "0.3" futures = "0.3"
keyboard-types = "0.6.2" keyboard-types = "0.6.2"
raw-window-handle = "0.5" raw-window-handle = { version = "0.5", optional = true }

View file

@ -15,7 +15,6 @@ 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 crate::{Frame, FrameReceiver, JoypadInfo, JoypadSender}; use crate::{Frame, FrameReceiver, JoypadInfo, JoypadSender};
@ -62,6 +61,7 @@ impl Editor for Emulator {
// ) // )
// }; // };
#[cfg(feature = "vulkan")]
let shader_path = self.shader_path.lock().unwrap().clone(); let shader_path = self.shader_path.lock().unwrap().clone();
// let shader_path = None; // let shader_path = None;
@ -73,7 +73,15 @@ impl Editor for Emulator {
scale: baseview::WindowScalePolicy::SystemScaleFactor, scale: baseview::WindowScalePolicy::SystemScaleFactor,
gl_config: None, gl_config: None,
}, },
|w| EmulatorWindow::new(w, fr_cloned, js_cloned, shader_path), |w| {
EmulatorWindow::new(
w,
fr_cloned,
js_cloned,
#[cfg(feature = "vulkan")]
shader_path,
)
},
); );
Box::new(Self::new( Box::new(Self::new(
self.frame_receiver.clone(), self.frame_receiver.clone(),
@ -110,7 +118,7 @@ impl EmulatorWindow {
window: &mut Window, window: &mut Window,
frame_receiver: Arc<FrameReceiver>, frame_receiver: Arc<FrameReceiver>,
joypad_sender: Arc<JoypadSender>, joypad_sender: Arc<JoypadSender>,
shader_path: Option<PathBuf>, #[cfg(feature = "vulkan")] shader_path: Option<PathBuf>,
) -> Self { ) -> Self {
let info = WindowInfo::from_logical_size( let info = WindowInfo::from_logical_size(
Size::new(WIDTH as f64, HEIGHT as f64), Size::new(WIDTH as f64, HEIGHT as f64),
@ -125,14 +133,20 @@ impl EmulatorWindow {
scaled_height: HEIGHT as u32, scaled_height: HEIGHT as u32,
}; };
let manager = Arc::new(RendererBackendManager::new(window.raw_display_handle())); #[cfg(feature = "vulkan")]
let (manager, window_options) = {
use raw_window_handle::HasRawDisplayHandle;
(
Arc::new(RendererBackendManager::new(window.raw_display_handle())),
WindowOptions { shader_path },
)
};
#[cfg(feature = "pixels")]
let (manager, window_options) =
{ (Arc::new(RendererBackendManager::new()), WindowOptions {}) };
let renderer = RendererBackend::new( let renderer =
current_resolution, RendererBackend::new(current_resolution, window, window_options, manager.clone());
window,
WindowOptions { shader_path },
manager.clone(),
);
Self { Self {
renderer, renderer,