mamedev / mame

MAME
https://www.mamedev.org/
Other
7.92k stars 1.98k forks source link

lightgun simulated mouse between Linux and Windows have different behavior despite having same configuration #12352

Closed Mygit520 closed 3 months ago

Mygit520 commented 3 months ago

MAME version

0.230, 0.265

System information

Windows: Windows 11, 64-bit, version 23H2, USA, x86-64, 16GB system RAM

Linux: Ubuntu 18.04.6 LTS (GNU/Linux 5.4.0-150-generic x86_64), 16 GB System RAM

INI configuration details

#
# CORE CONFIGURATION OPTIONS
#
readconfig                1
writeconfig               0

#
# CORE SEARCH PATH OPTIONS
#
homepath                  .
rompath                   roms
hashpath                  hash
samplepath                samples
artpath                   artwork
ctrlrpath                 ctrlr
inipath                   .;ini;ini/presets
fontpath                  .
cheatpath                 cheat
crosshairpath             crosshair
pluginspath               plugins
languagepath              language
swpath                    software

#
# CORE OUTPUT DIRECTORY OPTIONS
#
cfg_directory             cfg
nvram_directory           nvram
input_directory           inp
state_directory           sta
snapshot_directory        snap
diff_directory            diff
comment_directory         comments

#
# CORE STATE/PLAYBACK OPTIONS
#
state                     
autosave                  0
rewind                    0
rewind_capacity           100
playback                  
record                    
record_timecode           0
exit_after_playback       0
mngwrite                  
aviwrite                  
wavwrite                  
snapname                  %g/%i
snapsize                  auto
snapview                  auto
snapbilinear              1
statename                 %g
burnin                    0

#
# CORE PERFORMANCE OPTIONS
#
autoframeskip             0
frameskip                 0
seconds_to_run            0
throttle                  1
sleep                     1
speed                     1.0
refreshspeed              0
lowlatency                0

#
# CORE RENDER OPTIONS
#
keepaspect                1
unevenstretch             1
unevenstretchx            0
unevenstretchy            0
autostretchxy             0
intoverscan               0
intscalex                 0
intscaley                 0

#
# CORE ROTATION OPTIONS
#
rotate                    1
ror                       0
rol                       0
autoror                   0
autorol                   0
flipx                     0
flipy                     0

#
# CORE ARTWORK OPTIONS
#
artwork_crop              0
fallback_artwork          
override_artwork          

#
# CORE SCREEN OPTIONS
#
brightness                1.0
contrast                  1.0
gamma                     1.0
pause_brightness          0.65
effect                    none

#
# CORE VECTOR OPTIONS
#
beam_width_min            1.0
beam_width_max            1.0
beam_dot_size             1.0
beam_intensity_weight     0
flicker                   0

#
# CORE SOUND OPTIONS
#
samplerate                48000
samples                   1
volume                    0
speaker_report            0

#
# CORE INPUT OPTIONS
#
coin_lockout              1
ctrlr                     
mouse                     1
joystick                  1
lightgun                  1
multikeyboard             0
multimouse                1
steadykey                 0
ui_active                 0
offscreen_reload          0
joystick_map              auto
joystick_deadzone         0
joystick_saturation       0.5
natural                   0
joystick_contradictory    0
coin_impulse              0

#
# CORE INPUT AUTOMATIC ENABLE OPTIONS
#
paddle_device             none
adstick_device            none
pedal_device              none
dial_device               none
trackball_device          none
lightgun_device           mouse
positional_device         mouse
mouse_device              mouse

#
# CORE DEBUGGING OPTIONS
#
verbose                   0
log                       0
oslog                     0
debug                     0
update_in_pause           0
debugscript               
debuglog                  0

#
# CORE COMM OPTIONS
#
comm_localhost            0.0.0.0
comm_localport            15112
comm_remotehost           127.0.0.1
comm_remoteport           15112
comm_framesync            0

#
# CORE MISC OPTIONS
#
drc                       1
drc_use_c                 0
drc_log_uml               0
drc_log_native            0
bios                      
cheat                     0
skip_gameinfo             0
uifont                    default
ui                        cabinet
ramsize                   
confirm_quit              0
ui_mouse                  1
language                  English
nvram_save                1

#
# SCRIPTING OPTIONS
#
autoboot_command          
autoboot_delay            0
autoboot_script           
console                   0
plugins                   1
plugin                    
noplugin                  

#
# HTTP SERVER OPTIONS
#
http                      0
http_port                 8080
http_root                 web

#
# OSD KEYBOARD MAPPING OPTIONS
#
uimodekey                 SCRLOCK

#
# OSD FONT OPTIONS
#
uifontprovider            auto

#
# OSD OUTPUT OPTIONS
#
output                    auto

#
# OSD INPUT OPTIONS
#
keyboardprovider          auto
mouseprovider             auto
lightgunprovider          auto
joystickprovider          auto

#
# OSD DEBUGGING OPTIONS
#
debugger                  auto
debugger_port             23946
debugger_font             auto
debugger_font_size        0
watchdog                  0

#
# OSD PERFORMANCE OPTIONS
#
numprocessors             auto
bench                     0

#
# OSD VIDEO OPTIONS
#
video                     auto
numscreens                1
window                    0
maximize                  1
waitvsync                 0
syncrefresh               0
monitorprovider           auto

#
# OSD PER-WINDOW VIDEO OPTIONS
#
screen                    auto
aspect                    auto
resolution                auto
view                      auto
screen0                   auto
aspect0                   auto
resolution0               auto
view0                     auto
screen1                   auto
aspect1                   auto
resolution1               auto
view1                     auto
screen2                   auto
aspect2                   auto
resolution2               auto
view2                     auto
screen3                   auto
aspect3                   auto
resolution3               auto
view3                     auto

#
# OSD FULL SCREEN OPTIONS
#
switchres                 0

#
# OSD ACCELERATED VIDEO OPTIONS
#
filter                    1
prescale                  1

#
# OpenGL-SPECIFIC OPTIONS
#
gl_forcepow2texture       0
gl_notexturerect          0
gl_vbo                    1
gl_pbo                    1
gl_glsl                   0
gl_glsl_filter            1
glsl_shader_mame0         none
glsl_shader_mame1         none
glsl_shader_mame2         none
glsl_shader_mame3         none
glsl_shader_mame4         none
glsl_shader_mame5         none
glsl_shader_mame6         none
glsl_shader_mame7         none
glsl_shader_mame8         none
glsl_shader_mame9         none
glsl_shader_screen0       none
glsl_shader_screen1       none
glsl_shader_screen2       none
glsl_shader_screen3       none
glsl_shader_screen4       none
glsl_shader_screen5       none
glsl_shader_screen6       none
glsl_shader_screen7       none
glsl_shader_screen8       none
glsl_shader_screen9       none

#
# OSD SOUND OPTIONS
#
sound                     auto
audio_latency             2

#
# PORTAUDIO OPTIONS
#
pa_api                    none
pa_device                 none
pa_latency                0

#
# BGFX POST-PROCESSING OPTIONS
#
bgfx_path                 bgfx
bgfx_backend              auto
bgfx_debug                0
bgfx_screen_chains        default
bgfx_shadow_mask          slot-mask.png
bgfx_lut                  
bgfx_avi_name             auto

#
# WINDOWS PERFORMANCE OPTIONS
#
priority                  0
profile                   0

#
# WINDOWS VIDEO OPTIONS
#
menu                      0
attach_window             

#
# DIRECT3D POST-PROCESSING OPTIONS
#
hlslpath                  hlsl
hlsl_enable               0
hlsl_oversampling         0
hlsl_write                auto
hlsl_snap_width           2048
hlsl_snap_height          1536
shadow_mask_tile_mode     0
shadow_mask_alpha         0.0
shadow_mask_texture       shadow-mask.png
shadow_mask_x_count       6
shadow_mask_y_count       4
shadow_mask_usize         0.1875
shadow_mask_vsize         0.25
shadow_mask_uoffset       0.0
shadow_mask_voffset       0.0
distortion                0.0
cubic_distortion          0.0
distort_corner            0.0
round_corner              0.0
smooth_border             0.0
reflection                0.0
vignetting                0.0
scanline_alpha            0.0
scanline_size             1.0
scanline_height           1.0
scanline_variation        1.0
scanline_bright_scale     1.0
scanline_bright_offset    0.0
scanline_jitter           0.0
hum_bar_alpha             0.0
defocus                   0.0,0.0
converge_x                0.0,0.0,0.0
converge_y                0.0,0.0,0.0
radial_converge_x         0.0,0.0,0.0
radial_converge_y         0.0,0.0,0.0
red_ratio                 1.0,0.0,0.0
grn_ratio                 0.0,1.0,0.0
blu_ratio                 0.0,0.0,1.0
saturation                1.0
offset                    0.0,0.0,0.0
scale                     1.0,1.0,1.0
power                     1.0,1.0,1.0
floor                     0.0,0.0,0.0
phosphor_life             0.0,0.0,0.0
chroma_mode               3
chroma_conversion_gain    0.299,0.587,0.114
chroma_a                  0.64,0.33
chroma_b                  0.30,0.60
chroma_c                  0.15,0.06
chroma_y_gain             0.2126,0.7152,0.0722

#
# NTSC POST-PROCESSING OPTIONS
#
yiq_enable                0
yiq_jitter                0.0
yiq_cc                    3.57954545
yiq_a                     0.5
yiq_b                     0.5
yiq_o                     0.0
yiq_p                     1.0
yiq_n                     1.0
yiq_y                     6.0
yiq_i                     1.2
yiq_q                     0.6
yiq_scan_time             52.6
yiq_phase_count           2

#
# VECTOR POST-PROCESSING OPTIONS
#
vector_beam_smooth        0.0
vector_length_scale       0.5
vector_length_ratio       0.5

#
# BLOOM POST-PROCESSING OPTIONS
#
bloom_blend_mode          0
bloom_scale               0.0
bloom_overdrive           1.0,1.0,1.0
bloom_lvl0_weight         1.0
bloom_lvl1_weight         0.64
bloom_lvl2_weight         0.32
bloom_lvl3_weight         0.16
bloom_lvl4_weight         0.08
bloom_lvl5_weight         0.06
bloom_lvl6_weight         0.04
bloom_lvl7_weight         0.02
bloom_lvl8_weight         0.01
lut_texture               
lut_enable                0
ui_lut_texture            
ui_lut_enable             0

#
# FULL SCREEN OPTIONS
#
triplebuffer              0
full_screen_brightness    1.0
full_screen_contrast      1.0
full_screen_gamma         1.0

#
# INPUT DEVICE OPTIONS
#
global_inputs             0
dual_lightgun             0

Emulated system/software

game: timecris I

Incorrect behaviour

Our mouse output absolute coordinate. It works exactly same as a normal mouse in Linux system desktop and Windows system desktop. We have same version of Mame in both Windows and Linux. the mouse work normally in Windows. However, the mouse's sensitivity is very unusual in Linux. The mouse was locked around the four corner of the screen and move suspious fast in both the game and mame interface. We have to modify the in-game sensitivity and set it to the minimum. Even though the sensitivity has been set to the minimum, it still not working well comparing to the behavior in Windows. The mouse need no configuration and work smoothly in Windows.

Expected behaviour

Our mouse works fine in Linux system desktop just like a normal mouse in Linux. We expect our mouse working normally in emulator interface and in Timecris game.

Steps to reproduce

we have a hid device that output absolute coordinate. The device works fine in Linux system desktop. However, in both Mame 0.230 and Mame 0.265 in Linux, the device was locked around the 4 corners of the screen. The movement of the device on the screen become suspious fast in both Mame interface or in Timecris game.

Additional details

No response

cuavas commented 3 months ago

Windows and Linux don’t provide the same APIs to applications, so some behaviour will obviously be different.

MAME defaults to its RawInput mouse and lightgun providers on Windows. Which one reacts to a peripheral depends on whether it generates relative or absolute RawInput MOUSE_MOVE_RELATIVE or MOUSE_MOVE_MOVE_ABSOULTE. RawInput is a Windows-specific API.

As of version 0.266 MAME defaults to its SDL mouse and lightgun providers on Linux (the SDL lightgun provider was not implemented in version 0.265 and earlier). The SDL mouse provider responds to SDL mouse movement events; the SDL lightgun provider maps the pointer position within the window onto the lightgun axes. The SDL mouse and lightgun providers have similar behaviour to the Win32 mouse and lightgun providers on Windows.

You may get better results by upgrading to version 0.266 so you can use the SDL lightgun provider, or by using the X11 XInput lightgun provider described here: https://docs.mamedev.org/commandline/commandline-all.html#mame-commandline-lightgunprovider

cuavas commented 3 months ago

Sorry, wrong link. Description of the X11 XInput lightgun provider is here: https://docs.mamedev.org/advanced/linux-lightguns.html

Note that none of the MAME developers have access to hardware for testing this, and the person who contributed it has not contributed to MAME or responded to communication since. We cannot provide additional support.

Mygit520 commented 3 months ago

Windows and Linux don’t provide the same APIs to applications, so some behaviour will obviously be different.

MAME defaults to its RawInput mouse and lightgun providers on Windows. Which one reacts to a peripheral depends on whether it generates relative or absolute RawInput MOUSE_MOVE_RELATIVE or MOUSE_MOVE_MOVE_ABSOULTE. RawInput is a Windows-specific API.

As of version 0.266 MAME defaults to its SDL mouse and lightgun providers on Linux (the SDL lightgun provider was not implemented in version 0.265 and earlier). The SDL mouse provider responds to SDL mouse movement events; the SDL lightgun provider maps the pointer position within the window onto the lightgun axes. The SDL mouse and lightgun providers have similar behaviour to the Win32 mouse and lightgun providers on Windows.

You may get better results by upgrading to version 0.266 so you can use the SDL lightgun provider, or by using the X11 XInput lightgun provider described here: https://docs.mamedev.org/commandline/commandline-all.html#mame-commandline-lightgunprovider

I downloaded the source code of 0.266 and cross compiled it to run on the ARM64 architecture. I chose the SDL Lightgun device as you said, and the emulator recognized my absolute value mouse device. The buttons can be detected, but the movement of the X and Y axes is completely undetectable. I followed the website you provided and configured udev rules and Xorg inputs step by step according to the instructions above. However, this situation became even more suspious. When we enabled this configuration, our own keyboard and mouse (including absolute and relative value mice) became invalid.