switch to analog RetroPad
I really should make this either or.
This commit is contained in:
parent
efc2800358
commit
889d7e42ce
2 changed files with 76 additions and 13 deletions
|
@ -11,7 +11,7 @@ use anyhow::Result;
|
||||||
|
|
||||||
use retro_frontend::{
|
use retro_frontend::{
|
||||||
frontend::{Frontend, FrontendInterface, HwGlInitData},
|
frontend::{Frontend, FrontendInterface, HwGlInitData},
|
||||||
input_devices::{InputDevice, RetroPad},
|
input_devices::{AnalogRetroPad, InputDevice},
|
||||||
libretro_sys_new,
|
libretro_sys_new,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ extern "system" fn opengl_message_callback(
|
||||||
pub struct RetroState {
|
pub struct RetroState {
|
||||||
frontend: Option<Box<Frontend>>,
|
frontend: Option<Box<Frontend>>,
|
||||||
|
|
||||||
pad: RetroPad,
|
pad: AnalogRetroPad,
|
||||||
|
|
||||||
// EGL state
|
// EGL state
|
||||||
egl_context: Arc<Mutex<DeviceContext>>,
|
egl_context: Arc<Mutex<DeviceContext>>,
|
||||||
|
@ -73,7 +73,7 @@ impl RetroState {
|
||||||
) -> Box<Self> {
|
) -> Box<Self> {
|
||||||
let mut boxed = Box::new(Self {
|
let mut boxed = Box::new(Self {
|
||||||
frontend: None,
|
frontend: None,
|
||||||
pad: RetroPad::new(),
|
pad: AnalogRetroPad::new(),
|
||||||
|
|
||||||
egl_context: device_context.clone(),
|
egl_context: device_context.clone(),
|
||||||
software_framebuffer: Surface::new(),
|
software_framebuffer: Surface::new(),
|
||||||
|
@ -283,9 +283,8 @@ impl FrontendInterface for RetroState {
|
||||||
.bind_to_thread()
|
.bind_to_thread()
|
||||||
.expect("Failed to bind CUDA device to thread");
|
.expect("Failed to bind CUDA device to thread");
|
||||||
|
|
||||||
let mut mapped_cuda_resource = cuda_resource
|
let mut mapped_cuda_resource =
|
||||||
.map()
|
cuda_resource.map().expect("Failed to map CUDA resource");
|
||||||
.expect("Failed to map CUDA resource");
|
|
||||||
|
|
||||||
let array = mapped_cuda_resource
|
let array = mapped_cuda_resource
|
||||||
.get_mapped_array()
|
.get_mapped_array()
|
||||||
|
@ -304,7 +303,7 @@ impl FrontendInterface for RetroState {
|
||||||
memcpy.dstY = 0;
|
memcpy.dstY = 0;
|
||||||
memcpy.dstMemoryType = CUmemorytype::CU_MEMORYTYPE_ARRAY;
|
memcpy.dstMemoryType = CUmemorytype::CU_MEMORYTYPE_ARRAY;
|
||||||
memcpy.dstArray = array;
|
memcpy.dstArray = array;
|
||||||
|
|
||||||
memcpy.WidthInBytes = (size.width * 4) as usize;
|
memcpy.WidthInBytes = (size.width * 4) as usize;
|
||||||
memcpy.Height = size.height as usize;
|
memcpy.Height = size.height as usize;
|
||||||
memcpy.dstPitch = (size.width * 4) as usize;
|
memcpy.dstPitch = (size.width * 4) as usize;
|
||||||
|
@ -320,7 +319,7 @@ impl FrontendInterface for RetroState {
|
||||||
.result()
|
.result()
|
||||||
.expect("fucking");
|
.expect("fucking");
|
||||||
|
|
||||||
mapped_cuda_resource.unmap().expect("fuck you asshole");
|
mapped_cuda_resource.unmap().expect("fuck you asshole");
|
||||||
}
|
}
|
||||||
|
|
||||||
let _ = self.event_tx.blocking_send(RetroEvent::Frame);
|
let _ = self.event_tx.blocking_send(RetroEvent::Frame);
|
||||||
|
@ -414,6 +413,70 @@ impl FrontendInterface for RetroState {
|
||||||
.press_button(libretro_sys_new::DEVICE_ID_JOYPAD_R2, None);
|
.press_button(libretro_sys_new::DEVICE_ID_JOYPAD_R2, None);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Key::t => {
|
||||||
|
self.pad.press_analog_axis(
|
||||||
|
libretro_sys_new::DEVICE_INDEX_ANALOG_LEFT,
|
||||||
|
libretro_sys_new::DEVICE_ID_ANALOG_Y,
|
||||||
|
Some(-0x7fff),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Key::g => {
|
||||||
|
self.pad.press_analog_axis(
|
||||||
|
libretro_sys_new::DEVICE_INDEX_ANALOG_LEFT,
|
||||||
|
libretro_sys_new::DEVICE_ID_ANALOG_Y,
|
||||||
|
Some(0x7fff),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Key::f => {
|
||||||
|
self.pad.press_analog_axis(
|
||||||
|
libretro_sys_new::DEVICE_INDEX_ANALOG_LEFT,
|
||||||
|
libretro_sys_new::DEVICE_ID_ANALOG_X,
|
||||||
|
Some(-0x7fff),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Key::h => {
|
||||||
|
self.pad.press_analog_axis(
|
||||||
|
libretro_sys_new::DEVICE_INDEX_ANALOG_LEFT,
|
||||||
|
libretro_sys_new::DEVICE_ID_ANALOG_X,
|
||||||
|
Some(0x7fff),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Key::i => {
|
||||||
|
self.pad.press_analog_axis(
|
||||||
|
libretro_sys_new::DEVICE_INDEX_ANALOG_RIGHT,
|
||||||
|
libretro_sys_new::DEVICE_ID_ANALOG_Y,
|
||||||
|
Some(-0x7fff),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Key::k => {
|
||||||
|
self.pad.press_analog_axis(
|
||||||
|
libretro_sys_new::DEVICE_INDEX_ANALOG_RIGHT,
|
||||||
|
libretro_sys_new::DEVICE_ID_ANALOG_Y,
|
||||||
|
Some(0x7fff),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Key::j => {
|
||||||
|
self.pad.press_analog_axis(
|
||||||
|
libretro_sys_new::DEVICE_INDEX_ANALOG_RIGHT,
|
||||||
|
libretro_sys_new::DEVICE_ID_ANALOG_X,
|
||||||
|
Some(-0x7fff),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Key::l => {
|
||||||
|
self.pad.press_analog_axis(
|
||||||
|
libretro_sys_new::DEVICE_INDEX_ANALOG_RIGHT,
|
||||||
|
libretro_sys_new::DEVICE_ID_ANALOG_X,
|
||||||
|
Some(0x7fff),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,11 +8,11 @@ pub struct Rect {
|
||||||
pub height: u32,
|
pub height: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
//#[derive(Debug)]
|
||||||
pub struct Point {
|
//pub struct Point {
|
||||||
pub x: u32,
|
// pub x: u32,
|
||||||
pub y: u32,
|
// pub y: u32,
|
||||||
}
|
//}
|
||||||
|
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
pub struct Size {
|
pub struct Size {
|
||||||
|
|
Loading…
Reference in a new issue