mirror of
https://github.com/libretro/RetroArch
synced 2025-03-28 19:20:35 +00:00
commit
2d279df6e4
@ -19,6 +19,7 @@
|
||||
|
||||
#include "../configuration.h"
|
||||
#include "../paths.h"
|
||||
#include "../retroarch.h"
|
||||
#include "../version.h"
|
||||
|
||||
#include <string/stdstring.h>
|
||||
@ -34,8 +35,6 @@
|
||||
|
||||
#include "../deps/rcheevos/include/rc_api_runtime.h"
|
||||
|
||||
|
||||
|
||||
/* Define this macro to log URLs. */
|
||||
#undef CHEEVOS_LOG_URLS
|
||||
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include <net/net_socket.h>
|
||||
#endif
|
||||
#include <lists/dir_list.h>
|
||||
#include <file/file_path.h>
|
||||
#include <streams/stdin_stream.h>
|
||||
#include <streams/file_stream.h>
|
||||
#include <string/stdstring.h>
|
||||
@ -49,6 +50,7 @@
|
||||
#include "dynamic.h"
|
||||
#include "list_special.h"
|
||||
#include "paths.h"
|
||||
#include "retroarch.h"
|
||||
#include "verbosity.h"
|
||||
#include "version.h"
|
||||
#include "version_git.h"
|
||||
|
@ -29,9 +29,10 @@
|
||||
|
||||
#include <streams/interface_stream.h>
|
||||
|
||||
#include "retroarch.h"
|
||||
#include "retroarch_types.h"
|
||||
#include "input/input_defines.h"
|
||||
|
||||
#include "configuration.h"
|
||||
|
||||
RETRO_BEGIN_DECLS
|
||||
|
||||
|
122
core.h
122
core.h
@ -23,130 +23,10 @@
|
||||
|
||||
#include <retro_common_api.h>
|
||||
|
||||
#include "core_type.h"
|
||||
#include "input/input_defines.h"
|
||||
#include "disk_control_interface.h"
|
||||
#include "retroarch_types.h"
|
||||
|
||||
RETRO_BEGIN_DECLS
|
||||
|
||||
enum
|
||||
{
|
||||
/* Polling is performed before
|
||||
* call to retro_run. */
|
||||
POLL_TYPE_EARLY = 0,
|
||||
|
||||
/* Polling is performed when requested. */
|
||||
POLL_TYPE_NORMAL,
|
||||
|
||||
/* Polling is performed on first call to
|
||||
* retro_input_state per frame. */
|
||||
POLL_TYPE_LATE
|
||||
};
|
||||
|
||||
typedef struct rarch_memory_descriptor
|
||||
{
|
||||
struct retro_memory_descriptor core; /* uint64_t alignment */
|
||||
size_t disconnect_mask;
|
||||
} rarch_memory_descriptor_t;
|
||||
|
||||
typedef struct rarch_memory_map
|
||||
{
|
||||
rarch_memory_descriptor_t *descriptors;
|
||||
unsigned num_descriptors;
|
||||
} rarch_memory_map_t;
|
||||
|
||||
typedef struct rarch_system_info
|
||||
{
|
||||
struct retro_location_callback location_cb; /* ptr alignment */
|
||||
disk_control_interface_t disk_control; /* ptr alignment */
|
||||
struct retro_system_info info; /* ptr alignment */
|
||||
rarch_memory_map_t mmaps; /* ptr alignment */
|
||||
const char *input_desc_btn[MAX_USERS][RARCH_FIRST_META_KEY];
|
||||
struct
|
||||
{
|
||||
struct retro_subsystem_info *data;
|
||||
unsigned size;
|
||||
} subsystem;
|
||||
struct
|
||||
{
|
||||
struct retro_controller_info *data;
|
||||
unsigned size;
|
||||
} ports;
|
||||
unsigned rotation;
|
||||
unsigned performance_level;
|
||||
char valid_extensions[255];
|
||||
bool load_no_content;
|
||||
bool supports_vfs;
|
||||
} rarch_system_info_t;
|
||||
|
||||
typedef struct retro_ctx_input_state_info
|
||||
{
|
||||
retro_input_state_t cb;
|
||||
} retro_ctx_input_state_info_t;
|
||||
|
||||
typedef struct retro_ctx_cheat_info
|
||||
{
|
||||
const char *code;
|
||||
unsigned index;
|
||||
bool enabled;
|
||||
} retro_ctx_cheat_info_t;
|
||||
|
||||
typedef struct retro_ctx_api_info
|
||||
{
|
||||
unsigned version;
|
||||
} retro_ctx_api_info_t;
|
||||
|
||||
typedef struct retro_ctx_region_info
|
||||
{
|
||||
unsigned region;
|
||||
} retro_ctx_region_info_t;
|
||||
|
||||
typedef struct retro_ctx_controller_info
|
||||
{
|
||||
unsigned port;
|
||||
unsigned device;
|
||||
} retro_ctx_controller_info_t;
|
||||
|
||||
typedef struct retro_ctx_memory_info
|
||||
{
|
||||
void *data;
|
||||
size_t size;
|
||||
unsigned id;
|
||||
} retro_ctx_memory_info_t;
|
||||
|
||||
typedef struct retro_ctx_load_content_info
|
||||
{
|
||||
struct retro_game_info *info;
|
||||
const struct string_list *content;
|
||||
const struct retro_subsystem_info *special;
|
||||
} retro_ctx_load_content_info_t;
|
||||
|
||||
typedef struct retro_ctx_serialize_info
|
||||
{
|
||||
const void *data_const;
|
||||
void *data;
|
||||
size_t size;
|
||||
} retro_ctx_serialize_info_t;
|
||||
|
||||
typedef struct retro_ctx_size_info
|
||||
{
|
||||
size_t size;
|
||||
} retro_ctx_size_info_t;
|
||||
|
||||
typedef struct retro_ctx_environ_info
|
||||
{
|
||||
retro_environment_t env;
|
||||
} retro_ctx_environ_info_t;
|
||||
|
||||
typedef struct retro_callbacks
|
||||
{
|
||||
retro_video_refresh_t frame_cb;
|
||||
retro_audio_sample_t sample_cb;
|
||||
retro_audio_sample_batch_t sample_batch_cb;
|
||||
retro_input_state_t state_cb;
|
||||
retro_input_poll_t poll_cb;
|
||||
} retro_callbacks_t;
|
||||
|
||||
#ifdef HAVE_REWIND
|
||||
bool core_set_rewind_callbacks(void);
|
||||
#endif
|
||||
|
32
core_type.h
32
core_type.h
@ -1,32 +0,0 @@
|
||||
/* RetroArch - A frontend for libretro.
|
||||
* Copyright (C) 2011-2017 - Daniel De Matteis
|
||||
* Copyright (C) 2016-2019 - Brad Parker
|
||||
*
|
||||
* RetroArch is free software: you can redistribute it and/or modify it under the terms
|
||||
* of the GNU General Public License as published by the Free Software Found-
|
||||
* ation, either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
|
||||
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
||||
* PURPOSE. See the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with RetroArch.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef __CORE_TYPE_H
|
||||
#define __CORE_TYPE_H
|
||||
|
||||
enum rarch_core_type
|
||||
{
|
||||
CORE_TYPE_PLAIN = 0,
|
||||
CORE_TYPE_DUMMY,
|
||||
CORE_TYPE_FFMPEG,
|
||||
CORE_TYPE_MPV,
|
||||
CORE_TYPE_IMAGEVIEWER,
|
||||
CORE_TYPE_NETRETROPAD,
|
||||
CORE_TYPE_VIDEO_PROCESSOR,
|
||||
CORE_TYPE_GONG
|
||||
};
|
||||
|
||||
#endif
|
@ -22,7 +22,7 @@
|
||||
#include <retro_common_api.h>
|
||||
#include <libretro.h>
|
||||
|
||||
#include "core_type.h"
|
||||
#include "retroarch_types.h"
|
||||
|
||||
RETRO_BEGIN_DECLS
|
||||
|
||||
|
@ -1053,11 +1053,11 @@ static LRESULT CALLBACK wnd_proc_common_internal(HWND hwnd,
|
||||
break;
|
||||
#ifdef HAVE_CLIP_WINDOW
|
||||
case WM_SETFOCUS:
|
||||
if (input_mouse_grabbed())
|
||||
if (input_state_get_ptr()->grab_mouse_state)
|
||||
win32_clip_window(true);
|
||||
break;
|
||||
case WM_KILLFOCUS:
|
||||
if (input_mouse_grabbed())
|
||||
if (input_state_get_ptr()->grab_mouse_state)
|
||||
win32_clip_window(false);
|
||||
break;
|
||||
#endif
|
||||
@ -1128,7 +1128,7 @@ static LRESULT CALLBACK wnd_proc_winraw_common_internal(HWND hwnd,
|
||||
break;
|
||||
case WM_SETFOCUS:
|
||||
#ifdef HAVE_CLIP_WINDOW
|
||||
if (input_mouse_grabbed())
|
||||
if (input_state_get_ptr()->grab_mouse_state)
|
||||
win32_clip_window(true);
|
||||
#endif
|
||||
#if !defined(_XBOX)
|
||||
@ -1138,7 +1138,7 @@ static LRESULT CALLBACK wnd_proc_winraw_common_internal(HWND hwnd,
|
||||
break;
|
||||
case WM_KILLFOCUS:
|
||||
#ifdef HAVE_CLIP_WINDOW
|
||||
if (input_mouse_grabbed())
|
||||
if (input_state_get_ptr()->grab_mouse_state)
|
||||
win32_clip_window(false);
|
||||
#endif
|
||||
#if !defined(_XBOX)
|
||||
@ -1264,11 +1264,11 @@ static LRESULT CALLBACK wnd_proc_common_dinput_internal(HWND hwnd,
|
||||
break;
|
||||
#ifdef HAVE_CLIP_WINDOW
|
||||
case WM_SETFOCUS:
|
||||
if (input_mouse_grabbed())
|
||||
if (input_state_get_ptr()->grab_mouse_state)
|
||||
win32_clip_window(true);
|
||||
break;
|
||||
case WM_KILLFOCUS:
|
||||
if (input_mouse_grabbed())
|
||||
if (input_state_get_ptr()->grab_mouse_state)
|
||||
win32_clip_window(false);
|
||||
break;
|
||||
#endif
|
||||
|
@ -45,7 +45,8 @@ static void *qnx_joypad_init(void *data)
|
||||
static int32_t qnx_joypad_button(unsigned port, uint16_t joykey)
|
||||
{
|
||||
qnx_input_device_t* controller = NULL;
|
||||
qnx_input_t *qnx = (qnx_input_t*)input_driver_get_data();
|
||||
qnx_input_t *qnx =
|
||||
(qnx_input_t*)input_state_get_ptr()->current_data;
|
||||
|
||||
if (!qnx || port >= DEFAULT_MAX_PADS)
|
||||
return 0;
|
||||
@ -99,7 +100,8 @@ static int16_t qnx_joypad_axis_state(
|
||||
|
||||
static int16_t qnx_joypad_axis(unsigned port, uint32_t joyaxis)
|
||||
{
|
||||
qnx_input_t *qnx = (qnx_input_t*)input_driver_get_data();
|
||||
qnx_input_t *qnx =
|
||||
(qnx_input_t*)input_state_get_ptr()->current_data;
|
||||
qnx_input_device_t* controller = NULL;
|
||||
if (!qnx || port >= DEFAULT_MAX_PADS)
|
||||
return 0;
|
||||
@ -114,7 +116,8 @@ static int16_t qnx_joypad_state(
|
||||
{
|
||||
unsigned i;
|
||||
int16_t ret = 0;
|
||||
qnx_input_t *qnx = (qnx_input_t*)input_driver_get_data();
|
||||
qnx_input_t *qnx =
|
||||
(qnx_input_t*)input_state_get_ptr()->current_data;
|
||||
qnx_input_device_t* controller = NULL;
|
||||
uint16_t port_idx = joypad_info->joy_idx;
|
||||
|
||||
|
@ -299,132 +299,13 @@ hid_driver_t *hid_drivers[] = {
|
||||
};
|
||||
#endif
|
||||
|
||||
/**************************************/
|
||||
|
||||
/* private function prototypes */
|
||||
|
||||
static const input_device_driver_t *input_joypad_init_first(void *data);
|
||||
|
||||
static input_driver_state_t input_driver_st = {0}; /* double alignment */
|
||||
|
||||
/**************************************/
|
||||
|
||||
bool input_driver_set_rumble(
|
||||
input_driver_state_t *driver_state, unsigned port, unsigned joy_idx,
|
||||
enum retro_rumble_effect effect, uint16_t strength)
|
||||
input_driver_state_t *input_state_get_ptr(void)
|
||||
{
|
||||
const input_device_driver_t *primary_joypad;
|
||||
const input_device_driver_t *sec_joypad;
|
||||
bool rumble_state = false;
|
||||
|
||||
if (!driver_state || (joy_idx >= MAX_USERS))
|
||||
return false;
|
||||
|
||||
primary_joypad = driver_state->primary_joypad;
|
||||
sec_joypad = driver_state->secondary_joypad;
|
||||
|
||||
if (primary_joypad && primary_joypad->set_rumble)
|
||||
rumble_state = primary_joypad->set_rumble(joy_idx, effect, strength);
|
||||
|
||||
/* if sec_joypad exists, this set_rumble() return value will replace primary_joypad's return */
|
||||
if (sec_joypad && sec_joypad->set_rumble)
|
||||
rumble_state = sec_joypad->set_rumble(joy_idx, effect, strength);
|
||||
|
||||
return rumble_state;
|
||||
}
|
||||
|
||||
/**************************************/
|
||||
|
||||
bool input_driver_set_rumble_gain(
|
||||
input_driver_state_t *driver_state, unsigned gain,
|
||||
unsigned input_max_users)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
if (driver_state->primary_joypad
|
||||
&& driver_state->primary_joypad->set_rumble_gain)
|
||||
{
|
||||
for (i = 0; i < input_max_users; i++)
|
||||
driver_state->primary_joypad->set_rumble_gain(i, gain);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**************************************/
|
||||
|
||||
bool input_driver_set_sensor(
|
||||
input_driver_state_t *driver_state, unsigned port, bool sensors_enable,
|
||||
enum retro_sensor_action action, unsigned rate)
|
||||
{
|
||||
const input_driver_t *current_driver;
|
||||
void *current_data;
|
||||
|
||||
if (!driver_state || !driver_state->current_data)
|
||||
return false;
|
||||
|
||||
current_driver = driver_state->current_driver;
|
||||
current_data = driver_state->current_data;
|
||||
|
||||
/* If sensors are disabled, inhibit any enable
|
||||
* actions (but always allow disable actions) */
|
||||
if (!sensors_enable &&
|
||||
((action == RETRO_SENSOR_ACCELEROMETER_ENABLE) ||
|
||||
(action == RETRO_SENSOR_GYROSCOPE_ENABLE) ||
|
||||
(action == RETRO_SENSOR_ILLUMINANCE_ENABLE)))
|
||||
return false;
|
||||
|
||||
if (current_driver && current_driver->set_sensor_state)
|
||||
return current_driver->set_sensor_state(current_data,
|
||||
port, action, rate);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**************************************/
|
||||
|
||||
float input_driver_get_sensor(
|
||||
input_driver_state_t *driver_state,
|
||||
unsigned port, bool sensors_enable, unsigned id)
|
||||
{
|
||||
const input_driver_t *current_driver;
|
||||
void *current_data;
|
||||
|
||||
if (!driver_state || !driver_state->current_data)
|
||||
return 0.0f;
|
||||
|
||||
current_driver = driver_state->current_driver;
|
||||
current_data = driver_state->current_data;
|
||||
|
||||
if (sensors_enable && current_driver->get_sensor_input)
|
||||
return current_driver->get_sensor_input(current_data, port, id);
|
||||
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
const input_device_driver_t *input_joypad_init_driver(
|
||||
const char *ident, void *data)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
if (ident && *ident)
|
||||
{
|
||||
for (i = 0; joypad_drivers[i]; i++)
|
||||
{
|
||||
if (string_is_equal(ident, joypad_drivers[i]->ident)
|
||||
&& joypad_drivers[i]->init)
|
||||
{
|
||||
void *ptr = joypad_drivers[i]->init(data);
|
||||
if (ptr)
|
||||
{
|
||||
RARCH_LOG("[Joypad]: Found joypad driver: \"%s\".\n",
|
||||
joypad_drivers[i]->ident);
|
||||
return joypad_drivers[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return input_joypad_init_first(data); /* fall back to first available driver */
|
||||
return &input_driver_st;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -458,14 +339,127 @@ static const input_device_driver_t *input_joypad_init_first(void *data)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
bool input_driver_set_rumble(
|
||||
unsigned port, unsigned joy_idx,
|
||||
enum retro_rumble_effect effect, uint16_t strength)
|
||||
{
|
||||
const input_device_driver_t *primary_joypad;
|
||||
const input_device_driver_t *sec_joypad;
|
||||
bool rumble_state = false;
|
||||
|
||||
if (joy_idx >= MAX_USERS)
|
||||
return false;
|
||||
|
||||
primary_joypad = input_driver_st.primary_joypad;
|
||||
sec_joypad = input_driver_st.secondary_joypad;
|
||||
|
||||
if (primary_joypad && primary_joypad->set_rumble)
|
||||
rumble_state = primary_joypad->set_rumble(joy_idx, effect, strength);
|
||||
|
||||
/* if sec_joypad exists, this set_rumble() return value will replace primary_joypad's return */
|
||||
if (sec_joypad && sec_joypad->set_rumble)
|
||||
rumble_state = sec_joypad->set_rumble(joy_idx, effect, strength);
|
||||
|
||||
return rumble_state;
|
||||
}
|
||||
|
||||
bool input_driver_set_rumble_gain(
|
||||
unsigned gain,
|
||||
unsigned input_max_users)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
if ( input_driver_st.primary_joypad
|
||||
&& input_driver_st.primary_joypad->set_rumble_gain)
|
||||
{
|
||||
for (i = 0; i < input_max_users; i++)
|
||||
input_driver_st.primary_joypad->set_rumble_gain(i, gain);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool input_driver_set_sensor(
|
||||
unsigned port, bool sensors_enable,
|
||||
enum retro_sensor_action action, unsigned rate)
|
||||
{
|
||||
const input_driver_t *current_driver;
|
||||
void *current_data;
|
||||
|
||||
if (!input_driver_st.current_data)
|
||||
return false;
|
||||
|
||||
current_driver = input_driver_st.current_driver;
|
||||
current_data = input_driver_st.current_data;
|
||||
|
||||
/* If sensors are disabled, inhibit any enable
|
||||
* actions (but always allow disable actions) */
|
||||
if (!sensors_enable &&
|
||||
((action == RETRO_SENSOR_ACCELEROMETER_ENABLE) ||
|
||||
(action == RETRO_SENSOR_GYROSCOPE_ENABLE) ||
|
||||
(action == RETRO_SENSOR_ILLUMINANCE_ENABLE)))
|
||||
return false;
|
||||
|
||||
if (current_driver && current_driver->set_sensor_state)
|
||||
return current_driver->set_sensor_state(current_data,
|
||||
port, action, rate);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**************************************/
|
||||
|
||||
float input_driver_get_sensor(
|
||||
unsigned port, bool sensors_enable, unsigned id)
|
||||
{
|
||||
const input_driver_t *current_driver;
|
||||
void *current_data;
|
||||
|
||||
if (!input_driver_st.current_data)
|
||||
return 0.0f;
|
||||
|
||||
current_driver = input_driver_st.current_driver;
|
||||
current_data = input_driver_st.current_data;
|
||||
|
||||
if (sensors_enable && current_driver->get_sensor_input)
|
||||
return current_driver->get_sensor_input(current_data, port, id);
|
||||
|
||||
return 0.0f;
|
||||
}
|
||||
|
||||
const input_device_driver_t *input_joypad_init_driver(
|
||||
const char *ident, void *data)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
if (ident && *ident)
|
||||
{
|
||||
for (i = 0; joypad_drivers[i]; i++)
|
||||
{
|
||||
if (string_is_equal(ident, joypad_drivers[i]->ident)
|
||||
&& joypad_drivers[i]->init)
|
||||
{
|
||||
void *ptr = joypad_drivers[i]->init(data);
|
||||
if (ptr)
|
||||
{
|
||||
RARCH_LOG("[Joypad]: Found joypad driver: \"%s\".\n",
|
||||
joypad_drivers[i]->ident);
|
||||
return joypad_drivers[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return input_joypad_init_first(data); /* fall back to first available driver */
|
||||
}
|
||||
|
||||
|
||||
bool input_driver_button_combo(
|
||||
input_driver_state_t *input_driver_state,
|
||||
unsigned mode,
|
||||
retro_time_t current_time,
|
||||
input_bits_t* p_input)
|
||||
{
|
||||
retro_assert(input_driver_state != NULL);
|
||||
retro_assert(p_input != NULL);
|
||||
retro_assert(p_input != NULL);
|
||||
|
||||
switch (mode)
|
||||
{
|
||||
@ -515,7 +509,7 @@ bool input_driver_button_combo(
|
||||
break;
|
||||
case INPUT_COMBO_HOLD_START:
|
||||
{
|
||||
rarch_timer_t *timer = &input_driver_state->combo_timers[INPUT_COMBO_HOLD_START];
|
||||
rarch_timer_t *timer = &input_driver_st.combo_timers[INPUT_COMBO_HOLD_START];
|
||||
|
||||
if (!BIT256_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_START))
|
||||
{
|
||||
@ -554,7 +548,7 @@ bool input_driver_button_combo(
|
||||
break;
|
||||
case INPUT_COMBO_HOLD_SELECT:
|
||||
{
|
||||
rarch_timer_t *timer = &input_driver_state->combo_timers[INPUT_COMBO_HOLD_SELECT];
|
||||
rarch_timer_t *timer = &input_driver_st.combo_timers[INPUT_COMBO_HOLD_SELECT];
|
||||
|
||||
if (!BIT256_GET_PTR(p_input, RETRO_DEVICE_ID_JOYPAD_SELECT))
|
||||
{
|
||||
@ -1789,6 +1783,209 @@ void input_overlay_auto_rotate_(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void input_poll_overlay(
|
||||
bool keyboard_mapping_blocked,
|
||||
settings_t *settings,
|
||||
void *ol_data,
|
||||
enum overlay_visibility *overlay_visibility,
|
||||
float opacity,
|
||||
unsigned analog_dpad_mode,
|
||||
float axis_threshold)
|
||||
{
|
||||
input_overlay_state_t old_key_state;
|
||||
unsigned i, j;
|
||||
input_overlay_t *ol = (input_overlay_t*)ol_data;
|
||||
uint16_t key_mod = 0;
|
||||
bool polled = false;
|
||||
bool button_pressed = false;
|
||||
input_driver_state_t *input_st = &input_driver_st;
|
||||
void *input_data = input_st->current_data;
|
||||
input_overlay_state_t *ol_state = &ol->overlay_state;
|
||||
input_driver_t *current_input = input_st->current_driver;
|
||||
enum overlay_show_input_type
|
||||
input_overlay_show_inputs = (enum overlay_show_input_type)
|
||||
settings->uints.input_overlay_show_inputs;
|
||||
unsigned input_overlay_show_inputs_port = settings->uints.input_overlay_show_inputs_port;
|
||||
float touch_scale = (float)settings->uints.input_touch_scale;
|
||||
|
||||
if (!ol_state)
|
||||
return;
|
||||
|
||||
memcpy(old_key_state.keys, ol_state->keys,
|
||||
sizeof(ol_state->keys));
|
||||
memset(ol_state, 0, sizeof(*ol_state));
|
||||
|
||||
if (current_input->input_state)
|
||||
{
|
||||
rarch_joypad_info_t joypad_info;
|
||||
unsigned device = ol->active->full_screen
|
||||
? RARCH_DEVICE_POINTER_SCREEN
|
||||
: RETRO_DEVICE_POINTER;
|
||||
const input_device_driver_t
|
||||
*joypad = input_st->primary_joypad;
|
||||
#ifdef HAVE_MFI
|
||||
const input_device_driver_t
|
||||
*sec_joypad = input_st->secondary_joypad;
|
||||
#else
|
||||
const input_device_driver_t
|
||||
*sec_joypad = NULL;
|
||||
#endif
|
||||
|
||||
joypad_info.joy_idx = 0;
|
||||
joypad_info.auto_binds = NULL;
|
||||
joypad_info.axis_threshold = 0.0f;
|
||||
|
||||
for (i = 0;
|
||||
current_input->input_state(
|
||||
input_data,
|
||||
joypad,
|
||||
sec_joypad,
|
||||
&joypad_info,
|
||||
NULL,
|
||||
keyboard_mapping_blocked,
|
||||
0,
|
||||
device,
|
||||
i,
|
||||
RETRO_DEVICE_ID_POINTER_PRESSED);
|
||||
i++)
|
||||
{
|
||||
input_overlay_state_t polled_data;
|
||||
int16_t x = current_input->input_state(
|
||||
input_data,
|
||||
joypad,
|
||||
sec_joypad,
|
||||
&joypad_info,
|
||||
NULL,
|
||||
keyboard_mapping_blocked,
|
||||
0,
|
||||
device,
|
||||
i,
|
||||
RETRO_DEVICE_ID_POINTER_X);
|
||||
int16_t y = current_input->input_state(
|
||||
input_data,
|
||||
joypad,
|
||||
sec_joypad,
|
||||
&joypad_info,
|
||||
NULL,
|
||||
keyboard_mapping_blocked,
|
||||
0,
|
||||
device,
|
||||
i,
|
||||
RETRO_DEVICE_ID_POINTER_Y);
|
||||
|
||||
memset(&polled_data, 0, sizeof(struct input_overlay_state));
|
||||
|
||||
if (ol->enable)
|
||||
input_overlay_poll(ol, &polled_data, x, y, touch_scale);
|
||||
else
|
||||
ol->blocked = false;
|
||||
|
||||
bits_or_bits(ol_state->buttons.data,
|
||||
polled_data.buttons.data,
|
||||
ARRAY_SIZE(polled_data.buttons.data));
|
||||
|
||||
for (j = 0; j < ARRAY_SIZE(ol_state->keys); j++)
|
||||
ol_state->keys[j] |= polled_data.keys[j];
|
||||
|
||||
/* Fingers pressed later take priority and matched up
|
||||
* with overlay poll priorities. */
|
||||
for (j = 0; j < 4; j++)
|
||||
if (polled_data.analog[j])
|
||||
ol_state->analog[j] = polled_data.analog[j];
|
||||
|
||||
polled = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ( OVERLAY_GET_KEY(ol_state, RETROK_LSHIFT) ||
|
||||
OVERLAY_GET_KEY(ol_state, RETROK_RSHIFT))
|
||||
key_mod |= RETROKMOD_SHIFT;
|
||||
|
||||
if (OVERLAY_GET_KEY(ol_state, RETROK_LCTRL) ||
|
||||
OVERLAY_GET_KEY(ol_state, RETROK_RCTRL))
|
||||
key_mod |= RETROKMOD_CTRL;
|
||||
|
||||
if ( OVERLAY_GET_KEY(ol_state, RETROK_LALT) ||
|
||||
OVERLAY_GET_KEY(ol_state, RETROK_RALT))
|
||||
key_mod |= RETROKMOD_ALT;
|
||||
|
||||
if ( OVERLAY_GET_KEY(ol_state, RETROK_LMETA) ||
|
||||
OVERLAY_GET_KEY(ol_state, RETROK_RMETA))
|
||||
key_mod |= RETROKMOD_META;
|
||||
|
||||
/* CAPSLOCK SCROLLOCK NUMLOCK */
|
||||
for (i = 0; i < ARRAY_SIZE(ol_state->keys); i++)
|
||||
{
|
||||
if (ol_state->keys[i] != old_key_state.keys[i])
|
||||
{
|
||||
uint32_t orig_bits = old_key_state.keys[i];
|
||||
uint32_t new_bits = ol_state->keys[i];
|
||||
|
||||
for (j = 0; j < 32; j++)
|
||||
if ((orig_bits & (1 << j)) != (new_bits & (1 << j)))
|
||||
input_keyboard_event(new_bits & (1 << j),
|
||||
i * 32 + j, 0, key_mod, RETRO_DEVICE_POINTER);
|
||||
}
|
||||
}
|
||||
|
||||
/* Map "analog" buttons to analog axes like regular input drivers do. */
|
||||
for (j = 0; j < 4; j++)
|
||||
{
|
||||
unsigned bind_plus = RARCH_ANALOG_LEFT_X_PLUS + 2 * j;
|
||||
unsigned bind_minus = bind_plus + 1;
|
||||
|
||||
if (ol_state->analog[j])
|
||||
continue;
|
||||
|
||||
if ((BIT256_GET(ol->overlay_state.buttons, bind_plus)))
|
||||
ol_state->analog[j] += 0x7fff;
|
||||
if ((BIT256_GET(ol->overlay_state.buttons, bind_minus)))
|
||||
ol_state->analog[j] -= 0x7fff;
|
||||
}
|
||||
|
||||
/* Check for analog_dpad_mode.
|
||||
* Map analogs to d-pad buttons when configured. */
|
||||
switch (analog_dpad_mode)
|
||||
{
|
||||
case ANALOG_DPAD_LSTICK:
|
||||
case ANALOG_DPAD_RSTICK:
|
||||
{
|
||||
float analog_x, analog_y;
|
||||
unsigned analog_base = 2;
|
||||
|
||||
if (analog_dpad_mode == ANALOG_DPAD_LSTICK)
|
||||
analog_base = 0;
|
||||
|
||||
analog_x = (float)ol_state->analog[analog_base + 0] / 0x7fff;
|
||||
analog_y = (float)ol_state->analog[analog_base + 1] / 0x7fff;
|
||||
|
||||
if (analog_x <= -axis_threshold)
|
||||
BIT256_SET(ol_state->buttons, RETRO_DEVICE_ID_JOYPAD_LEFT);
|
||||
if (analog_x >= axis_threshold)
|
||||
BIT256_SET(ol_state->buttons, RETRO_DEVICE_ID_JOYPAD_RIGHT);
|
||||
if (analog_y <= -axis_threshold)
|
||||
BIT256_SET(ol_state->buttons, RETRO_DEVICE_ID_JOYPAD_UP);
|
||||
if (analog_y >= axis_threshold)
|
||||
BIT256_SET(ol_state->buttons, RETRO_DEVICE_ID_JOYPAD_DOWN);
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (input_overlay_show_inputs != OVERLAY_SHOW_INPUT_NONE)
|
||||
button_pressed = input_overlay_add_inputs(ol,
|
||||
(input_overlay_show_inputs == OVERLAY_SHOW_INPUT_TOUCHED),
|
||||
input_overlay_show_inputs_port);
|
||||
|
||||
if (button_pressed || polled)
|
||||
input_overlay_post_poll(overlay_visibility, ol,
|
||||
button_pressed, opacity);
|
||||
else
|
||||
input_overlay_poll_clear(overlay_visibility, ol, opacity);
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
@ -2110,7 +2307,6 @@ void *input_driver_init_wrap(input_driver_t *input, const char *name)
|
||||
}
|
||||
|
||||
bool input_driver_find_driver(
|
||||
input_driver_state_t *input_driver_state,
|
||||
settings_t *settings,
|
||||
const char *prefix,
|
||||
bool verbosity_enabled)
|
||||
@ -2121,9 +2317,9 @@ bool input_driver_find_driver(
|
||||
|
||||
if (i >= 0)
|
||||
{
|
||||
input_driver_state->current_driver = (input_driver_t*)input_drivers[i];
|
||||
input_driver_st.current_driver = (input_driver_t*)input_drivers[i];
|
||||
RARCH_LOG("[Input]: Found %s: \"%s\".\n", prefix,
|
||||
input_driver_state->current_driver->ident);
|
||||
input_driver_st.current_driver->ident);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -2142,7 +2338,7 @@ bool input_driver_find_driver(
|
||||
tmp = (input_driver_t*)input_drivers[0];
|
||||
if (!tmp)
|
||||
return false;
|
||||
input_driver_state->current_driver = tmp;
|
||||
input_driver_st.current_driver = tmp;
|
||||
}
|
||||
|
||||
return true;
|
||||
@ -2169,3 +2365,238 @@ void input_mapper_reset(void *data)
|
||||
for (i = 0; i < (RETROK_LAST / 32 + 1); i++)
|
||||
handle->keys[i] = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the sensor state. Used by RETRO_ENVIRONMENT_GET_SENSOR_INTERFACE.
|
||||
*
|
||||
* @param port
|
||||
* @param action
|
||||
* @param rate
|
||||
*
|
||||
* @return true if the sensor state has been successfully set
|
||||
**/
|
||||
bool input_set_sensor_state(unsigned port,
|
||||
enum retro_sensor_action action, unsigned rate)
|
||||
{
|
||||
settings_t *settings = config_get_ptr();
|
||||
bool input_sensors_enable = settings->bools.input_sensors_enable;
|
||||
return input_driver_set_sensor(
|
||||
port, input_sensors_enable, action, rate);
|
||||
}
|
||||
|
||||
const char *joypad_driver_name(unsigned i)
|
||||
{
|
||||
if (!input_driver_st.primary_joypad || !input_driver_st.primary_joypad->name)
|
||||
return NULL;
|
||||
return input_driver_st.primary_joypad->name(i);
|
||||
}
|
||||
|
||||
void joypad_driver_reinit(void *data, const char *joypad_driver_name)
|
||||
{
|
||||
if (input_driver_st.primary_joypad)
|
||||
{
|
||||
const input_device_driver_t *tmp = input_driver_st.primary_joypad;
|
||||
input_driver_st.primary_joypad = NULL;
|
||||
tmp->destroy();
|
||||
}
|
||||
#ifdef HAVE_MFI
|
||||
if (input_driver_st.secondary_joypad)
|
||||
{
|
||||
const input_device_driver_t *tmp = input_driver_st.secondary_joypad;
|
||||
input_driver_st.secondary_joypad = NULL;
|
||||
tmp->destroy();
|
||||
}
|
||||
#endif
|
||||
if (!input_driver_st.primary_joypad)
|
||||
input_driver_st.primary_joypad = input_joypad_init_driver(joypad_driver_name, data);
|
||||
#ifdef HAVE_MFI
|
||||
if (!input_driver_st.secondary_joypad)
|
||||
input_driver_st.secondary_joypad = input_joypad_init_driver("mfi", data);
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the sensor state associated with the provided port and ID.
|
||||
*
|
||||
* @param port
|
||||
* @param id Sensor ID
|
||||
*
|
||||
* @return The current state associated with the port and ID as a float
|
||||
**/
|
||||
float input_get_sensor_state(unsigned port, unsigned id)
|
||||
{
|
||||
settings_t *settings = config_get_ptr();
|
||||
bool input_sensors_enable = settings->bools.input_sensors_enable;
|
||||
|
||||
return input_driver_get_sensor(port, input_sensors_enable, id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the rumble state. Used by RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE.
|
||||
*
|
||||
* @param port User number.
|
||||
* @param effect Rumble effect.
|
||||
* @param strength Strength of rumble effect.
|
||||
*
|
||||
* @return true if the rumble state has been successfully set
|
||||
**/
|
||||
bool input_set_rumble_state(unsigned port,
|
||||
enum retro_rumble_effect effect, uint16_t strength)
|
||||
{
|
||||
settings_t *settings = config_get_ptr();
|
||||
unsigned joy_idx = settings->uints.input_joypad_index[port];
|
||||
uint16_t scaled_strength = strength;
|
||||
|
||||
/* If gain setting is not suported, do software gain control */
|
||||
if (input_driver_st.primary_joypad)
|
||||
{
|
||||
if (!input_driver_st.primary_joypad->set_rumble_gain)
|
||||
{
|
||||
unsigned rumble_gain = settings->uints.input_rumble_gain;
|
||||
scaled_strength = (rumble_gain * strength) / 100.0;
|
||||
}
|
||||
}
|
||||
|
||||
return input_driver_set_rumble(
|
||||
port, joy_idx, effect, scaled_strength);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the rumble gain. Used by MENU_ENUM_LABEL_INPUT_RUMBLE_GAIN.
|
||||
*
|
||||
* @param gain Rumble gain, 0-100 [%]
|
||||
*
|
||||
* @return true if the rumble gain has been successfully set
|
||||
**/
|
||||
bool input_set_rumble_gain(unsigned gain)
|
||||
{
|
||||
settings_t *settings = config_get_ptr();
|
||||
if (input_driver_set_rumble_gain(
|
||||
gain, settings->uints.input_max_users))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
uint64_t input_driver_get_capabilities(void)
|
||||
{
|
||||
if ( !input_driver_st.current_driver ||
|
||||
!input_driver_st.current_driver->get_capabilities)
|
||||
return 0;
|
||||
return input_driver_st.current_driver->get_capabilities(input_driver_st.current_data);
|
||||
}
|
||||
|
||||
void input_driver_init_joypads(void)
|
||||
{
|
||||
settings_t *settings = config_get_ptr();
|
||||
if (!input_driver_st.primary_joypad)
|
||||
input_driver_st.primary_joypad = input_joypad_init_driver(
|
||||
settings->arrays.input_joypad_driver,
|
||||
input_driver_st.current_data);
|
||||
#ifdef HAVE_MFI
|
||||
if (!input_driver_st.secondary_joypad)
|
||||
input_driver_st.secondary_joypad = input_joypad_init_driver(
|
||||
"mfi",
|
||||
input_driver_st.current_data);
|
||||
#endif
|
||||
}
|
||||
|
||||
bool input_key_pressed(int key, bool keyboard_pressed)
|
||||
{
|
||||
/* If a keyboard key is pressed then immediately return
|
||||
* true, otherwise call button_is_pressed to determine
|
||||
* if the input comes from another input device */
|
||||
if (!(
|
||||
(key < RARCH_BIND_LIST_END)
|
||||
&& keyboard_pressed
|
||||
)
|
||||
)
|
||||
{
|
||||
settings_t *settings = config_get_ptr();
|
||||
const input_device_driver_t
|
||||
*joypad = (const input_device_driver_t*)
|
||||
input_driver_st.primary_joypad;
|
||||
const uint64_t bind_joykey = input_config_binds[0][key].joykey;
|
||||
const uint64_t bind_joyaxis = input_config_binds[0][key].joyaxis;
|
||||
const uint64_t autobind_joykey = input_autoconf_binds[0][key].joykey;
|
||||
const uint64_t autobind_joyaxis= input_autoconf_binds[0][key].joyaxis;
|
||||
uint16_t port = 0;
|
||||
float axis_threshold = settings->floats.input_axis_threshold;
|
||||
const uint64_t joykey = (bind_joykey != NO_BTN)
|
||||
? bind_joykey : autobind_joykey;
|
||||
const uint32_t joyaxis = (bind_joyaxis != AXIS_NONE)
|
||||
? bind_joyaxis : autobind_joyaxis;
|
||||
|
||||
if ((uint16_t)joykey != NO_BTN && joypad->button(
|
||||
port, (uint16_t)joykey))
|
||||
return true;
|
||||
if (joyaxis != AXIS_NONE &&
|
||||
((float)abs(joypad->axis(port, joyaxis))
|
||||
/ 0x8000) > axis_threshold)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool video_driver_init_input(
|
||||
input_driver_t *tmp,
|
||||
settings_t *settings,
|
||||
bool verbosity_enabled)
|
||||
{
|
||||
void *new_data = NULL;
|
||||
input_driver_t **input = &input_driver_st.current_driver;
|
||||
if (*input)
|
||||
return true;
|
||||
|
||||
/* Video driver didn't provide an input driver,
|
||||
* so we use configured one. */
|
||||
RARCH_LOG("[Video]: Graphics driver did not initialize an input driver."
|
||||
" Attempting to pick a suitable driver.\n");
|
||||
|
||||
if (tmp)
|
||||
*input = tmp;
|
||||
else
|
||||
{
|
||||
if (!(input_driver_find_driver(
|
||||
settings, "input driver",
|
||||
verbosity_enabled)))
|
||||
{
|
||||
RARCH_ERR("[Video]: Cannot find input driver. Exiting ...\n");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* This should never really happen as tmp (driver.input) is always
|
||||
* found before this in find_driver_input(), or we have aborted
|
||||
* in a similar fashion anyways. */
|
||||
if ( !input_driver_st.current_driver ||
|
||||
!(new_data = input_driver_init_wrap(
|
||||
input_driver_st.current_driver,
|
||||
settings->arrays.input_joypad_driver)))
|
||||
{
|
||||
RARCH_ERR("[Video]: Cannot initialize input driver. Exiting ...\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
input_driver_st.current_data = new_data;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool input_driver_grab_mouse(void)
|
||||
{
|
||||
if (!input_driver_st.current_driver || !input_driver_st.current_driver->grab_mouse)
|
||||
return false;
|
||||
input_driver_st.current_driver->grab_mouse(
|
||||
input_driver_st.current_data, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool input_driver_ungrab_mouse(void)
|
||||
{
|
||||
if (!input_driver_st.current_driver || !input_driver_st.current_driver->grab_mouse)
|
||||
return false;
|
||||
input_driver_st.current_driver->grab_mouse(input_driver_st.current_data, false);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -22,16 +22,16 @@
|
||||
#include <stddef.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "../config.h"
|
||||
#endif /* HAVE_CONFIG_H */
|
||||
|
||||
#include <boolean.h>
|
||||
#include <retro_common_api.h>
|
||||
#include <retro_inline.h>
|
||||
#include <libretro.h>
|
||||
#include <retro_miscellaneous.h>
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "../config.h"
|
||||
#endif /* HAVE_CONFIG_H */
|
||||
|
||||
#include "input_defines.h"
|
||||
#include "input_types.h"
|
||||
#ifdef HAVE_OVERLAY
|
||||
@ -45,63 +45,12 @@
|
||||
#include "../configuration.h"
|
||||
#include "../performance_counters.h"
|
||||
|
||||
#ifdef HAVE_COMMAND
|
||||
#include "../command.h"
|
||||
#endif
|
||||
|
||||
RETRO_BEGIN_DECLS
|
||||
|
||||
struct retro_keybind
|
||||
{
|
||||
/**
|
||||
* Human-readable label for the control.
|
||||
*/
|
||||
char *joykey_label;
|
||||
|
||||
/**
|
||||
* Human-readable label for an analog axis.
|
||||
*/
|
||||
char *joyaxis_label;
|
||||
|
||||
/**
|
||||
* Joypad axis. Negative and positive axes are both represented by this variable.
|
||||
*/
|
||||
uint32_t joyaxis;
|
||||
|
||||
/**
|
||||
* Default joy axis binding value for resetting bind to default.
|
||||
*/
|
||||
uint32_t def_joyaxis;
|
||||
|
||||
/**
|
||||
* Used by input_{push,pop}_analog_dpad().
|
||||
*/
|
||||
uint32_t orig_joyaxis;
|
||||
|
||||
enum msg_hash_enums enum_idx;
|
||||
|
||||
enum retro_key key;
|
||||
|
||||
uint16_t id;
|
||||
|
||||
/**
|
||||
* What mouse button ID has been mapped to this control.
|
||||
*/
|
||||
uint16_t mbutton;
|
||||
|
||||
/**
|
||||
* Joypad key. Joypad POV (hats) are embedded into this key as well.
|
||||
**/
|
||||
uint16_t joykey;
|
||||
|
||||
/**
|
||||
* Default key binding value (for resetting bind).
|
||||
*/
|
||||
uint16_t def_joykey;
|
||||
|
||||
/**
|
||||
* Determines whether or not the binding is valid.
|
||||
*/
|
||||
bool valid;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* line_complete callback (when carriage return is pressed)
|
||||
*
|
||||
@ -349,19 +298,37 @@ struct rarch_joypad_driver
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/**
|
||||
* Array of timers, one for each entry in enum input_combo_type.
|
||||
*/
|
||||
rarch_timer_t combo_timers[INPUT_COMBO_LAST];
|
||||
|
||||
/* pointers */
|
||||
input_driver_t *current_driver;
|
||||
void *current_data;
|
||||
const input_device_driver_t *primary_joypad; /* ptr alignment */
|
||||
const input_device_driver_t *secondary_joypad; /* ptr alignment */
|
||||
#ifdef HAVE_COMMAND
|
||||
command_t *command[MAX_CMD_DRIVERS];
|
||||
#endif
|
||||
#ifdef HAVE_NETWORKGAMEPAD
|
||||
input_remote_t *remote;
|
||||
#endif
|
||||
|
||||
turbo_buttons_t turbo_btns; /* int32_t alignment */
|
||||
|
||||
input_mapper_t mapper; /* uint32_t alignment */
|
||||
|
||||
/* primitives */
|
||||
bool nonblocking_flag;
|
||||
bool keyboard_linefeed_enable;
|
||||
|
||||
bool block_hotkey;
|
||||
bool block_libretro_input;
|
||||
bool grab_mouse_state;
|
||||
bool analog_requested[MAX_USERS];
|
||||
bool keyboard_mapping_blocked;
|
||||
|
||||
/**
|
||||
* Array of timers, one for each entry in enum input_combo_type.
|
||||
*/
|
||||
rarch_timer_t combo_timers[INPUT_COMBO_LAST];
|
||||
} input_driver_state_t;
|
||||
|
||||
|
||||
@ -386,25 +353,23 @@ const char* config_get_input_driver_options(void);
|
||||
* @return true if the rumble state has been successfully set
|
||||
**/
|
||||
bool input_driver_set_rumble(
|
||||
input_driver_state_t *driver_state, unsigned port, unsigned joy_idx,
|
||||
unsigned port, unsigned joy_idx,
|
||||
enum retro_rumble_effect effect, uint16_t strength);
|
||||
/**
|
||||
* Sets the rumble gain.
|
||||
*
|
||||
* @param driver_state
|
||||
* @param gain Rumble gain, 0-100 [%]
|
||||
* @param input_max_users
|
||||
*
|
||||
* @return true if the rumble gain has been successfully set
|
||||
**/
|
||||
bool input_driver_set_rumble_gain(
|
||||
input_driver_state_t *driver_state, unsigned gain,
|
||||
unsigned gain,
|
||||
unsigned input_max_users);
|
||||
|
||||
/**
|
||||
* Sets the sensor state.
|
||||
*
|
||||
* @param driver_state
|
||||
* @param port
|
||||
* @param sensors_enable
|
||||
* @param effect Sensor action
|
||||
@ -413,13 +378,12 @@ bool input_driver_set_rumble_gain(
|
||||
* @return true if the sensor state has been successfully set
|
||||
**/
|
||||
bool input_driver_set_sensor(
|
||||
input_driver_state_t *driver_state, unsigned port, bool sensors_enable,
|
||||
unsigned port, bool sensors_enable,
|
||||
enum retro_sensor_action action, unsigned rate);
|
||||
|
||||
/**
|
||||
* Retrieves the sensor state associated with the provided port and ID.
|
||||
*
|
||||
* @param driver_state
|
||||
* @param port
|
||||
* @param sensors_enable
|
||||
* @param id Sensor ID
|
||||
@ -427,9 +391,19 @@ bool input_driver_set_sensor(
|
||||
* @return The current state associated with the port and ID as a float
|
||||
**/
|
||||
float input_driver_get_sensor(
|
||||
input_driver_state_t *driver_state,
|
||||
unsigned port, bool sensors_enable, unsigned id);
|
||||
|
||||
uint64_t input_driver_get_capabilities(void);
|
||||
|
||||
bool video_driver_init_input(
|
||||
input_driver_t *tmp,
|
||||
settings_t *settings,
|
||||
bool verbosity_enabled);
|
||||
|
||||
bool input_driver_grab_mouse(void);
|
||||
|
||||
bool input_driver_ungrab_mouse(void);
|
||||
|
||||
/**
|
||||
* Get an enumerated list of all joypad driver names
|
||||
*
|
||||
@ -515,6 +489,7 @@ struct input_keyboard_ctx_wait
|
||||
void input_keyboard_event(bool down, unsigned code, uint32_t character,
|
||||
uint16_t mod, unsigned device);
|
||||
|
||||
input_driver_state_t *input_state_get_ptr(void);
|
||||
|
||||
/*************************************/
|
||||
#ifdef HAVE_HID
|
||||
@ -725,13 +700,11 @@ char *input_config_get_device_name_ptr(unsigned port);
|
||||
size_t input_config_get_device_name_size(unsigned port);
|
||||
|
||||
bool input_driver_button_combo(
|
||||
input_driver_state_t *input_driver_state,
|
||||
unsigned mode,
|
||||
retro_time_t current_time,
|
||||
input_bits_t* p_input);
|
||||
|
||||
bool input_driver_find_driver(
|
||||
input_driver_state_t *input_driver_state,
|
||||
settings_t *settings,
|
||||
const char *prefix,
|
||||
bool verbosity_enabled);
|
||||
@ -839,13 +812,46 @@ void input_config_get_bind_string_joykey(
|
||||
int16_t input_state_internal(unsigned port, unsigned device,
|
||||
unsigned idx, unsigned id);
|
||||
|
||||
/*****************************************************************************/
|
||||
bool input_key_pressed(int key, bool keyboard_pressed);
|
||||
|
||||
bool input_set_rumble_state(unsigned port,
|
||||
enum retro_rumble_effect effect, uint16_t strength);
|
||||
|
||||
bool input_set_rumble_gain(unsigned gain);
|
||||
|
||||
float input_get_sensor_state(unsigned port, unsigned id);
|
||||
|
||||
bool input_set_sensor_state(unsigned port,
|
||||
enum retro_sensor_action action, unsigned rate);
|
||||
|
||||
void *input_driver_init_wrap(input_driver_t *input, const char *name);
|
||||
|
||||
const struct retro_keybind *input_config_get_bind_auto(unsigned port, unsigned id);
|
||||
|
||||
void input_config_reset_autoconfig_binds(unsigned port);
|
||||
|
||||
void input_config_reset(void);
|
||||
|
||||
const char *joypad_driver_name(unsigned i);
|
||||
|
||||
void joypad_driver_reinit(void *data, const char *joypad_driver_name);
|
||||
|
||||
#ifdef HAVE_OVERLAY
|
||||
/*
|
||||
* input_poll_overlay:
|
||||
*
|
||||
* Poll pressed buttons/keys on currently active overlay.
|
||||
**/
|
||||
void input_poll_overlay(
|
||||
bool keyboard_mapping_blocked,
|
||||
settings_t *settings,
|
||||
void *ol_data,
|
||||
enum overlay_visibility *overlay_visibility,
|
||||
float opacity,
|
||||
unsigned analog_dpad_mode,
|
||||
float axis_threshold);
|
||||
#endif
|
||||
|
||||
#if defined(ANDROID)
|
||||
#define DEFAULT_MAX_PADS 8
|
||||
#define ANDROID_KEYBOARD_PORT DEFAULT_MAX_PADS
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include <formats/image.h>
|
||||
#include <queues/task_queue.h>
|
||||
|
||||
#include "input_driver.h"
|
||||
#include "input_types.h"
|
||||
|
||||
#define OVERLAY_GET_KEY(state, key) (((state)->keys[(key) / 32] >> ((key) % 32)) & 1)
|
||||
#define OVERLAY_SET_KEY(state, key) (state)->keys[(key) / 32] |= 1 << ((key) % 32)
|
||||
|
@ -23,17 +23,8 @@
|
||||
#include <boolean.h>
|
||||
#include <retro_common_api.h>
|
||||
|
||||
typedef struct input_mapper
|
||||
{
|
||||
/* Left X, Left Y, Right X, Right Y */
|
||||
int16_t analog_value[MAX_USERS][8];
|
||||
/* The whole keyboard state */
|
||||
uint32_t keys[RETROK_LAST / 32 + 1];
|
||||
/* RetroPad button state of remapped keyboard keys */
|
||||
unsigned key_button[RETROK_LAST];
|
||||
/* This is a bitmask of (1 << key_bind_id). */
|
||||
input_bits_t buttons[MAX_USERS];
|
||||
} input_mapper_t;
|
||||
#include "input_defines.h"
|
||||
#include "input_types.h"
|
||||
|
||||
RETRO_BEGIN_DECLS
|
||||
|
||||
|
@ -17,6 +17,8 @@
|
||||
#ifndef __INPUT_TYPES__H
|
||||
#define __INPUT_TYPES__H
|
||||
|
||||
#include "../msg_hash.h"
|
||||
|
||||
enum input_auto_game_focus_type
|
||||
{
|
||||
AUTO_GAME_FOCUS_OFF = 0,
|
||||
@ -25,11 +27,46 @@ enum input_auto_game_focus_type
|
||||
AUTO_GAME_FOCUS_LAST
|
||||
};
|
||||
|
||||
typedef struct rarch_joypad_driver input_device_driver_t;
|
||||
typedef struct input_keyboard_line input_keyboard_line_t;
|
||||
typedef struct rarch_joypad_info rarch_joypad_info_t;
|
||||
typedef struct input_driver input_driver_t;
|
||||
typedef struct input_keyboard_ctx_wait input_keyboard_ctx_wait_t;
|
||||
/* Turbo support. */
|
||||
struct turbo_buttons
|
||||
{
|
||||
int32_t turbo_pressed[MAX_USERS];
|
||||
unsigned count;
|
||||
uint16_t enable[MAX_USERS];
|
||||
bool frame_enable[MAX_USERS];
|
||||
bool mode1_enable[MAX_USERS];
|
||||
};
|
||||
|
||||
struct retro_keybind
|
||||
{
|
||||
/* Human-readable label for the control. */
|
||||
char *joykey_label;
|
||||
/* Human-readable label for an analog axis. */
|
||||
char *joyaxis_label;
|
||||
/*
|
||||
* Joypad axis. Negative and positive axes are both
|
||||
* represented by this variable.
|
||||
*/
|
||||
uint32_t joyaxis;
|
||||
/* Default joy axis binding value for resetting bind to default. */
|
||||
uint32_t def_joyaxis;
|
||||
/* Used by input_{push,pop}_analog_dpad(). */
|
||||
uint32_t orig_joyaxis;
|
||||
|
||||
enum msg_hash_enums enum_idx;
|
||||
|
||||
enum retro_key key;
|
||||
|
||||
uint16_t id;
|
||||
/* What mouse button ID has been mapped to this control. */
|
||||
uint16_t mbutton;
|
||||
/* Joypad key. Joypad POV (hats) are embedded into this key as well. */
|
||||
uint16_t joykey;
|
||||
/* Default key binding value (for resetting bind). */
|
||||
uint16_t def_joykey;
|
||||
/* Determines whether or not the binding is valid. */
|
||||
bool valid;
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@ -38,7 +75,26 @@ typedef struct
|
||||
uint16_t analog_buttons[16];
|
||||
} input_bits_t;
|
||||
|
||||
typedef struct input_mapper
|
||||
{
|
||||
/* Left X, Left Y, Right X, Right Y */
|
||||
int16_t analog_value[MAX_USERS][8];
|
||||
/* The whole keyboard state */
|
||||
uint32_t keys[RETROK_LAST / 32 + 1];
|
||||
/* RetroPad button state of remapped keyboard keys */
|
||||
unsigned key_button[RETROK_LAST];
|
||||
/* This is a bitmask of (1 << key_bind_id). */
|
||||
input_bits_t buttons[MAX_USERS];
|
||||
} input_mapper_t;
|
||||
|
||||
typedef struct rarch_joypad_driver input_device_driver_t;
|
||||
typedef struct input_keyboard_line input_keyboard_line_t;
|
||||
typedef struct rarch_joypad_info rarch_joypad_info_t;
|
||||
typedef struct input_driver input_driver_t;
|
||||
typedef struct input_keyboard_ctx_wait input_keyboard_ctx_wait_t;
|
||||
|
||||
typedef struct joypad_connection joypad_connection_t;
|
||||
typedef struct pad_connection_listener_interface pad_connection_listener_t;
|
||||
typedef struct turbo_buttons turbo_buttons_t;
|
||||
|
||||
#endif /* __INPUT_TYPES__H */
|
||||
|
@ -3134,7 +3134,7 @@ void netplay_sync_post_frame(netplay_t *netplay, bool stalled)
|
||||
if (netplay->catch_up)
|
||||
{
|
||||
netplay->catch_up = false;
|
||||
input_unset_nonblock_state();
|
||||
input_state_get_ptr()->nonblocking_flag = false;
|
||||
driver_set_nonblock_state();
|
||||
}
|
||||
return;
|
||||
@ -3327,7 +3327,7 @@ void netplay_sync_post_frame(netplay_t *netplay, bool stalled)
|
||||
if (netplay->self_frame_count + 1 >= lo_frame_count)
|
||||
{
|
||||
netplay->catch_up = false;
|
||||
input_unset_nonblock_state();
|
||||
input_state_get_ptr()->nonblocking_flag = false;
|
||||
driver_set_nonblock_state();
|
||||
}
|
||||
|
||||
@ -3354,9 +3354,9 @@ void netplay_sync_post_frame(netplay_t *netplay, bool stalled)
|
||||
if (netplay->catch_up_behind <= cur_behind)
|
||||
{
|
||||
/* We're definitely falling behind! */
|
||||
netplay->catch_up = true;
|
||||
netplay->catch_up_time = 0;
|
||||
input_set_nonblock_state();
|
||||
netplay->catch_up = true;
|
||||
netplay->catch_up_time = 0;
|
||||
input_state_get_ptr()->nonblocking_flag = true;
|
||||
driver_set_nonblock_state();
|
||||
}
|
||||
else
|
||||
|
@ -416,7 +416,6 @@
|
||||
05A8E23920A63CED0084ABDA /* IOSurface.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOSurface.framework; path = System/Library/Frameworks/IOSurface.framework; sourceTree = SDKROOT; };
|
||||
05A8E23B20A63CF50084ABDA /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
|
||||
05B5F90D20ED6A03009C521F /* content.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = content.h; path = ../../content.h; sourceTree = "<group>"; };
|
||||
05B5F90E20ED6A03009C521F /* core_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = core_type.h; path = ../../core_type.h; sourceTree = "<group>"; };
|
||||
05B5F90F20ED6A03009C521F /* command.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = command.c; path = ../../command.c; sourceTree = "<group>"; };
|
||||
05B5F91120ED6AAE009C521F /* retroarch.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = retroarch.c; path = ../../retroarch.c; sourceTree = "<group>"; };
|
||||
05B5F91220ED6AAF009C521F /* retroarch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = retroarch.h; path = ../../retroarch.h; sourceTree = "<group>"; };
|
||||
@ -1180,7 +1179,6 @@
|
||||
05BF821520ED69D100D95B19 /* core_impl.c */,
|
||||
05BF821820ED69D100D95B19 /* core_info.c */,
|
||||
05BF821B20ED69D100D95B19 /* core_info.h */,
|
||||
05B5F90E20ED6A03009C521F /* core_type.h */,
|
||||
05BF821920ED69D100D95B19 /* core.h */,
|
||||
0548E2B220F976E10094A083 /* driver.c */,
|
||||
0548E2B520F976E20094A083 /* driver.h */,
|
||||
|
@ -254,7 +254,6 @@
|
||||
92B9EC9824E0537500E6CFB2 /* config.def.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = config.def.h; path = ../../config.def.h; sourceTree = "<group>"; };
|
||||
92B9EC9924E0537500E6CFB2 /* config.features.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = config.features.h; path = ../../config.features.h; sourceTree = "<group>"; };
|
||||
92B9EC9A24E0537500E6CFB2 /* content.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = content.h; path = ../../content.h; sourceTree = "<group>"; };
|
||||
92B9EC9B24E0539000E6CFB2 /* core_type.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = core_type.h; path = ../../core_type.h; sourceTree = "<group>"; };
|
||||
92B9EC9C24E0539000E6CFB2 /* core_info.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = core_info.c; path = ../../core_info.c; sourceTree = "<group>"; };
|
||||
92B9EC9D24E0539000E6CFB2 /* core_info.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = core_info.h; path = ../../core_info.h; sourceTree = "<group>"; };
|
||||
92B9EC9E24E0539000E6CFB2 /* core.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = core.h; path = ../../core.h; sourceTree = "<group>"; };
|
||||
@ -847,7 +846,6 @@
|
||||
92B9ECBF24E054B500E6CFB2 /* core_backup.h */,
|
||||
92B9EC9C24E0539000E6CFB2 /* core_info.c */,
|
||||
92B9EC9D24E0539000E6CFB2 /* core_info.h */,
|
||||
92B9EC9B24E0539000E6CFB2 /* core_type.h */,
|
||||
92B9ECB024E054B400E6CFB2 /* core_updater_list.c */,
|
||||
92B9ECB624E054B500E6CFB2 /* core_updater_list.h */,
|
||||
92B9EC9E24E0539000E6CFB2 /* core.h */,
|
||||
|
1215
retroarch.c
1215
retroarch.c
File diff suppressed because it is too large
Load Diff
418
retroarch.h
418
retroarch.h
@ -41,14 +41,10 @@
|
||||
#include "audio/audio_defines.h"
|
||||
#include "gfx/video_driver.h"
|
||||
|
||||
#include "core_type.h"
|
||||
#include "core.h"
|
||||
|
||||
#ifdef HAVE_MENU
|
||||
#include "menu/menu_defines.h"
|
||||
#endif
|
||||
|
||||
#include "runloop.h"
|
||||
#include "retroarch_types.h"
|
||||
|
||||
RETRO_BEGIN_DECLS
|
||||
|
||||
@ -83,285 +79,6 @@ RETRO_BEGIN_DECLS
|
||||
* 3 - Late
|
||||
*/
|
||||
|
||||
enum rarch_ctl_state
|
||||
{
|
||||
RARCH_CTL_NONE = 0,
|
||||
|
||||
/* Deinitializes RetroArch. */
|
||||
RARCH_CTL_MAIN_DEINIT,
|
||||
|
||||
RARCH_CTL_IS_INITED,
|
||||
|
||||
RARCH_CTL_IS_DUMMY_CORE,
|
||||
RARCH_CTL_IS_CORE_LOADED,
|
||||
|
||||
#if defined(HAVE_RUNAHEAD) && (defined(HAVE_DYNAMIC) || defined(HAVE_DYLIB))
|
||||
RARCH_CTL_IS_SECOND_CORE_AVAILABLE,
|
||||
RARCH_CTL_IS_SECOND_CORE_LOADED,
|
||||
#endif
|
||||
|
||||
RARCH_CTL_IS_BPS_PREF,
|
||||
RARCH_CTL_UNSET_BPS_PREF,
|
||||
|
||||
RARCH_CTL_IS_PATCH_BLOCKED,
|
||||
|
||||
RARCH_CTL_IS_UPS_PREF,
|
||||
RARCH_CTL_UNSET_UPS_PREF,
|
||||
|
||||
RARCH_CTL_IS_IPS_PREF,
|
||||
RARCH_CTL_UNSET_IPS_PREF,
|
||||
|
||||
#ifdef HAVE_CONFIGFILE
|
||||
/* Block config read */
|
||||
RARCH_CTL_SET_BLOCK_CONFIG_READ,
|
||||
RARCH_CTL_UNSET_BLOCK_CONFIG_READ,
|
||||
#endif
|
||||
|
||||
/* Username */
|
||||
RARCH_CTL_HAS_SET_USERNAME,
|
||||
|
||||
RARCH_CTL_HAS_SET_SUBSYSTEMS,
|
||||
|
||||
RARCH_CTL_IS_IDLE,
|
||||
RARCH_CTL_SET_IDLE,
|
||||
|
||||
RARCH_CTL_SET_WINDOWED_SCALE,
|
||||
|
||||
#ifdef HAVE_CONFIGFILE
|
||||
RARCH_CTL_IS_OVERRIDES_ACTIVE,
|
||||
|
||||
RARCH_CTL_IS_REMAPS_CORE_ACTIVE,
|
||||
RARCH_CTL_SET_REMAPS_CORE_ACTIVE,
|
||||
|
||||
RARCH_CTL_IS_REMAPS_CONTENT_DIR_ACTIVE,
|
||||
RARCH_CTL_SET_REMAPS_CONTENT_DIR_ACTIVE,
|
||||
|
||||
RARCH_CTL_IS_REMAPS_GAME_ACTIVE,
|
||||
RARCH_CTL_SET_REMAPS_GAME_ACTIVE,
|
||||
#endif
|
||||
|
||||
RARCH_CTL_IS_MISSING_BIOS,
|
||||
RARCH_CTL_SET_MISSING_BIOS,
|
||||
RARCH_CTL_UNSET_MISSING_BIOS,
|
||||
|
||||
RARCH_CTL_IS_GAME_OPTIONS_ACTIVE,
|
||||
RARCH_CTL_IS_FOLDER_OPTIONS_ACTIVE,
|
||||
|
||||
RARCH_CTL_IS_PAUSED,
|
||||
RARCH_CTL_SET_PAUSED,
|
||||
|
||||
RARCH_CTL_SET_SHUTDOWN,
|
||||
|
||||
/* Runloop state */
|
||||
RARCH_CTL_STATE_FREE,
|
||||
|
||||
/* Performance counters */
|
||||
RARCH_CTL_GET_PERFCNT,
|
||||
RARCH_CTL_SET_PERFCNT_ENABLE,
|
||||
RARCH_CTL_UNSET_PERFCNT_ENABLE,
|
||||
RARCH_CTL_IS_PERFCNT_ENABLE,
|
||||
|
||||
/* Core options */
|
||||
RARCH_CTL_HAS_CORE_OPTIONS,
|
||||
RARCH_CTL_GET_CORE_OPTION_SIZE,
|
||||
RARCH_CTL_CORE_OPTIONS_LIST_GET,
|
||||
RARCH_CTL_CORE_OPTION_PREV,
|
||||
RARCH_CTL_CORE_OPTION_NEXT,
|
||||
RARCH_CTL_CORE_OPTION_UPDATE_DISPLAY,
|
||||
RARCH_CTL_CORE_IS_RUNNING,
|
||||
|
||||
/* BSV Movie */
|
||||
RARCH_CTL_BSV_MOVIE_IS_INITED
|
||||
};
|
||||
|
||||
enum rarch_capabilities
|
||||
{
|
||||
RARCH_CAPABILITIES_NONE = 0,
|
||||
RARCH_CAPABILITIES_CPU,
|
||||
RARCH_CAPABILITIES_COMPILER
|
||||
};
|
||||
|
||||
enum rarch_override_setting
|
||||
{
|
||||
RARCH_OVERRIDE_SETTING_NONE = 0,
|
||||
RARCH_OVERRIDE_SETTING_LIBRETRO,
|
||||
RARCH_OVERRIDE_SETTING_VERBOSITY,
|
||||
RARCH_OVERRIDE_SETTING_LIBRETRO_DIRECTORY,
|
||||
RARCH_OVERRIDE_SETTING_SAVE_PATH,
|
||||
RARCH_OVERRIDE_SETTING_STATE_PATH,
|
||||
#ifdef HAVE_NETWORKING
|
||||
RARCH_OVERRIDE_SETTING_NETPLAY_MODE,
|
||||
RARCH_OVERRIDE_SETTING_NETPLAY_IP_ADDRESS,
|
||||
RARCH_OVERRIDE_SETTING_NETPLAY_IP_PORT,
|
||||
RARCH_OVERRIDE_SETTING_NETPLAY_STATELESS_MODE,
|
||||
RARCH_OVERRIDE_SETTING_NETPLAY_CHECK_FRAMES,
|
||||
#endif
|
||||
RARCH_OVERRIDE_SETTING_UPS_PREF,
|
||||
RARCH_OVERRIDE_SETTING_BPS_PREF,
|
||||
RARCH_OVERRIDE_SETTING_IPS_PREF,
|
||||
RARCH_OVERRIDE_SETTING_LIBRETRO_DEVICE,
|
||||
RARCH_OVERRIDE_SETTING_LOG_TO_FILE,
|
||||
RARCH_OVERRIDE_SETTING_LAST
|
||||
};
|
||||
|
||||
enum runloop_action
|
||||
{
|
||||
RUNLOOP_ACTION_NONE = 0,
|
||||
RUNLOOP_ACTION_AUTOSAVE
|
||||
};
|
||||
|
||||
struct rarch_main_wrap
|
||||
{
|
||||
char **argv;
|
||||
const char *content_path;
|
||||
const char *sram_path;
|
||||
const char *state_path;
|
||||
const char *config_path;
|
||||
const char *libretro_path;
|
||||
int argc;
|
||||
bool verbose;
|
||||
bool no_content;
|
||||
bool touched;
|
||||
};
|
||||
|
||||
typedef struct rarch_resolution
|
||||
{
|
||||
unsigned idx;
|
||||
unsigned id;
|
||||
} rarch_resolution_t;
|
||||
|
||||
/* All run-time- / command line flag-related globals go here. */
|
||||
|
||||
typedef struct global
|
||||
{
|
||||
#ifdef HAVE_MENU
|
||||
struct
|
||||
{
|
||||
retro_time_t prev_start_time;
|
||||
retro_time_t noop_press_time;
|
||||
retro_time_t noop_start_time;
|
||||
retro_time_t action_start_time;
|
||||
retro_time_t action_press_time;
|
||||
} menu;
|
||||
#endif
|
||||
struct
|
||||
{
|
||||
char *remapfile;
|
||||
char savefile[8192];
|
||||
char savestate[8192];
|
||||
char cheatfile[8192];
|
||||
char ups[8192];
|
||||
char bps[8192];
|
||||
char ips[8192];
|
||||
char label[8192];
|
||||
} name;
|
||||
|
||||
/* Recording. */
|
||||
struct
|
||||
{
|
||||
size_t gpu_width;
|
||||
size_t gpu_height;
|
||||
unsigned width;
|
||||
unsigned height;
|
||||
char path[8192];
|
||||
char config[8192];
|
||||
char output_dir[8192];
|
||||
char config_dir[8192];
|
||||
bool use_output_dir;
|
||||
} record;
|
||||
|
||||
/* Settings and/or global state that is specific to
|
||||
* a console-style implementation. */
|
||||
struct
|
||||
{
|
||||
struct
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint32_t *list;
|
||||
unsigned count;
|
||||
rarch_resolution_t current;
|
||||
rarch_resolution_t initial;
|
||||
bool check;
|
||||
} resolutions;
|
||||
unsigned gamma_correction;
|
||||
unsigned int flicker_filter_index;
|
||||
unsigned char soft_filter_index;
|
||||
bool pal_enable;
|
||||
bool pal60_enable;
|
||||
} screen;
|
||||
|
||||
bool flickerfilter_enable;
|
||||
bool softfilter_enable;
|
||||
|
||||
} console;
|
||||
unsigned old_analog_dpad_mode[MAX_USERS];
|
||||
unsigned old_libretro_device[MAX_USERS];
|
||||
bool old_analog_dpad_mode_set;
|
||||
bool old_libretro_device_set;
|
||||
bool remapping_cache_active;
|
||||
/* Settings and/or global states specific to menus */
|
||||
#ifdef HAVE_MENU
|
||||
enum menu_action menu_prev_action;
|
||||
#endif
|
||||
bool launched_from_cli;
|
||||
bool cli_load_menu_on_error;
|
||||
} global_t;
|
||||
|
||||
typedef struct content_file_override
|
||||
{
|
||||
char *ext;
|
||||
bool need_fullpath;
|
||||
bool persistent_data;
|
||||
} content_file_override_t;
|
||||
|
||||
typedef struct content_file_info
|
||||
{
|
||||
char *full_path;
|
||||
char *archive_path;
|
||||
char *archive_file;
|
||||
char *dir;
|
||||
char *name;
|
||||
char *ext;
|
||||
char *meta; /* Unused at present */
|
||||
void *data;
|
||||
size_t data_size;
|
||||
bool file_in_archive;
|
||||
bool persistent_data;
|
||||
} content_file_info_t;
|
||||
|
||||
typedef struct content_file_list
|
||||
{
|
||||
content_file_info_t *entries;
|
||||
struct string_list *temporary_files;
|
||||
struct retro_game_info *game_info;
|
||||
struct retro_game_info_ext *game_info_ext;
|
||||
size_t size;
|
||||
} content_file_list_t;
|
||||
|
||||
typedef struct content_state
|
||||
{
|
||||
char *pending_subsystem_roms[RARCH_MAX_SUBSYSTEM_ROMS];
|
||||
|
||||
content_file_override_t *content_override_list;
|
||||
content_file_list_t *content_list;
|
||||
|
||||
int pending_subsystem_rom_num;
|
||||
int pending_subsystem_id;
|
||||
unsigned pending_subsystem_rom_id;
|
||||
uint32_t rom_crc;
|
||||
|
||||
char companion_ui_crc32[32];
|
||||
char pending_subsystem_ident[255];
|
||||
char pending_rom_crc_path[PATH_MAX_LENGTH];
|
||||
char companion_ui_db_name[PATH_MAX_LENGTH];
|
||||
|
||||
bool is_inited;
|
||||
bool core_does_not_need_content;
|
||||
bool pending_subsystem_init;
|
||||
bool pending_rom_crc;
|
||||
} content_state_t;
|
||||
|
||||
bool retroarch_ctl(enum rarch_ctl_state state, void *data);
|
||||
|
||||
int retroarch_get_capabilities(enum rarch_capabilities type,
|
||||
@ -650,101 +367,6 @@ extern audio_driver_t audio_rwebaudio;
|
||||
|
||||
/* Recording */
|
||||
|
||||
enum ffemu_pix_format
|
||||
{
|
||||
FFEMU_PIX_RGB565 = 0,
|
||||
FFEMU_PIX_BGR24,
|
||||
FFEMU_PIX_ARGB8888
|
||||
};
|
||||
|
||||
enum streaming_mode
|
||||
{
|
||||
STREAMING_MODE_TWITCH = 0,
|
||||
STREAMING_MODE_YOUTUBE,
|
||||
STREAMING_MODE_FACEBOOK,
|
||||
STREAMING_MODE_LOCAL,
|
||||
STREAMING_MODE_CUSTOM
|
||||
};
|
||||
|
||||
enum record_config_type
|
||||
{
|
||||
RECORD_CONFIG_TYPE_RECORDING_CUSTOM = 0,
|
||||
RECORD_CONFIG_TYPE_RECORDING_LOW_QUALITY,
|
||||
RECORD_CONFIG_TYPE_RECORDING_MED_QUALITY,
|
||||
RECORD_CONFIG_TYPE_RECORDING_HIGH_QUALITY,
|
||||
RECORD_CONFIG_TYPE_RECORDING_LOSSLESS_QUALITY,
|
||||
RECORD_CONFIG_TYPE_RECORDING_WEBM_FAST,
|
||||
RECORD_CONFIG_TYPE_RECORDING_WEBM_HIGH_QUALITY,
|
||||
RECORD_CONFIG_TYPE_RECORDING_GIF,
|
||||
RECORD_CONFIG_TYPE_RECORDING_APNG,
|
||||
RECORD_CONFIG_TYPE_STREAMING_CUSTOM,
|
||||
RECORD_CONFIG_TYPE_STREAMING_LOW_QUALITY,
|
||||
RECORD_CONFIG_TYPE_STREAMING_MED_QUALITY,
|
||||
RECORD_CONFIG_TYPE_STREAMING_HIGH_QUALITY,
|
||||
RECORD_CONFIG_TYPE_STREAMING_NETPLAY
|
||||
|
||||
};
|
||||
|
||||
/* Parameters passed to ffemu_new() */
|
||||
struct record_params
|
||||
{
|
||||
/* Framerate per second of input video. */
|
||||
double fps;
|
||||
/* Sample rate of input audio. */
|
||||
double samplerate;
|
||||
|
||||
/* Filename to dump to. */
|
||||
const char *filename;
|
||||
|
||||
/* Path to config. Optional. */
|
||||
const char *config;
|
||||
|
||||
const char *audio_resampler;
|
||||
|
||||
/* Desired output resolution. */
|
||||
unsigned out_width;
|
||||
unsigned out_height;
|
||||
|
||||
/* Total size of framebuffer used in input. */
|
||||
unsigned fb_width;
|
||||
unsigned fb_height;
|
||||
|
||||
/* Audio channels. */
|
||||
unsigned channels;
|
||||
|
||||
unsigned video_record_scale_factor;
|
||||
unsigned video_stream_scale_factor;
|
||||
unsigned video_record_threads;
|
||||
unsigned streaming_mode;
|
||||
|
||||
/* Aspect ratio of input video. Parameters are passed to the muxer,
|
||||
* the video itself is not scaled.
|
||||
*/
|
||||
float aspect_ratio;
|
||||
|
||||
enum record_config_type preset;
|
||||
|
||||
/* Input pixel format. */
|
||||
enum ffemu_pix_format pix_fmt;
|
||||
|
||||
bool video_gpu_record;
|
||||
};
|
||||
|
||||
struct record_video_data
|
||||
{
|
||||
const void *data;
|
||||
unsigned width;
|
||||
unsigned height;
|
||||
int pitch;
|
||||
bool is_dupe;
|
||||
};
|
||||
|
||||
struct record_audio_data
|
||||
{
|
||||
const void *data;
|
||||
size_t frames;
|
||||
};
|
||||
|
||||
typedef struct record_driver
|
||||
{
|
||||
void *(*init)(const struct record_params *params);
|
||||
@ -830,44 +452,6 @@ unsigned int retroarch_get_rotation(void);
|
||||
|
||||
void retroarch_init_task_queue(void);
|
||||
|
||||
/******************************************************************************
|
||||
* BEGIN helper functions for input_driver refactoring
|
||||
*
|
||||
* These functions have similar names and signatures to functions that now require
|
||||
* an input_driver_state_t pointer to be passed to them. They essentially wrap
|
||||
* the newer functions by grabbing pointer to the driver state struct and the
|
||||
* settings struct.
|
||||
******************************************************************************/
|
||||
bool input_set_rumble_state(unsigned port,
|
||||
enum retro_rumble_effect effect, uint16_t strength);
|
||||
|
||||
bool input_set_rumble_gain(unsigned gain);
|
||||
|
||||
float input_get_sensor_state(unsigned port, unsigned id);
|
||||
|
||||
bool input_set_sensor_state(unsigned port,
|
||||
enum retro_sensor_action action, unsigned rate);
|
||||
|
||||
void input_set_nonblock_state(void);
|
||||
|
||||
void input_unset_nonblock_state(void);
|
||||
|
||||
void *input_driver_get_data(void);
|
||||
|
||||
/******************************************************************************
|
||||
* END helper functions for input_driver refactoring
|
||||
******************************************************************************/
|
||||
|
||||
|
||||
bool input_key_pressed(int key, bool keyboard_pressed);
|
||||
|
||||
bool input_mouse_grabbed(void);
|
||||
|
||||
const char *joypad_driver_name(unsigned i);
|
||||
void joypad_driver_reinit(void *data, const char *joypad_driver_name);
|
||||
|
||||
void *input_driver_init_wrap(input_driver_t *input, const char *name);
|
||||
|
||||
/* Human readable order of input binds */
|
||||
static const unsigned input_config_bind_order[] = {
|
||||
RETRO_DEVICE_ID_JOYPAD_UP,
|
||||
|
@ -765,18 +765,6 @@ typedef struct my_list_t
|
||||
int size;
|
||||
} my_list;
|
||||
|
||||
typedef struct turbo_buttons turbo_buttons_t;
|
||||
|
||||
/* Turbo support. */
|
||||
struct turbo_buttons
|
||||
{
|
||||
int32_t turbo_pressed[MAX_USERS];
|
||||
unsigned count;
|
||||
uint16_t enable[MAX_USERS];
|
||||
bool frame_enable[MAX_USERS];
|
||||
bool mode1_enable[MAX_USERS];
|
||||
};
|
||||
|
||||
typedef struct input_game_focus_state
|
||||
{
|
||||
bool enabled;
|
||||
@ -822,8 +810,6 @@ typedef struct discord_state discord_state_t;
|
||||
|
||||
struct rarch_state
|
||||
{
|
||||
input_driver_state_t input_driver_state;
|
||||
|
||||
double audio_source_ratio_original;
|
||||
double audio_source_ratio_current;
|
||||
struct retro_system_av_info video_driver_av_info; /* double alignment */
|
||||
@ -948,12 +934,6 @@ struct rarch_state
|
||||
|
||||
void *keyboard_press_data;
|
||||
|
||||
#ifdef HAVE_COMMAND
|
||||
command_t *input_driver_command[MAX_CMD_DRIVERS];
|
||||
#endif
|
||||
#ifdef HAVE_NETWORKGAMEPAD
|
||||
input_remote_t *input_driver_remote;
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_HID
|
||||
const void *hid_data;
|
||||
@ -1056,8 +1036,6 @@ struct rarch_state
|
||||
|
||||
jmp_buf error_sjlj_context; /* 4-byte alignment,
|
||||
put it right before long */
|
||||
|
||||
turbo_buttons_t input_driver_turbo_btns; /* int32_t alignment */
|
||||
int osk_ptr;
|
||||
#if defined(HAVE_COMMAND)
|
||||
#ifdef HAVE_NETWORK_CMD
|
||||
@ -1159,8 +1137,6 @@ struct rarch_state
|
||||
*/
|
||||
gfx_ctx_flags_t deferred_flag_data; /* uint32_t alignment */
|
||||
retro_bits_t has_set_libretro_device; /* uint32_t alignment */
|
||||
input_mapper_t input_driver_mapper; /* uint32_t alignment */
|
||||
|
||||
|
||||
#ifdef HAVE_BSV_MOVIE
|
||||
struct bsv_state bsv_movie_state; /* char alignment */
|
||||
@ -1330,21 +1306,11 @@ struct rarch_state
|
||||
bool has_set_netplay_check_frames;
|
||||
#endif
|
||||
|
||||
bool input_driver_keyboard_linefeed_enable;
|
||||
|
||||
bool input_driver_block_hotkey;
|
||||
bool input_driver_block_libretro_input;
|
||||
bool input_driver_grab_mouse_state;
|
||||
bool input_driver_analog_requested[MAX_USERS];
|
||||
|
||||
input_game_focus_state_t game_focus_state; /* bool alignment */
|
||||
|
||||
bool recording_enable;
|
||||
bool streaming_enable;
|
||||
|
||||
|
||||
bool main_ui_companion_is_on_foreground;
|
||||
bool keyboard_mapping_blocked;
|
||||
retro_bits_512_t keyboard_mapping_bits;
|
||||
|
||||
#if defined(HAVE_CG) || defined(HAVE_GLSL) || defined(HAVE_SLANG) || defined(HAVE_HLSL)
|
||||
|
@ -62,8 +62,6 @@ static void runloop_apply_fastmotion_override(
|
||||
struct rarch_state *p_rarch, runloop_state_t *p_runloop,
|
||||
settings_t *settings);
|
||||
|
||||
static uint64_t input_driver_get_capabilities(void);
|
||||
|
||||
static void uninit_libretro_symbols(
|
||||
struct rarch_state *p_rarch,
|
||||
struct retro_core_t *current_core);
|
||||
|
528
retroarch_types.h
Normal file
528
retroarch_types.h
Normal file
@ -0,0 +1,528 @@
|
||||
#ifndef _RETROARCH_TYPES_H
|
||||
#define _RETROARCH_TYPES_H
|
||||
|
||||
#include <boolean.h>
|
||||
#include <retro_inline.h>
|
||||
#include <retro_common_api.h>
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_MENU
|
||||
#include "menu/menu_defines.h"
|
||||
#endif
|
||||
|
||||
#include "input/input_defines.h"
|
||||
#include "disk_control_interface.h"
|
||||
|
||||
RETRO_BEGIN_DECLS
|
||||
|
||||
enum
|
||||
{
|
||||
/* Polling is performed before
|
||||
* call to retro_run. */
|
||||
POLL_TYPE_EARLY = 0,
|
||||
|
||||
/* Polling is performed when requested. */
|
||||
POLL_TYPE_NORMAL,
|
||||
|
||||
/* Polling is performed on first call to
|
||||
* retro_input_state per frame. */
|
||||
POLL_TYPE_LATE
|
||||
};
|
||||
|
||||
enum rarch_core_type
|
||||
{
|
||||
CORE_TYPE_PLAIN = 0,
|
||||
CORE_TYPE_DUMMY,
|
||||
CORE_TYPE_FFMPEG,
|
||||
CORE_TYPE_MPV,
|
||||
CORE_TYPE_IMAGEVIEWER,
|
||||
CORE_TYPE_NETRETROPAD,
|
||||
CORE_TYPE_VIDEO_PROCESSOR,
|
||||
CORE_TYPE_GONG
|
||||
};
|
||||
|
||||
enum rarch_ctl_state
|
||||
{
|
||||
RARCH_CTL_NONE = 0,
|
||||
|
||||
/* Deinitializes RetroArch. */
|
||||
RARCH_CTL_MAIN_DEINIT,
|
||||
|
||||
RARCH_CTL_IS_INITED,
|
||||
|
||||
RARCH_CTL_IS_DUMMY_CORE,
|
||||
RARCH_CTL_IS_CORE_LOADED,
|
||||
|
||||
#if defined(HAVE_RUNAHEAD) && (defined(HAVE_DYNAMIC) || defined(HAVE_DYLIB))
|
||||
RARCH_CTL_IS_SECOND_CORE_AVAILABLE,
|
||||
RARCH_CTL_IS_SECOND_CORE_LOADED,
|
||||
#endif
|
||||
|
||||
RARCH_CTL_IS_BPS_PREF,
|
||||
RARCH_CTL_UNSET_BPS_PREF,
|
||||
|
||||
RARCH_CTL_IS_PATCH_BLOCKED,
|
||||
|
||||
RARCH_CTL_IS_UPS_PREF,
|
||||
RARCH_CTL_UNSET_UPS_PREF,
|
||||
|
||||
RARCH_CTL_IS_IPS_PREF,
|
||||
RARCH_CTL_UNSET_IPS_PREF,
|
||||
|
||||
#ifdef HAVE_CONFIGFILE
|
||||
/* Block config read */
|
||||
RARCH_CTL_SET_BLOCK_CONFIG_READ,
|
||||
RARCH_CTL_UNSET_BLOCK_CONFIG_READ,
|
||||
#endif
|
||||
|
||||
/* Username */
|
||||
RARCH_CTL_HAS_SET_USERNAME,
|
||||
|
||||
RARCH_CTL_HAS_SET_SUBSYSTEMS,
|
||||
|
||||
RARCH_CTL_IS_IDLE,
|
||||
RARCH_CTL_SET_IDLE,
|
||||
|
||||
RARCH_CTL_SET_WINDOWED_SCALE,
|
||||
|
||||
#ifdef HAVE_CONFIGFILE
|
||||
RARCH_CTL_IS_OVERRIDES_ACTIVE,
|
||||
|
||||
RARCH_CTL_IS_REMAPS_CORE_ACTIVE,
|
||||
RARCH_CTL_SET_REMAPS_CORE_ACTIVE,
|
||||
|
||||
RARCH_CTL_IS_REMAPS_CONTENT_DIR_ACTIVE,
|
||||
RARCH_CTL_SET_REMAPS_CONTENT_DIR_ACTIVE,
|
||||
|
||||
RARCH_CTL_IS_REMAPS_GAME_ACTIVE,
|
||||
RARCH_CTL_SET_REMAPS_GAME_ACTIVE,
|
||||
#endif
|
||||
|
||||
RARCH_CTL_IS_MISSING_BIOS,
|
||||
RARCH_CTL_SET_MISSING_BIOS,
|
||||
RARCH_CTL_UNSET_MISSING_BIOS,
|
||||
|
||||
RARCH_CTL_IS_GAME_OPTIONS_ACTIVE,
|
||||
RARCH_CTL_IS_FOLDER_OPTIONS_ACTIVE,
|
||||
|
||||
RARCH_CTL_IS_PAUSED,
|
||||
RARCH_CTL_SET_PAUSED,
|
||||
|
||||
RARCH_CTL_SET_SHUTDOWN,
|
||||
|
||||
/* Runloop state */
|
||||
RARCH_CTL_STATE_FREE,
|
||||
|
||||
/* Performance counters */
|
||||
RARCH_CTL_GET_PERFCNT,
|
||||
RARCH_CTL_SET_PERFCNT_ENABLE,
|
||||
RARCH_CTL_UNSET_PERFCNT_ENABLE,
|
||||
RARCH_CTL_IS_PERFCNT_ENABLE,
|
||||
|
||||
/* Core options */
|
||||
RARCH_CTL_HAS_CORE_OPTIONS,
|
||||
RARCH_CTL_GET_CORE_OPTION_SIZE,
|
||||
RARCH_CTL_CORE_OPTIONS_LIST_GET,
|
||||
RARCH_CTL_CORE_OPTION_PREV,
|
||||
RARCH_CTL_CORE_OPTION_NEXT,
|
||||
RARCH_CTL_CORE_OPTION_UPDATE_DISPLAY,
|
||||
RARCH_CTL_CORE_IS_RUNNING,
|
||||
|
||||
/* BSV Movie */
|
||||
RARCH_CTL_BSV_MOVIE_IS_INITED
|
||||
};
|
||||
|
||||
enum rarch_capabilities
|
||||
{
|
||||
RARCH_CAPABILITIES_NONE = 0,
|
||||
RARCH_CAPABILITIES_CPU,
|
||||
RARCH_CAPABILITIES_COMPILER
|
||||
};
|
||||
|
||||
enum rarch_override_setting
|
||||
{
|
||||
RARCH_OVERRIDE_SETTING_NONE = 0,
|
||||
RARCH_OVERRIDE_SETTING_LIBRETRO,
|
||||
RARCH_OVERRIDE_SETTING_VERBOSITY,
|
||||
RARCH_OVERRIDE_SETTING_LIBRETRO_DIRECTORY,
|
||||
RARCH_OVERRIDE_SETTING_SAVE_PATH,
|
||||
RARCH_OVERRIDE_SETTING_STATE_PATH,
|
||||
#ifdef HAVE_NETWORKING
|
||||
RARCH_OVERRIDE_SETTING_NETPLAY_MODE,
|
||||
RARCH_OVERRIDE_SETTING_NETPLAY_IP_ADDRESS,
|
||||
RARCH_OVERRIDE_SETTING_NETPLAY_IP_PORT,
|
||||
RARCH_OVERRIDE_SETTING_NETPLAY_STATELESS_MODE,
|
||||
RARCH_OVERRIDE_SETTING_NETPLAY_CHECK_FRAMES,
|
||||
#endif
|
||||
RARCH_OVERRIDE_SETTING_UPS_PREF,
|
||||
RARCH_OVERRIDE_SETTING_BPS_PREF,
|
||||
RARCH_OVERRIDE_SETTING_IPS_PREF,
|
||||
RARCH_OVERRIDE_SETTING_LIBRETRO_DEVICE,
|
||||
RARCH_OVERRIDE_SETTING_LOG_TO_FILE,
|
||||
RARCH_OVERRIDE_SETTING_LAST
|
||||
};
|
||||
|
||||
enum runloop_action
|
||||
{
|
||||
RUNLOOP_ACTION_NONE = 0,
|
||||
RUNLOOP_ACTION_AUTOSAVE
|
||||
};
|
||||
|
||||
|
||||
enum ffemu_pix_format
|
||||
{
|
||||
FFEMU_PIX_RGB565 = 0,
|
||||
FFEMU_PIX_BGR24,
|
||||
FFEMU_PIX_ARGB8888
|
||||
};
|
||||
|
||||
enum streaming_mode
|
||||
{
|
||||
STREAMING_MODE_TWITCH = 0,
|
||||
STREAMING_MODE_YOUTUBE,
|
||||
STREAMING_MODE_FACEBOOK,
|
||||
STREAMING_MODE_LOCAL,
|
||||
STREAMING_MODE_CUSTOM
|
||||
};
|
||||
|
||||
enum record_config_type
|
||||
{
|
||||
RECORD_CONFIG_TYPE_RECORDING_CUSTOM = 0,
|
||||
RECORD_CONFIG_TYPE_RECORDING_LOW_QUALITY,
|
||||
RECORD_CONFIG_TYPE_RECORDING_MED_QUALITY,
|
||||
RECORD_CONFIG_TYPE_RECORDING_HIGH_QUALITY,
|
||||
RECORD_CONFIG_TYPE_RECORDING_LOSSLESS_QUALITY,
|
||||
RECORD_CONFIG_TYPE_RECORDING_WEBM_FAST,
|
||||
RECORD_CONFIG_TYPE_RECORDING_WEBM_HIGH_QUALITY,
|
||||
RECORD_CONFIG_TYPE_RECORDING_GIF,
|
||||
RECORD_CONFIG_TYPE_RECORDING_APNG,
|
||||
RECORD_CONFIG_TYPE_STREAMING_CUSTOM,
|
||||
RECORD_CONFIG_TYPE_STREAMING_LOW_QUALITY,
|
||||
RECORD_CONFIG_TYPE_STREAMING_MED_QUALITY,
|
||||
RECORD_CONFIG_TYPE_STREAMING_HIGH_QUALITY,
|
||||
RECORD_CONFIG_TYPE_STREAMING_NETPLAY
|
||||
};
|
||||
|
||||
typedef struct rarch_memory_descriptor
|
||||
{
|
||||
struct retro_memory_descriptor core; /* uint64_t alignment */
|
||||
size_t disconnect_mask;
|
||||
} rarch_memory_descriptor_t;
|
||||
|
||||
typedef struct rarch_memory_map
|
||||
{
|
||||
rarch_memory_descriptor_t *descriptors;
|
||||
unsigned num_descriptors;
|
||||
} rarch_memory_map_t;
|
||||
|
||||
typedef struct rarch_system_info
|
||||
{
|
||||
struct retro_location_callback location_cb; /* ptr alignment */
|
||||
disk_control_interface_t disk_control; /* ptr alignment */
|
||||
struct retro_system_info info; /* ptr alignment */
|
||||
rarch_memory_map_t mmaps; /* ptr alignment */
|
||||
const char *input_desc_btn[MAX_USERS][RARCH_FIRST_META_KEY];
|
||||
struct
|
||||
{
|
||||
struct retro_subsystem_info *data;
|
||||
unsigned size;
|
||||
} subsystem;
|
||||
struct
|
||||
{
|
||||
struct retro_controller_info *data;
|
||||
unsigned size;
|
||||
} ports;
|
||||
unsigned rotation;
|
||||
unsigned performance_level;
|
||||
char valid_extensions[255];
|
||||
bool load_no_content;
|
||||
bool supports_vfs;
|
||||
} rarch_system_info_t;
|
||||
|
||||
typedef struct retro_ctx_input_state_info
|
||||
{
|
||||
retro_input_state_t cb;
|
||||
} retro_ctx_input_state_info_t;
|
||||
|
||||
typedef struct retro_ctx_cheat_info
|
||||
{
|
||||
const char *code;
|
||||
unsigned index;
|
||||
bool enabled;
|
||||
} retro_ctx_cheat_info_t;
|
||||
|
||||
typedef struct retro_ctx_api_info
|
||||
{
|
||||
unsigned version;
|
||||
} retro_ctx_api_info_t;
|
||||
|
||||
typedef struct retro_ctx_region_info
|
||||
{
|
||||
unsigned region;
|
||||
} retro_ctx_region_info_t;
|
||||
|
||||
typedef struct retro_ctx_controller_info
|
||||
{
|
||||
unsigned port;
|
||||
unsigned device;
|
||||
} retro_ctx_controller_info_t;
|
||||
|
||||
typedef struct retro_ctx_memory_info
|
||||
{
|
||||
void *data;
|
||||
size_t size;
|
||||
unsigned id;
|
||||
} retro_ctx_memory_info_t;
|
||||
|
||||
typedef struct retro_ctx_load_content_info
|
||||
{
|
||||
struct retro_game_info *info;
|
||||
const struct string_list *content;
|
||||
const struct retro_subsystem_info *special;
|
||||
} retro_ctx_load_content_info_t;
|
||||
|
||||
typedef struct retro_ctx_serialize_info
|
||||
{
|
||||
const void *data_const;
|
||||
void *data;
|
||||
size_t size;
|
||||
} retro_ctx_serialize_info_t;
|
||||
|
||||
typedef struct retro_ctx_size_info
|
||||
{
|
||||
size_t size;
|
||||
} retro_ctx_size_info_t;
|
||||
|
||||
typedef struct retro_ctx_environ_info
|
||||
{
|
||||
retro_environment_t env;
|
||||
} retro_ctx_environ_info_t;
|
||||
|
||||
typedef struct retro_callbacks
|
||||
{
|
||||
retro_video_refresh_t frame_cb;
|
||||
retro_audio_sample_t sample_cb;
|
||||
retro_audio_sample_batch_t sample_batch_cb;
|
||||
retro_input_state_t state_cb;
|
||||
retro_input_poll_t poll_cb;
|
||||
} retro_callbacks_t;
|
||||
|
||||
struct rarch_main_wrap
|
||||
{
|
||||
char **argv;
|
||||
const char *content_path;
|
||||
const char *sram_path;
|
||||
const char *state_path;
|
||||
const char *config_path;
|
||||
const char *libretro_path;
|
||||
int argc;
|
||||
bool verbose;
|
||||
bool no_content;
|
||||
bool touched;
|
||||
};
|
||||
|
||||
typedef struct rarch_resolution
|
||||
{
|
||||
unsigned idx;
|
||||
unsigned id;
|
||||
} rarch_resolution_t;
|
||||
|
||||
/* All run-time- / command line flag-related globals go here. */
|
||||
|
||||
typedef struct global
|
||||
{
|
||||
#ifdef HAVE_MENU
|
||||
struct
|
||||
{
|
||||
retro_time_t prev_start_time;
|
||||
retro_time_t noop_press_time;
|
||||
retro_time_t noop_start_time;
|
||||
retro_time_t action_start_time;
|
||||
retro_time_t action_press_time;
|
||||
} menu;
|
||||
#endif
|
||||
struct
|
||||
{
|
||||
char *remapfile;
|
||||
char savefile[8192];
|
||||
char savestate[8192];
|
||||
char cheatfile[8192];
|
||||
char ups[8192];
|
||||
char bps[8192];
|
||||
char ips[8192];
|
||||
char label[8192];
|
||||
} name;
|
||||
|
||||
/* Recording. */
|
||||
struct
|
||||
{
|
||||
size_t gpu_width;
|
||||
size_t gpu_height;
|
||||
unsigned width;
|
||||
unsigned height;
|
||||
char path[8192];
|
||||
char config[8192];
|
||||
char output_dir[8192];
|
||||
char config_dir[8192];
|
||||
bool use_output_dir;
|
||||
} record;
|
||||
|
||||
/* Settings and/or global state that is specific to
|
||||
* a console-style implementation. */
|
||||
struct
|
||||
{
|
||||
struct
|
||||
{
|
||||
struct
|
||||
{
|
||||
uint32_t *list;
|
||||
unsigned count;
|
||||
rarch_resolution_t current;
|
||||
rarch_resolution_t initial;
|
||||
bool check;
|
||||
} resolutions;
|
||||
unsigned gamma_correction;
|
||||
unsigned int flicker_filter_index;
|
||||
unsigned char soft_filter_index;
|
||||
bool pal_enable;
|
||||
bool pal60_enable;
|
||||
} screen;
|
||||
|
||||
bool flickerfilter_enable;
|
||||
bool softfilter_enable;
|
||||
|
||||
} console;
|
||||
unsigned old_analog_dpad_mode[MAX_USERS];
|
||||
unsigned old_libretro_device[MAX_USERS];
|
||||
bool old_analog_dpad_mode_set;
|
||||
bool old_libretro_device_set;
|
||||
bool remapping_cache_active;
|
||||
/* Settings and/or global states specific to menus */
|
||||
#ifdef HAVE_MENU
|
||||
enum menu_action menu_prev_action;
|
||||
#endif
|
||||
bool launched_from_cli;
|
||||
bool cli_load_menu_on_error;
|
||||
} global_t;
|
||||
|
||||
typedef struct content_file_override
|
||||
{
|
||||
char *ext;
|
||||
bool need_fullpath;
|
||||
bool persistent_data;
|
||||
} content_file_override_t;
|
||||
|
||||
typedef struct content_file_info
|
||||
{
|
||||
char *full_path;
|
||||
char *archive_path;
|
||||
char *archive_file;
|
||||
char *dir;
|
||||
char *name;
|
||||
char *ext;
|
||||
char *meta; /* Unused at present */
|
||||
void *data;
|
||||
size_t data_size;
|
||||
bool file_in_archive;
|
||||
bool persistent_data;
|
||||
} content_file_info_t;
|
||||
|
||||
typedef struct content_file_list
|
||||
{
|
||||
content_file_info_t *entries;
|
||||
struct string_list *temporary_files;
|
||||
struct retro_game_info *game_info;
|
||||
struct retro_game_info_ext *game_info_ext;
|
||||
size_t size;
|
||||
} content_file_list_t;
|
||||
|
||||
typedef struct content_state
|
||||
{
|
||||
char *pending_subsystem_roms[RARCH_MAX_SUBSYSTEM_ROMS];
|
||||
|
||||
content_file_override_t *content_override_list;
|
||||
content_file_list_t *content_list;
|
||||
|
||||
int pending_subsystem_rom_num;
|
||||
int pending_subsystem_id;
|
||||
unsigned pending_subsystem_rom_id;
|
||||
uint32_t rom_crc;
|
||||
|
||||
char companion_ui_crc32[32];
|
||||
char pending_subsystem_ident[255];
|
||||
char pending_rom_crc_path[PATH_MAX_LENGTH];
|
||||
char companion_ui_db_name[PATH_MAX_LENGTH];
|
||||
|
||||
bool is_inited;
|
||||
bool core_does_not_need_content;
|
||||
bool pending_subsystem_init;
|
||||
bool pending_rom_crc;
|
||||
} content_state_t;
|
||||
|
||||
/* Parameters passed to ffemu_new() */
|
||||
struct record_params
|
||||
{
|
||||
/* Framerate per second of input video. */
|
||||
double fps;
|
||||
/* Sample rate of input audio. */
|
||||
double samplerate;
|
||||
|
||||
/* Filename to dump to. */
|
||||
const char *filename;
|
||||
|
||||
/* Path to config. Optional. */
|
||||
const char *config;
|
||||
|
||||
const char *audio_resampler;
|
||||
|
||||
/* Desired output resolution. */
|
||||
unsigned out_width;
|
||||
unsigned out_height;
|
||||
|
||||
/* Total size of framebuffer used in input. */
|
||||
unsigned fb_width;
|
||||
unsigned fb_height;
|
||||
|
||||
/* Audio channels. */
|
||||
unsigned channels;
|
||||
|
||||
unsigned video_record_scale_factor;
|
||||
unsigned video_stream_scale_factor;
|
||||
unsigned video_record_threads;
|
||||
unsigned streaming_mode;
|
||||
|
||||
/* Aspect ratio of input video. Parameters are passed to the muxer,
|
||||
* the video itself is not scaled.
|
||||
*/
|
||||
float aspect_ratio;
|
||||
|
||||
enum record_config_type preset;
|
||||
|
||||
/* Input pixel format. */
|
||||
enum ffemu_pix_format pix_fmt;
|
||||
|
||||
bool video_gpu_record;
|
||||
};
|
||||
|
||||
struct record_video_data
|
||||
{
|
||||
const void *data;
|
||||
unsigned width;
|
||||
unsigned height;
|
||||
int pitch;
|
||||
bool is_dupe;
|
||||
};
|
||||
|
||||
struct record_audio_data
|
||||
{
|
||||
const void *data;
|
||||
size_t frames;
|
||||
};
|
||||
|
||||
|
||||
RETRO_END_DECLS
|
||||
|
||||
#endif
|
@ -29,7 +29,7 @@
|
||||
#endif
|
||||
|
||||
#include "../content.h"
|
||||
#include "../core_type.h"
|
||||
#include "../retroarch_types.h"
|
||||
|
||||
RETRO_BEGIN_DECLS
|
||||
|
||||
|
@ -427,7 +427,7 @@ static ui_application_t ui_application_cocoa = {
|
||||
NSPoint pos = CONVERT_POINT();
|
||||
cocoa_input_data_t
|
||||
*apple = (cocoa_input_data_t*)
|
||||
input_driver_get_data();
|
||||
input_state_get_ptr()->current_data;
|
||||
if (!apple)
|
||||
return;
|
||||
/* Relative */
|
||||
@ -456,7 +456,7 @@ static ui_application_t ui_application_cocoa = {
|
||||
NSPoint pos = CONVERT_POINT();
|
||||
cocoa_input_data_t
|
||||
*apple = (cocoa_input_data_t*)
|
||||
input_driver_get_data();
|
||||
input_state_get_ptr()->current_data;
|
||||
if (!apple || pos.y < 0)
|
||||
return;
|
||||
apple->mouse_buttons |= (1 << number);
|
||||
@ -471,7 +471,7 @@ static ui_application_t ui_application_cocoa = {
|
||||
NSPoint pos = CONVERT_POINT();
|
||||
cocoa_input_data_t
|
||||
*apple = (cocoa_input_data_t*)
|
||||
input_driver_get_data();
|
||||
input_state_get_ptr()->current_data;
|
||||
if (!apple || pos.y < 0)
|
||||
return;
|
||||
apple->mouse_buttons &= ~(1 << number);
|
||||
|
@ -111,7 +111,8 @@ void get_ios_version(int *major, int *minor)
|
||||
static void handle_touch_event(NSArray* touches)
|
||||
{
|
||||
unsigned i;
|
||||
cocoa_input_data_t *apple = (cocoa_input_data_t*)input_driver_get_data();
|
||||
cocoa_input_data_t *apple = (cocoa_input_data_t*)
|
||||
input_state_get_ptr()->current_data;
|
||||
float scale = cocoa_screen_get_native_scale();
|
||||
|
||||
if (!apple)
|
||||
|
@ -4943,7 +4943,7 @@ static void ui_companion_qt_toggle(void *data, bool force)
|
||||
settings_t *settings = config_get_ptr();
|
||||
bool ui_companion_toggle = settings->bools.ui_companion_toggle;
|
||||
bool video_fullscreen = settings->bools.video_fullscreen;
|
||||
bool mouse_grabbed = input_mouse_grabbed();
|
||||
bool mouse_grabbed = input_state_get_ptr()->grab_mouse_state;
|
||||
|
||||
if (ui_companion_toggle || force)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user