more fixes for invalid calls to get_system_av_info
This commit is contained in:
parent
344d88f26b
commit
41e3352927
|
@ -57,12 +57,11 @@ pub fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||
let sdl2_ogl = SimpleSdl2OpenglComponent::new(&mut sdl_context, emu.libretro_core())?;
|
||||
emu.register_component(sdl2_ogl)?;
|
||||
|
||||
let sdl2_audio = SimpleSdl2AudioComponent::new(&mut sdl_context, emu.libretro_core())?;
|
||||
emu.register_component(sdl2_audio)?;
|
||||
emu.register_component(SimpleSdl2AudioComponent::new(&mut sdl_context)?)?;
|
||||
|
||||
emu.register_component(SimpleSdl2GamepadComponent::new(&mut sdl_context))?;
|
||||
|
||||
emu.register_component(SleepFramerateLimitComponent::new())?;
|
||||
emu.register_component(SleepFramerateLimitComponent::default())?;
|
||||
|
||||
emu.register_component(PathBufComponent {
|
||||
sys_path: opt.system.clone(),
|
||||
|
|
|
@ -75,7 +75,7 @@ impl RetroComponent for SimpleSdl2AudioComponent {
|
|||
}
|
||||
|
||||
impl SimpleSdl2AudioComponent {
|
||||
pub fn new(sdl_context: &mut Sdl, _retro: &LibretroWrapper) -> Result<Self, Box<dyn std::error::Error>> {
|
||||
pub fn new(sdl_context: &mut Sdl) -> Result<Self, Box<dyn std::error::Error>> {
|
||||
let audio = sdl_context.audio().unwrap();
|
||||
let desired_spec = AudioSpecDesired {
|
||||
freq: None,
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
use crate::prelude::*;
|
||||
|
||||
use std::ffi::CStr;
|
||||
use std::path::Path;
|
||||
|
||||
use sdl2::Sdl;
|
||||
use sdl2::rect::Rect;
|
||||
|
@ -23,12 +24,11 @@ impl SimpleSdl2CanvasComponent {
|
|||
unsafe { CStr::from_ptr(sys_info.library_name) }.to_string_lossy()
|
||||
);
|
||||
|
||||
let geometry = retro.get_system_av_info().geometry;
|
||||
let pixel_format = sdl2::pixels::PixelFormatEnum::ARGB1555;
|
||||
|
||||
let window = sdl_context
|
||||
.video()?
|
||||
.window(title.as_str(), geometry.base_width, geometry.base_height)
|
||||
.window(title.as_str(), 256, 224)
|
||||
.build()?;
|
||||
|
||||
let canvas = window.into_canvas().build()?;
|
||||
|
@ -40,7 +40,13 @@ impl SimpleSdl2CanvasComponent {
|
|||
}
|
||||
}
|
||||
|
||||
impl RetroComponent for SimpleSdl2CanvasComponent {}
|
||||
impl RetroComponent for SimpleSdl2CanvasComponent {
|
||||
fn post_load_game(&mut self, retro: &mut LibretroWrapper, _rom: &Path) -> crate::base::Result<()> {
|
||||
self.set_geometry(&retro.get_system_av_info().geometry);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl RetroCallbacks for SimpleSdl2CanvasComponent {
|
||||
fn video_refresh(&mut self, frame: &VideoFrame) {
|
||||
match frame {
|
||||
|
|
|
@ -2,11 +2,11 @@ use crate::prelude::*;
|
|||
|
||||
use std::ffi::CStr;
|
||||
use std::os::raw::c_uint;
|
||||
use std::path::Path;
|
||||
|
||||
use sdl2::Sdl;
|
||||
use sdl2::rect::Rect;
|
||||
use sdl2::render::WindowCanvas;
|
||||
use std::path::Path;
|
||||
|
||||
/// Create a root window in SDL2 with an OpenGL context and attaches libretro's
|
||||
/// `hw_get_proc_address` calls to that of the [sdl2::VideoSubsystem].
|
||||
|
|
|
@ -9,15 +9,11 @@ pub struct Sdl2SurfaceComponent {
|
|||
}
|
||||
|
||||
impl Sdl2SurfaceComponent {
|
||||
pub fn new(retro: &LibretroWrapper) -> Result<Self, Box<dyn std::error::Error>> {
|
||||
let geometry = retro.get_system_av_info().geometry;
|
||||
pub fn new() -> Result<Self, Box<dyn std::error::Error>> {
|
||||
let pixel_format = sdl2::pixels::PixelFormatEnum::ARGB1555;
|
||||
|
||||
let surface = Surface::new(
|
||||
geometry.base_width,
|
||||
geometry.base_height,
|
||||
pixel_format,
|
||||
)?;
|
||||
// automatically replaced in video_refresh whenever size doesn't match
|
||||
let surface = Surface::new(1, 1, pixel_format)?;
|
||||
|
||||
Ok(Sdl2SurfaceComponent {
|
||||
surface,
|
||||
|
|
|
@ -42,8 +42,8 @@ impl RetroCallbacks for SleepFramerateLimitComponent {
|
|||
}
|
||||
}
|
||||
|
||||
impl SleepFramerateLimitComponent {
|
||||
pub fn new() -> Self {
|
||||
impl Default for SleepFramerateLimitComponent {
|
||||
fn default() -> Self {
|
||||
SleepFramerateLimitComponent {
|
||||
did_sleep: false,
|
||||
started_video: false,
|
||||
|
@ -51,7 +51,9 @@ impl SleepFramerateLimitComponent {
|
|||
frame_begin: Instant::now(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl SleepFramerateLimitComponent {
|
||||
pub fn do_sleep(&mut self) {
|
||||
// similar hack to the sample rate, make sure we don't divide by zero.
|
||||
let mut spf = 1.0 / self.fps;
|
||||
|
|
Loading…
Reference in New Issue