mirror of
https://github.com/gopher64/gopher64.git
synced 2026-07-11 01:25:20 +02:00
@@ -335,11 +335,11 @@ static void rdp_new_processor() {
|
|||||||
gfx_info.RDRAM_SIZE / 2, flags);
|
gfx_info.RDRAM_SIZE / 2, flags);
|
||||||
g_tmem = processor->get_tmem();
|
g_tmem = processor->get_tmem();
|
||||||
if (!g_tmem) {
|
if (!g_tmem) {
|
||||||
printf("Failed to get tmem\n");
|
LOGE("Failed to get tmem\n");
|
||||||
}
|
}
|
||||||
g_hidden_rdram = processor->begin_read_hidden_rdram();
|
g_hidden_rdram = processor->begin_read_hidden_rdram();
|
||||||
if (!g_hidden_rdram) {
|
if (!g_hidden_rdram) {
|
||||||
printf("Failed to get hidden_rdram\n");
|
LOGE("Failed to get hidden_rdram\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
sync_signal = 0;
|
sync_signal = 0;
|
||||||
@@ -376,7 +376,7 @@ void rdp_init(void *_window, GFX_INFO _gfx_info, const void *font,
|
|||||||
SDL_SyncWindow(window);
|
SDL_SyncWindow(window);
|
||||||
bool result = SDL_AddEventWatch(sdl_event_filter, nullptr);
|
bool result = SDL_AddEventWatch(sdl_event_filter, nullptr);
|
||||||
if (!result) {
|
if (!result) {
|
||||||
printf("Could not add event watch.\n");
|
LOGE("Could not add event watch.\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -692,7 +692,10 @@ void rdp_update_screen() {
|
|||||||
if (SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED) {
|
if (SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
wsi->end_frame();
|
if (!wsi->end_frame()) {
|
||||||
|
LOGE("End frame failed\n");
|
||||||
|
SDL_PumpEvents(); // For Android to trigger pause event
|
||||||
|
}
|
||||||
wsi->begin_frame();
|
wsi->begin_frame();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -787,7 +790,7 @@ uint32_t pixel_size(uint32_t pixel_type, uint32_t area) {
|
|||||||
case 3:
|
case 3:
|
||||||
return area * 4;
|
return area * 4;
|
||||||
default:
|
default:
|
||||||
printf("Invalid pixel size: %u\n", pixel_type);
|
LOGE("Invalid pixel size: %u\n", pixel_type);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ uint32_t SDL_WSIPlatform::get_surface_height() {
|
|||||||
|
|
||||||
bool SDL_WSIPlatform::alive(Vulkan::WSI &wsi) { return true; }
|
bool SDL_WSIPlatform::alive(Vulkan::WSI &wsi) { return true; }
|
||||||
|
|
||||||
void SDL_WSIPlatform::poll_input() {}
|
void SDL_WSIPlatform::poll_input() { SDL_PumpEvents(); }
|
||||||
|
|
||||||
void SDL_WSIPlatform::poll_input_async(Granite::InputTrackerHandler *handler) {}
|
void SDL_WSIPlatform::poll_input_async(Granite::InputTrackerHandler *handler) {}
|
||||||
|
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ pub fn process(device: &mut device::Device, channel: usize) {
|
|||||||
let input = if let Some(netplay) = &mut device.netplay {
|
let input = if let Some(netplay) = &mut device.netplay {
|
||||||
netplay.inputs[channel].0
|
netplay.inputs[channel].0
|
||||||
} else {
|
} else {
|
||||||
ui::input::get(&mut device.ui, channel, device.speed_limiter.frame_counter)
|
ui::input::get(&mut device.ui, channel)
|
||||||
};
|
};
|
||||||
|
|
||||||
device.pif.ram[offset..offset + 4].copy_from_slice(&input.data.to_ne_bytes());
|
device.pif.ram[offset..offset + 4].copy_from_slice(&input.data.to_ne_bytes());
|
||||||
|
|||||||
@@ -118,7 +118,6 @@ pub fn write_regs(device: &mut device::Device, address: u64, value: u32, mask: u
|
|||||||
pub fn update_screen(device: &mut device::Device) {
|
pub fn update_screen(device: &mut device::Device) {
|
||||||
if !netplay::in_rollback(device.netplay.as_ref()) {
|
if !netplay::in_rollback(device.netplay.as_ref()) {
|
||||||
ui::video::render_frame();
|
ui::video::render_frame();
|
||||||
unsafe { sdl3_sys::events::SDL_PumpEvents() };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let (speed_limiter_toggled, paused) = ui::video::check_callback(device);
|
let (speed_limiter_toggled, paused) = ui::video::check_callback(device);
|
||||||
|
|||||||
@@ -128,8 +128,6 @@ pub fn run(args: Args, arg_count: usize) -> std::io::Result<()> {
|
|||||||
ui::sdl_hints();
|
ui::sdl_hints();
|
||||||
|
|
||||||
if let Some(game) = args.game {
|
if let Some(game) = args.game {
|
||||||
ui::disable_auto_update_joysticks();
|
|
||||||
|
|
||||||
let file_path = std::path::Path::new(&game).to_path_buf();
|
let file_path = std::path::Path::new(&game).to_path_buf();
|
||||||
let Some(rom_contents) = device::get_rom_contents(&file_path) else {
|
let Some(rom_contents) = device::get_rom_contents(&file_path) else {
|
||||||
return Err(Error::other(format!(
|
return Err(Error::other(format!(
|
||||||
|
|||||||
+1
-2
@@ -340,7 +340,7 @@ fn process_netplay(device: &mut device::Device) {
|
|||||||
fn advance_frame(device: &mut device::Device) {
|
fn advance_frame(device: &mut device::Device) {
|
||||||
let netplay = device.netplay.as_mut().unwrap();
|
let netplay = device.netplay.as_mut().unwrap();
|
||||||
let local_input = if netplay.session.current_frame() > netplay.session.max_prediction() as i32 {
|
let local_input = if netplay.session.current_frame() > netplay.session.max_prediction() as i32 {
|
||||||
ui::input::get(&mut device.ui, 0, device.speed_limiter.frame_counter)
|
ui::input::get(&mut device.ui, 0)
|
||||||
} else {
|
} else {
|
||||||
//workaround for disabled rollback
|
//workaround for disabled rollback
|
||||||
ui::input::InputData::default()
|
ui::input::InputData::default()
|
||||||
@@ -486,7 +486,6 @@ pub fn init(
|
|||||||
message_timer = std::time::Instant::now();
|
message_timer = std::time::Instant::now();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsafe { sdl3_sys::events::SDL_PumpEvents() };
|
|
||||||
ui::video::render_frame();
|
ui::video::render_frame();
|
||||||
ui::video::update_screen();
|
ui::video::update_screen();
|
||||||
std::thread::sleep(std::time::Duration::from_millis(10));
|
std::thread::sleep(std::time::Duration::from_millis(10));
|
||||||
|
|||||||
@@ -49,7 +49,6 @@ unsafe impl Sync for Audio {}
|
|||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct Input {
|
pub struct Input {
|
||||||
pub keyboard_state: *const bool,
|
pub keyboard_state: *const bool,
|
||||||
pub last_polled: u64,
|
|
||||||
pub controllers: [input::Controllers; 4],
|
pub controllers: [input::Controllers; 4],
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,16 +119,6 @@ pub fn sdl_hints() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn disable_auto_update_joysticks() {
|
|
||||||
unsafe {
|
|
||||||
let hint = std::ffi::CString::new("0").unwrap();
|
|
||||||
sdl3_sys::everything::SDL_SetHint(
|
|
||||||
sdl3_sys::everything::SDL_HINT_AUTO_UPDATE_JOYSTICKS,
|
|
||||||
hint.as_ptr(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn sdl_init(flag: sdl3_sys::init::SDL_InitFlags) {
|
pub fn sdl_init(flag: sdl3_sys::init::SDL_InitFlags) {
|
||||||
unsafe {
|
unsafe {
|
||||||
if sdl3_sys::init::SDL_WasInit(flag) == 0 && !sdl3_sys::init::SDL_InitSubSystem(flag) {
|
if sdl3_sys::init::SDL_WasInit(flag) == 0 && !sdl3_sys::init::SDL_InitSubSystem(flag) {
|
||||||
@@ -195,7 +184,6 @@ impl Ui {
|
|||||||
let (vis_tx, vis_rx) = tokio::sync::mpsc::unbounded_channel();
|
let (vis_tx, vis_rx) = tokio::sync::mpsc::unbounded_channel();
|
||||||
Ui {
|
Ui {
|
||||||
input: Input {
|
input: Input {
|
||||||
last_polled: 0,
|
|
||||||
controllers: [
|
controllers: [
|
||||||
input::Controllers {
|
input::Controllers {
|
||||||
game_controller: std::ptr::null_mut(),
|
game_controller: std::ptr::null_mut(),
|
||||||
|
|||||||
+1
-6
@@ -503,14 +503,9 @@ fn handle_hotkeys(keys: u32, last_key_state: u32) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get(ui: &mut ui::Ui, channel: usize, vi_counter: u64) -> InputData {
|
pub fn get(ui: &mut ui::Ui, channel: usize) -> InputData {
|
||||||
handle_joystick_events(ui);
|
handle_joystick_events(ui);
|
||||||
|
|
||||||
if ui.input.last_polled != vi_counter {
|
|
||||||
ui.input.last_polled = vi_counter;
|
|
||||||
unsafe { sdl3_sys::joystick::SDL_UpdateJoysticks() };
|
|
||||||
}
|
|
||||||
|
|
||||||
let profile_name = &ui.config.input.input_profile_binding[channel];
|
let profile_name = &ui.config.input.input_profile_binding[channel];
|
||||||
let Some(profile) = ui.config.input.input_profiles.get(profile_name) else {
|
let Some(profile) = ui.config.input.input_profiles.get(profile_name) else {
|
||||||
eprintln!("Invalid profile name: {profile_name}");
|
eprintln!("Invalid profile name: {profile_name}");
|
||||||
|
|||||||
+1
-3
@@ -182,16 +182,14 @@ pub fn load_state(device: &mut device::Device, rdp_state: *const u8) {
|
|||||||
pub fn pause_loop(ui: &mut ui::Ui, frame_time: f64) {
|
pub fn pause_loop(ui: &mut ui::Ui, frame_time: f64) {
|
||||||
let mut paused = true;
|
let mut paused = true;
|
||||||
let mut frame_advance = false;
|
let mut frame_advance = false;
|
||||||
let mut pause_counter = 0;
|
|
||||||
while paused && !frame_advance {
|
while paused && !frame_advance {
|
||||||
std::thread::sleep(std::time::Duration::from_secs_f64(frame_time));
|
std::thread::sleep(std::time::Duration::from_secs_f64(frame_time));
|
||||||
ui::input::get(ui, 0, pause_counter); // to gather hotkey input
|
|
||||||
unsafe { sdl3_sys::events::SDL_PumpEvents() };
|
unsafe { sdl3_sys::events::SDL_PumpEvents() };
|
||||||
|
ui::input::get(ui, 0); // to gather hotkey input
|
||||||
retroachievements::do_idle();
|
retroachievements::do_idle();
|
||||||
let callback = unsafe { rdp_check_callback() };
|
let callback = unsafe { rdp_check_callback() };
|
||||||
paused = callback.paused;
|
paused = callback.paused;
|
||||||
frame_advance = callback.frame_advance;
|
frame_advance = callback.frame_advance;
|
||||||
pause_counter += 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user