use crate::*;
use std::sync::{Arc, RwLock};
pub type Interfaces = Arc<RwLock<InterfaceList>>;
#[derive(Debug, Default)]
#[proc::unstable]
pub struct InterfaceList {
pub location_interface: Option<retro_location_callback>,
pub perf_interface: PerfCounters,
pub rumble_interface: Option<retro_rumble_interface>,
#[unstable(feature = "env-commands")]
pub camera_interface: Option<retro_camera_callback>,
#[unstable(feature = "env-commands")]
pub led_interface: Option<retro_led_interface>,
#[unstable(feature = "env-commands")]
pub sensor_interface: Option<retro_sensor_interface>,
#[unstable(feature = "env-commands")]
pub midi_interface: Option<retro_midi_interface>,
#[unstable(feature = "env-commands")]
pub vfs_interface_info: VfsInterfaceInfo,
#[unstable(feature = "env-commands")]
pub hw_render_context_negotiation_interface:
Option<Box<dyn HwRenderContextNegotiationInterface>>,
}
pub(crate) struct CoreWrapper {
pub(crate) environment_set: bool,
pub(crate) environment_callback: retro_environment_t,
pub(crate) video_refresh_callback: retro_video_refresh_t,
pub(crate) audio_sample_callback: retro_audio_sample_t,
pub(crate) audio_sample_batch_callback: retro_audio_sample_batch_t,
pub(crate) input_poll_callback: retro_input_poll_t,
pub(crate) input_state_callback: retro_input_state_t,
pub(crate) can_dupe: bool,
pub(crate) had_frame: bool,
pub(crate) last_width: u32,
pub(crate) last_height: u32,
pub(crate) last_pitch: usize,
pub(crate) supports_bitmasks: bool,
pub(crate) frame_delta: Option<i64>,
pub(crate) interfaces: Interfaces,
pub(crate) core: Box<dyn Core>,
}
impl CoreWrapper {
pub(crate) fn new<C: 'static + Core>(core: C) -> Self {
Self {
environment_set: false,
environment_callback: None,
core: Box::new(core),
video_refresh_callback: None,
audio_sample_callback: None,
audio_sample_batch_callback: None,
input_poll_callback: None,
input_state_callback: None,
interfaces: Arc::new(RwLock::new(InterfaceList::default())),
can_dupe: false,
had_frame: false,
last_width: 0,
last_height: 0,
last_pitch: 0,
frame_delta: None,
supports_bitmasks: false,
}
}
#[inline(always)]
pub(crate) fn on_set_video_refresh(&mut self, arg1: retro_video_refresh_t) {
self.video_refresh_callback = arg1;
}
#[inline(always)]
pub(crate) fn on_set_audio_sample(&mut self, arg1: retro_audio_sample_t) {
self.audio_sample_callback = arg1;
}
#[inline(always)]
pub(crate) fn on_set_audio_sample_batch(&mut self, arg1: retro_audio_sample_batch_t) {
self.audio_sample_batch_callback = arg1;
}
#[inline(always)]
pub(crate) fn on_set_input_poll(&mut self, arg1: retro_input_poll_t) {
self.input_poll_callback = arg1;
}
#[inline(always)]
pub(crate) fn on_set_input_state(&mut self, arg1: retro_input_state_t) {
self.input_state_callback = arg1;
}
}