rust_libretro/
core_wrapper.rs1use crate::*;
5use std::sync::{Arc, RwLock};
6
7pub type Interfaces = Arc<RwLock<InterfaceList>>;
8
9#[derive(Debug, Default)]
10#[proc::unstable]
11pub struct InterfaceList {
12 pub location_interface: Option<retro_location_callback>,
13 pub perf_interface: PerfCounters,
14 pub rumble_interface: Option<retro_rumble_interface>,
15
16 #[unstable(feature = "env-commands")]
17 pub camera_interface: Option<retro_camera_callback>,
18
19 #[unstable(feature = "env-commands")]
20 pub led_interface: Option<retro_led_interface>,
21
22 #[unstable(feature = "env-commands")]
23 pub sensor_interface: Option<retro_sensor_interface>,
24
25 #[unstable(feature = "env-commands")]
26 pub midi_interface: Option<retro_midi_interface>,
27
28 #[unstable(feature = "env-commands")]
29 pub vfs_interface_info: VfsInterfaceInfo,
30
31 #[unstable(feature = "env-commands")]
32 pub hw_render_context_negotiation_interface:
33 Option<Box<dyn HwRenderContextNegotiationInterface>>,
34}
35
36pub(crate) struct CoreWrapper {
40 pub(crate) environment_set: bool,
41 pub(crate) environment_callback: retro_environment_t,
42
43 pub(crate) video_refresh_callback: retro_video_refresh_t,
54
55 pub(crate) audio_sample_callback: retro_audio_sample_t,
59
60 pub(crate) audio_sample_batch_callback: retro_audio_sample_batch_t,
66
67 pub(crate) input_poll_callback: retro_input_poll_t,
69
70 pub(crate) input_state_callback: retro_input_state_t,
77
78 pub(crate) can_dupe: bool,
79 pub(crate) had_frame: bool,
80 pub(crate) last_width: u32,
81 pub(crate) last_height: u32,
82 pub(crate) last_pitch: usize,
83
84 pub(crate) supports_bitmasks: bool,
85
86 pub(crate) frame_delta: Option<i64>,
87
88 pub(crate) interfaces: Interfaces,
89
90 pub(crate) core: Box<dyn Core>,
92}
93
94impl CoreWrapper {
95 pub(crate) fn new<C: 'static + Core>(core: C) -> Self {
96 Self {
97 environment_set: false,
98 environment_callback: None,
99
100 core: Box::new(core),
101
102 video_refresh_callback: None,
104 audio_sample_callback: None,
105 audio_sample_batch_callback: None,
106 input_poll_callback: None,
107 input_state_callback: None,
108
109 interfaces: Arc::new(RwLock::new(InterfaceList::default())),
110
111 can_dupe: false,
112 had_frame: false,
113 last_width: 0,
114 last_height: 0,
115 last_pitch: 0,
116
117 frame_delta: None,
118
119 supports_bitmasks: false,
120 }
121 }
122
123 #[inline(always)]
124 pub(crate) fn on_set_video_refresh(&mut self, arg1: retro_video_refresh_t) {
125 self.video_refresh_callback = arg1;
126 }
127
128 #[inline(always)]
129 pub(crate) fn on_set_audio_sample(&mut self, arg1: retro_audio_sample_t) {
130 self.audio_sample_callback = arg1;
131 }
132
133 #[inline(always)]
134 pub(crate) fn on_set_audio_sample_batch(&mut self, arg1: retro_audio_sample_batch_t) {
135 self.audio_sample_batch_callback = arg1;
136 }
137
138 #[inline(always)]
139 pub(crate) fn on_set_input_poll(&mut self, arg1: retro_input_poll_t) {
140 self.input_poll_callback = arg1;
141 }
142
143 #[inline(always)]
144 pub(crate) fn on_set_input_state(&mut self, arg1: retro_input_state_t) {
145 self.input_state_callback = arg1;
146 }
147}