Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7b6e564ba3 | ||
|
|
b574780d99 | ||
|
|
1a2ee91117 | ||
|
|
bc6fec6e0c | ||
|
|
ec06ab0941 | ||
|
|
32e2aacd3c | ||
|
|
7f08729a5e | ||
|
|
ea6139b234 | ||
|
|
96d87802cd | ||
|
|
618cfacd59 | ||
|
|
6d9ee4c161 | ||
|
|
46b9432fb8 | ||
|
|
c66bcc05cf | ||
|
|
00b15c4e79 | ||
|
|
597dbfdf9a | ||
|
|
af6b09d950 | ||
|
|
0194ce91bf | ||
|
|
a6901dc85e | ||
|
|
8850a4984b | ||
|
|
daef26f951 | ||
|
|
5ca99fdb51 | ||
|
|
23a06ef1a1 | ||
|
|
cd3e818210 | ||
|
|
619df7e11b | ||
|
|
df98bca9ae | ||
|
|
10e1f5d72a | ||
|
|
aac207b455 | ||
|
|
ca311246b1 | ||
|
|
22de07a662 | ||
|
|
2329a36f54 | ||
|
|
ab3385c73d | ||
|
|
f21f113678 | ||
|
|
d5b1c3092f | ||
|
|
d401816f41 | ||
|
|
dbb74ba5ab | ||
|
|
4e188c0f26 | ||
|
|
376f06c993 | ||
|
|
1bd188c5a7 | ||
|
|
d3813dddb1 | ||
|
|
957b71cfdc | ||
|
|
d35200aa56 | ||
|
|
919954c5be | ||
|
|
cc7247aecf | ||
|
|
024dbb5008 | ||
|
|
41afbc30ef | ||
|
|
8d513f8199 | ||
|
|
eb49458284 | ||
|
|
b2c87baa87 | ||
|
|
71ca56e0fb | ||
|
|
f505d625a3 | ||
|
|
6855b7f2b1 | ||
|
|
1ad0251da9 | ||
|
|
e5d6d411be | ||
|
|
b0c5362da6 | ||
|
|
67bc91c1d0 | ||
|
|
f0a510c8a6 | ||
|
|
f2d574fd87 | ||
|
|
8590e0e3fe | ||
|
|
d44f3e1239 | ||
|
|
1855ce5fc7 | ||
|
|
5ac7d89e36 | ||
|
|
9a97eb47ad | ||
|
|
ca26e50050 | ||
|
|
5f834a8cb3 | ||
|
|
9a6faa3ddd |
No files matched your search
@@ -0,0 +1,135 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, caste, color, religion, or sexual identity
|
||||
and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at:
|
||||
|
||||
* Via E-Mail to <libretro@gmail.com>, please include in the subject line
|
||||
`RETROARCH COC` so that your e-mail may reach the correct party.
|
||||
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or
|
||||
permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
the community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.1, available at
|
||||
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
|
||||
|
||||
Community Impact Guidelines were inspired by
|
||||
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
|
||||
at [https://www.contributor-covenant.org/translations][translations].
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
|
||||
[Mozilla CoC]: https://github.com/mozilla/diversity
|
||||
[FAQ]: https://www.contributor-covenant.org/faq
|
||||
[translations]: https://www.contributor-covenant.org/translations
|
||||
@@ -1,58 +1,93 @@
|
||||
# Contributing to RetroArch
|
||||
|
||||
If you are a developer and want to contribute to the development of RetroArch, please read this.
|
||||
If you have found a bug and want to submit a minor patch or a bug report, please read this as well.
|
||||
If you are a developer who wishes to contribute to the development of _RetroArch_; or if you have
|
||||
found a bug and wish to submit a minor patch and/or bug report, please read this document.
|
||||
|
||||
# Submitting a bug report
|
||||
When submitting a bug report, make sure that the bug is local to RetroArch.
|
||||
A bug in a libretro core or something deemed to be external is likely to be closed very fast.
|
||||
If you still suspect a bug in RetroArch, make sure to test with several cores to make sure.
|
||||
Active discussions happen on our [Discord](https://discordapp.com/invite/27Xxm2h), mostly within
|
||||
the _Programming_ channel category. We value discussions that happen in real time around
|
||||
these contributions.
|
||||
|
||||
If you have troubles building RetroArch on Linux/BSD/OSX, make sure to paste shell output of ./configure,
|
||||
as well as config.log and shell output of make. If building on Windows, just paste shell output of make.
|
||||
Please do note that contributors to _RetroArch_ do such contributions within their spare time.
|
||||
We do prefer to keep a professional and non-aggressive atmosphere around the project, along
|
||||
with any disagreements to be settled professionally without insults, name calling, or otherwise.
|
||||
If there are any issues, we are willing to have discussions about it.
|
||||
|
||||
If the issue occurs during runtime, make sure to paste RetroArch's verbose log.
|
||||
If using Phoenix frontend, you can find log in (File -> Show Log) after running.
|
||||
In console, make sure to run with verbose (-v) flag.
|
||||
## Submitting Bug Reports
|
||||
|
||||
# Pull Requests
|
||||
Outside contributions are generally only accepted in the form of a pull request. The process is very simple.
|
||||
Fork RetroArch, make your changes, and issue a pull request on GitHub. This can all be done within the browser.
|
||||
The changes are reviewed, and might be merged in. If the pull request isn't acceptable at the time,
|
||||
note that it's possible to continue pushing up commits to your branch.
|
||||
Bug reports in _RetroArch_ may fall into one of two categories:
|
||||
|
||||
If you want to develop a larger feature,
|
||||
we'd like to discuss this first (ideally on IRC) so that you don't risk developing something
|
||||
that won't be merged. A pull request with a proof-of-concept is fine, but please indicate so.
|
||||
* _RetroArch_ itself, the user interface and API around all of the various cores.
|
||||
* Individual _Core_, of which interact with _RetroArch_.
|
||||
|
||||
When submitting a bug report, ensure that the report is submitted to the correct repository.
|
||||
For _RetroArch_ itself, it is done by reporting a bug within the
|
||||
[RetroArch](https://github.com/libretro/RetroArch) repository. For other cores, please use
|
||||
the search function within the [libretro Organization](https://github.com/libretro) on
|
||||
GitHub. Issues that are specific to a core and not _RetroArch_ are likely to be closed very
|
||||
quickly. If an issue is suspected with _RetroArch_, please make sure to test with multiple
|
||||
cores to be sure that is is not isolated.
|
||||
|
||||
If the issue occurs during runtime, please paste the verbose log output:
|
||||
|
||||
* If using the _Pheonix_ interface, the log will be in _File_ -> _Show Log_.
|
||||
* If using the main interface, enable verbose logging with _Settings_ -> _Logging_ ->
|
||||
_Logging Verbosity_. Ensure both _Log to File_ and _Timestamp log Files_ is enabled.
|
||||
* Otherwise, run _RetroArch_ with the verbose (`-v`) flag.
|
||||
|
||||
If the error happens during compilation and/or building, paste the output of `./configure`
|
||||
and `make` accordingly. If using an IDE, please paste any of the errors and log output.
|
||||
|
||||
## Submitting Pull Requests
|
||||
|
||||
Any and all contributions should be submitted through Pull Requests on
|
||||
[GitHub](https://github.com/libretro/RetroArch/pulls). The process requires that you fork the
|
||||
repository, make the appropriate changes, and then open a pull request on _GitHub_. If your
|
||||
pull request is for a proof-of-concept then please indicate as such.
|
||||
|
||||
Your pull request will then be reviewed. There may be comments and requests for additional
|
||||
changes to be made. It may also be possible that the changes will not be accepted. Otherwise, it
|
||||
may be merged in when it is fully approved. The final approval of merge requests is at the
|
||||
discretion of the project.
|
||||
|
||||
If you want to develop a larger feature or make broad changes, please do join our
|
||||
[Discord](https://discordapp.com/invite/27Xxm2h) server to discuss. The discussion is
|
||||
necessary to prevent the possibility of major work being done which will not be accepted at all.
|
||||
|
||||
## libretro API
|
||||
If you wish to add functionality to libretro's API, it can take some time to merge in, because changes
|
||||
to libretro API will affect other projects as well, and we highly value API/ABI stability.
|
||||
Features will only be added when deemed *necessary* for a concrete libretro core to function properly.
|
||||
Features will not be added on basis of hypothetical libretro implementations.
|
||||
|
||||
# Coding style
|
||||
Having a consistent code style throughout the code base is highly valued.
|
||||
Please look through the code to get a feel for the coding style.
|
||||
A pull request may be asked to fix the coding style before submission.
|
||||
In other cases, a pull request may be followed up with a "style nit commit".
|
||||
If you wish to contribute additional functionality to _libretro_'s API, there are considerations
|
||||
that must be accepted. Please note that because this API affects multiple different projects, we
|
||||
highly value and require API and ABI stability and backwards-compatibility. Due to this
|
||||
requirement, there will be additional scrutiny in reviews for this added functionality.
|
||||
|
||||
## Non-obvious things:
|
||||
- Code should be both C89 and ISO C++ compatible. This dual requirement is for XBox360 and MSVC in general. Think of it as a C++ compatible subset of C99.
|
||||
- Warnings are not allowed (-Wall). Make sure your code is warning-free. Note that warning sensitivity differs a bit across compiler versions.
|
||||
- Using deprecated APIs is discouraged.
|
||||
Any and all features will be added only when **necessary** for an existing _libretro_ core to
|
||||
properly function. Hypothetical implementations of _libretro_ are not considered.
|
||||
|
||||
# Copyright Headers and AUTHORS
|
||||
If you have contributed to a part of a source file (a chunk of code that's written by you),
|
||||
you should add yourself to the copyright header in that file.
|
||||
If you have contributed significantly
|
||||
(a feature, a contribution you can "name", e.g. "Added audio driver foo"), you should add yourself to AUTHORS file.
|
||||
We'd like your full name and email, and which features you have been part of.
|
||||
## Coding style
|
||||
|
||||
# IRC
|
||||
Active development happens on [Discord](https://discordapp.com/invite/27Xxm2h).
|
||||
We value discussing things in "real-time".
|
||||
We highly value a consistent code style throughout the entire code base, please make sure you look
|
||||
through the existing code to get a feel for the coding style. When submitting a pull request, it may
|
||||
be asked to fix any coding style issues before submission. In other cases, there may be a follow-up
|
||||
pull request making the code style consistent.
|
||||
|
||||
# Commit Access
|
||||
Contributors who show a track record of making good pull requests over time will eventually get commit access to the repo.
|
||||
This typically happens when the "overhead" of looking through pull requests over time becomes a burden.
|
||||
For full guidelines please see the [Coding Standards](https://docs.libretro.com/development/coding-standards/).
|
||||
|
||||
Some non-obvious things to be aware of:
|
||||
|
||||
- Code should be both C89 and ISO C++ compatible. This is a requirement for XBox 360 and MSVC to
|
||||
properly build. Think of it as a C++ compatible subset of C99.
|
||||
- There must be no warnings in your code (enabled by `-Wall` for GCC compilers), do also note that
|
||||
different compilers may produce different warnings.
|
||||
- Avoid using deprecated APIs, these will be removed in the future at some point.
|
||||
|
||||
## Copyright Headers and AUTHORS
|
||||
|
||||
If you have contributed a chunk of source code that is written to you, you should add yourself to
|
||||
the copyright header in the file. If you have made a significant contribution you should add
|
||||
yourself to the `AUTHORS` file, adding your full name, e-mail, and the feature you worked on.
|
||||
|
||||
## Commit Access
|
||||
|
||||
Contributors who show a good track record of pull requests over time may eventually
|
||||
get commit access to the repository. This may happen when looking through pull requests
|
||||
over long amounts of time becomes a burden.
|
||||
@@ -302,6 +302,7 @@ OBJ += \
|
||||
$(LIBRETRO_COMM_DIR)/file/file_path_io.o \
|
||||
file_path_special.o \
|
||||
$(LIBRETRO_COMM_DIR)/hash/lrc_hash.o \
|
||||
input/input_driver.o \
|
||||
input/common/input_hid_common.o \
|
||||
led/led_driver.o \
|
||||
gfx/video_coord_array.o \
|
||||
|
||||
@@ -1341,8 +1341,8 @@ void cheat_manager_apply_rumble(struct item_cheat *cheat, unsigned int curr_valu
|
||||
{
|
||||
cheat->rumble_primary_end_time = current_time + (cheat->rumble_primary_duration * 1000);
|
||||
cheat->rumble_secondary_end_time = current_time + (cheat->rumble_secondary_duration * 1000);
|
||||
input_driver_set_rumble_state(cheat->rumble_port, RETRO_RUMBLE_STRONG, cheat->rumble_primary_strength);
|
||||
input_driver_set_rumble_state(cheat->rumble_port, RETRO_RUMBLE_WEAK, cheat->rumble_secondary_strength);
|
||||
input_set_rumble_state(cheat->rumble_port, RETRO_RUMBLE_STRONG, cheat->rumble_primary_strength);
|
||||
input_set_rumble_state(cheat->rumble_port, RETRO_RUMBLE_WEAK, cheat->rumble_secondary_strength);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1354,24 +1354,24 @@ void cheat_manager_apply_rumble(struct item_cheat *cheat, unsigned int curr_valu
|
||||
if (cheat->rumble_primary_end_time <= current_time)
|
||||
{
|
||||
if (cheat->rumble_primary_end_time != 0)
|
||||
input_driver_set_rumble_state(cheat->rumble_port,
|
||||
input_set_rumble_state(cheat->rumble_port,
|
||||
RETRO_RUMBLE_STRONG, 0);
|
||||
cheat->rumble_primary_end_time = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
input_driver_set_rumble_state(cheat->rumble_port,
|
||||
input_set_rumble_state(cheat->rumble_port,
|
||||
RETRO_RUMBLE_STRONG, cheat->rumble_primary_strength);
|
||||
}
|
||||
|
||||
if (cheat->rumble_secondary_end_time <= current_time)
|
||||
{
|
||||
if (cheat->rumble_secondary_end_time != 0)
|
||||
input_driver_set_rumble_state(cheat->rumble_port, RETRO_RUMBLE_WEAK, 0);
|
||||
input_set_rumble_state(cheat->rumble_port, RETRO_RUMBLE_WEAK, 0);
|
||||
cheat->rumble_secondary_end_time = 0;
|
||||
}
|
||||
else
|
||||
input_driver_set_rumble_state(cheat->rumble_port, RETRO_RUMBLE_WEAK, cheat->rumble_secondary_strength);
|
||||
input_set_rumble_state(cheat->rumble_port, RETRO_RUMBLE_WEAK, cheat->rumble_secondary_strength);
|
||||
}
|
||||
|
||||
void cheat_manager_apply_retro_cheats(void)
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
#elif defined(_XBOX1) || defined(GEKKO) || defined(ANDROID)
|
||||
#define DEFAULT_ASPECT_RATIO 1.3333f
|
||||
#else
|
||||
#define DEFAULT_ASPECT_RATIO -1.0f
|
||||
#define DEFAULT_ASPECT_RATIO 1.3333f
|
||||
#endif
|
||||
|
||||
#if defined(GEKKO)
|
||||
@@ -596,6 +596,9 @@ static const bool quick_menu_show_start_streaming = true;
|
||||
static const bool quick_menu_show_set_core_association = true;
|
||||
static const bool quick_menu_show_reset_core_association = true;
|
||||
static const bool quick_menu_show_options = true;
|
||||
|
||||
#define DEFAULT_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH false
|
||||
|
||||
static const bool quick_menu_show_controls = true;
|
||||
static const bool quick_menu_show_cheats = true;
|
||||
static const bool quick_menu_show_shaders = true;
|
||||
|
||||
@@ -1683,6 +1683,7 @@ static struct config_bool_setting *populate_settings_bool(
|
||||
SETTING_BOOL("quick_menu_show_set_core_association", &settings->bools.quick_menu_show_set_core_association, true, quick_menu_show_set_core_association, false);
|
||||
SETTING_BOOL("quick_menu_show_reset_core_association", &settings->bools.quick_menu_show_reset_core_association, true, quick_menu_show_reset_core_association, false);
|
||||
SETTING_BOOL("quick_menu_show_options", &settings->bools.quick_menu_show_options, true, quick_menu_show_options, false);
|
||||
SETTING_BOOL("quick_menu_show_core_options_flush", &settings->bools.quick_menu_show_core_options_flush, true, DEFAULT_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH, false);
|
||||
SETTING_BOOL("quick_menu_show_controls", &settings->bools.quick_menu_show_controls, true, quick_menu_show_controls, false);
|
||||
SETTING_BOOL("quick_menu_show_cheats", &settings->bools.quick_menu_show_cheats, true, quick_menu_show_cheats, false);
|
||||
SETTING_BOOL("quick_menu_show_shaders", &settings->bools.quick_menu_show_shaders, true, quick_menu_show_shaders, false);
|
||||
@@ -1939,7 +1940,7 @@ static struct config_float_setting *populate_settings_float(
|
||||
SETTING_FLOAT("video_font_size", &settings->floats.video_font_size, true, DEFAULT_FONT_SIZE, false);
|
||||
SETTING_FLOAT("fastforward_ratio", &settings->floats.fastforward_ratio, true, DEFAULT_FASTFORWARD_RATIO, false);
|
||||
SETTING_FLOAT("slowmotion_ratio", &settings->floats.slowmotion_ratio, true, DEFAULT_SLOWMOTION_RATIO, false);
|
||||
SETTING_FLOAT("input_axis_threshold", input_driver_get_float(INPUT_ACTION_AXIS_THRESHOLD), true, DEFAULT_AXIS_THRESHOLD, false);
|
||||
SETTING_FLOAT("input_axis_threshold", &settings->floats.input_axis_threshold, true, DEFAULT_AXIS_THRESHOLD, false);
|
||||
SETTING_FLOAT("input_analog_deadzone", &settings->floats.input_analog_deadzone, true, DEFAULT_ANALOG_DEADZONE, false);
|
||||
SETTING_FLOAT("input_analog_sensitivity", &settings->floats.input_analog_sensitivity, true, DEFAULT_ANALOG_SENSITIVITY, false);
|
||||
SETTING_FLOAT("video_msg_bgcolor_opacity", &settings->floats.video_msg_bgcolor_opacity, true, message_bgcolor_opacity, false);
|
||||
@@ -1970,7 +1971,7 @@ static struct config_uint_setting *populate_settings_uint(
|
||||
SETTING_UINT("input_duty_cycle", &settings->uints.input_turbo_duty_cycle, true, turbo_duty_cycle, false);
|
||||
SETTING_UINT("input_turbo_mode", &settings->uints.input_turbo_mode, true, turbo_mode, false);
|
||||
SETTING_UINT("input_turbo_default_button", &settings->uints.input_turbo_default_button, true, turbo_default_btn, false);
|
||||
SETTING_UINT("input_max_users", input_driver_get_uint(INPUT_ACTION_MAX_USERS), true, input_max_users, false);
|
||||
SETTING_UINT("input_max_users", &settings->uints.input_max_users, true, input_max_users, false);
|
||||
SETTING_UINT("fps_update_interval", &settings->uints.fps_update_interval, true, DEFAULT_FPS_UPDATE_INTERVAL, false);
|
||||
SETTING_UINT("memory_update_interval", &settings->uints.memory_update_interval, true, DEFAULT_MEMORY_UPDATE_INTERVAL, false);
|
||||
SETTING_UINT("input_menu_toggle_gamepad_combo", &settings->uints.input_menu_toggle_gamepad_combo, true, DEFAULT_MENU_TOGGLE_GAMEPAD_COMBO, false);
|
||||
@@ -4780,8 +4781,8 @@ bool input_remapping_save_file(const char *path)
|
||||
"a", "x", "l", "r", "l2", "r2",
|
||||
"l3", "r3", "l_x+", "l_x-", "l_y+", "l_y-", "r_x+", "r_x-", "r_y+", "r_y-" };
|
||||
config_file_t *conf = NULL;
|
||||
unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
|
||||
settings_t *settings = config_get_ptr();
|
||||
unsigned max_users = settings->uints.input_max_users;
|
||||
const char *dir_input_remapping = settings->paths.directory_input_remapping;
|
||||
|
||||
remap_file[0] = '\0';
|
||||
|
||||
@@ -165,6 +165,7 @@ typedef struct settings
|
||||
unsigned input_poll_type_behavior;
|
||||
unsigned input_dingux_rumble_gain;
|
||||
unsigned input_auto_game_focus;
|
||||
unsigned input_max_users;
|
||||
|
||||
unsigned netplay_port;
|
||||
unsigned netplay_input_latency_frames_min;
|
||||
@@ -352,6 +353,7 @@ typedef struct settings
|
||||
float slowmotion_ratio;
|
||||
float fastforward_ratio;
|
||||
float input_analog_deadzone;
|
||||
float input_axis_threshold;
|
||||
float input_analog_sensitivity;
|
||||
} floats;
|
||||
|
||||
@@ -691,6 +693,7 @@ typedef struct settings
|
||||
bool quick_menu_show_set_core_association;
|
||||
bool quick_menu_show_reset_core_association;
|
||||
bool quick_menu_show_options;
|
||||
bool quick_menu_show_core_options_flush;
|
||||
bool quick_menu_show_controls;
|
||||
bool quick_menu_show_cheats;
|
||||
bool quick_menu_show_shaders;
|
||||
|
||||
@@ -159,9 +159,7 @@ static bool CCJSONObjectMemberHandler(void *context, const char *pValue, size_t
|
||||
}
|
||||
break;
|
||||
case 'p':
|
||||
if (string_is_equal(pValue, "path"))
|
||||
pCtx->current_string_val = &pCtx->core_info->path;
|
||||
else if (string_is_equal(pValue, "permissions"))
|
||||
if (string_is_equal(pValue, "permissions"))
|
||||
{
|
||||
pCtx->current_string_val = &pCtx->core_info->permissions;
|
||||
pCtx->current_string_list_val = &pCtx->core_info->permissions_list;
|
||||
@@ -815,14 +813,6 @@ static bool core_info_cache_write(core_info_cache_list_t *list, const char *info
|
||||
rjsonwriter_add_start_object(writer);
|
||||
rjsonwriter_add_newline(writer);
|
||||
|
||||
rjsonwriter_add_spaces(writer, 6);
|
||||
rjsonwriter_add_string(writer, "path");
|
||||
rjsonwriter_add_colon(writer);
|
||||
rjsonwriter_add_space(writer);
|
||||
rjsonwriter_add_string(writer, info->path);
|
||||
rjsonwriter_add_comma(writer);
|
||||
rjsonwriter_add_newline(writer);
|
||||
|
||||
rjsonwriter_add_spaces(writer, 6);
|
||||
rjsonwriter_add_string(writer, "display_name");
|
||||
rjsonwriter_add_colon(writer);
|
||||
@@ -1813,18 +1803,13 @@ static core_info_list_t *core_info_list_new(const char *path,
|
||||
core_info_list->list = core_info;
|
||||
core_info_list->count = path_list->core_list->size;
|
||||
|
||||
#if !defined(IOS)
|
||||
/* Read core info cache, if enabled
|
||||
* > This functionality is hard disabled on iOS/tvOS,
|
||||
* where core path changes on every install
|
||||
* (invalidating any cached parameters) */
|
||||
/* Read core info cache, if enabled */
|
||||
if (enable_cache)
|
||||
{
|
||||
core_info_cache_list = core_info_cache_read(info_dir);
|
||||
if (!core_info_cache_list)
|
||||
goto error;
|
||||
}
|
||||
#endif
|
||||
|
||||
for (i = 0; i < path_list->core_list->size; i++)
|
||||
{
|
||||
@@ -1851,6 +1836,12 @@ static core_info_list_t *core_info_list_new(const char *path,
|
||||
if (info_cache)
|
||||
{
|
||||
core_info_copy(info_cache, info);
|
||||
/* Core path is 'dynamic', and cannot
|
||||
* be cached (i.e. core directory may
|
||||
* change between runs) */
|
||||
if (info->path)
|
||||
free(info->path);
|
||||
info->path = strdup(base_path);
|
||||
/* Core lock status is 'dynamic', and
|
||||
* cannot be cached */
|
||||
info->is_locked = core_info_path_is_locked(path_list->lock_list,
|
||||
|
||||
@@ -13,7 +13,7 @@ struct BaseConnectionUnix : public BaseConnection {
|
||||
int sock{-1};
|
||||
};
|
||||
|
||||
static BaseConnectionUnix Connection;
|
||||
static BaseConnectionUnix ConnectionUnix;
|
||||
static sockaddr_un PipeAddr{};
|
||||
#ifdef MSG_NOSIGNAL
|
||||
static int MsgFlags = MSG_NOSIGNAL;
|
||||
@@ -34,7 +34,7 @@ static const char* GetTempPath(void)
|
||||
/*static*/ BaseConnection* BaseConnection::Create()
|
||||
{
|
||||
PipeAddr.sun_family = AF_UNIX;
|
||||
return &Connection;
|
||||
return &ConnectionUnix;
|
||||
}
|
||||
|
||||
/*static*/ void BaseConnection::Destroy(BaseConnection*& c)
|
||||
|
||||
@@ -384,8 +384,18 @@ static void frontend_darwin_get_env(int *argc, char *argv[],
|
||||
sizeof(g_defaults.dirs[DEFAULT_DIR_SHADER]));
|
||||
#endif
|
||||
#ifdef HAVE_UPDATE_CORES
|
||||
#if defined(__aarch64__)
|
||||
#define LRCORES_ARCH "_aarch64"
|
||||
#elif defined(__x86_64__)
|
||||
#define LRCORES_ARCH "_x64"
|
||||
#elif defined(__i386__) || defined(__i486__) || defined(__i686__)
|
||||
#define LRCORES_ARCH "_x86"
|
||||
#else
|
||||
#define LRCORES_ARCH "_ppc"
|
||||
#endif
|
||||
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE],
|
||||
home_dir_buf, "cores", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
|
||||
home_dir_buf, "cores" LRCORES_ARCH, sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
|
||||
#undef LRCORES_ARCH
|
||||
#else
|
||||
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CORE],
|
||||
bundle_path_buf, "modules", sizeof(g_defaults.dirs[DEFAULT_DIR_CORE]));
|
||||
|
||||
@@ -306,6 +306,29 @@ static bool win32_display_server_set_resolution(void *data,
|
||||
return true;
|
||||
}
|
||||
|
||||
/* Display resolution list qsort helper function */
|
||||
static int resolution_list_qsort_func(
|
||||
const video_display_config_t *a, const video_display_config_t *b)
|
||||
{
|
||||
char str_a[64];
|
||||
char str_b[64];
|
||||
|
||||
if (!a || !b)
|
||||
return 0;
|
||||
|
||||
snprintf(str_a, sizeof(str_a), "%04dx%04d (%d Hz)",
|
||||
a->width,
|
||||
a->height,
|
||||
a->refreshrate);
|
||||
|
||||
snprintf(str_b, sizeof(str_b), "%04dx%04d (%d Hz)",
|
||||
b->width,
|
||||
b->height,
|
||||
b->refreshrate);
|
||||
|
||||
return strcasecmp(str_a, str_b);
|
||||
}
|
||||
|
||||
static void *win32_display_server_get_resolution_list(
|
||||
void *data, unsigned *len)
|
||||
{
|
||||
@@ -380,6 +403,12 @@ static void *win32_display_server_get_resolution_list(
|
||||
j++;
|
||||
}
|
||||
|
||||
qsort(
|
||||
conf, count,
|
||||
sizeof(video_display_config_t),
|
||||
(int (*)(const void *, const void *))
|
||||
resolution_list_qsort_func);
|
||||
|
||||
return conf;
|
||||
}
|
||||
|
||||
|
||||
@@ -1144,8 +1144,6 @@ void gfx_display_draw_keyboard(
|
||||
0.00, 0.00, 0.00, 0.85,
|
||||
0.00, 0.00, 0.00, 0.85,
|
||||
};
|
||||
struct video_coords coords;
|
||||
gfx_display_ctx_draw_t draw;
|
||||
math_matrix_4x4 mymat;
|
||||
gfx_display_ctx_rotate_draw_t rotate_draw;
|
||||
rotate_draw.matrix = &mymat;
|
||||
@@ -1155,12 +1153,6 @@ void gfx_display_draw_keyboard(
|
||||
rotate_draw.scale_z = 1;
|
||||
rotate_draw.scale_enable = true;
|
||||
|
||||
coords.vertices = 4;
|
||||
coords.vertex = NULL;
|
||||
coords.tex_coord = NULL;
|
||||
coords.lut_tex_coord = NULL;
|
||||
coords.color = (const float*)&white[0];
|
||||
|
||||
gfx_display_draw_quad(
|
||||
p_disp,
|
||||
userdata,
|
||||
@@ -1183,9 +1175,6 @@ void gfx_display_draw_keyboard(
|
||||
|
||||
gfx_display_rotate_z(p_disp, &rotate_draw, userdata);
|
||||
|
||||
draw.coords = &coords;
|
||||
draw.matrix_data = &mymat;
|
||||
|
||||
for (i = 0; i < 44; i++)
|
||||
{
|
||||
int line_y = (i / 11) * video_height / 10.0;
|
||||
|
||||
@@ -664,14 +664,19 @@ FONTS
|
||||
/*============================================================
|
||||
INPUT
|
||||
============================================================ */
|
||||
|
||||
#include "../input/input_driver.c"
|
||||
#include "../input/input_keymaps.c"
|
||||
#include "../tasks/task_autodetect.c"
|
||||
#include "../input/input_autodetect_builtin.c"
|
||||
|
||||
#ifdef HAVE_BLISSBOX
|
||||
#include "../tasks/task_autodetect_blissbox.c"
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_AUDIOMIXER
|
||||
#include "../tasks/task_audio_mixer.c"
|
||||
#endif
|
||||
#include "../input/input_keymaps.c"
|
||||
|
||||
#ifdef HAVE_OVERLAY
|
||||
#include "../led/drivers/led_overlay.c"
|
||||
@@ -689,8 +694,6 @@ INPUT
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include "../input/input_autodetect_builtin.c"
|
||||
|
||||
#if defined(SN_TARGET_PSP2) || defined(PSP) || defined(VITA)
|
||||
#include "../input/drivers/psp_input.c"
|
||||
#include "../input/drivers_joypad/psp_joypad.c"
|
||||
|
||||
@@ -385,12 +385,12 @@ static void android_input_poll_main_cmd(void)
|
||||
video_driver_unset_stub_frame();
|
||||
|
||||
if (enable_accelerometer)
|
||||
input_sensor_set_state(0,
|
||||
input_set_sensor_state(0,
|
||||
RETRO_SENSOR_ACCELEROMETER_ENABLE,
|
||||
android_app->accelerometer_event_rate);
|
||||
|
||||
if (enable_gyroscope)
|
||||
input_sensor_set_state(0,
|
||||
input_set_sensor_state(0,
|
||||
RETRO_SENSOR_GYROSCOPE_ENABLE,
|
||||
android_app->gyroscope_event_rate);
|
||||
}
|
||||
@@ -415,12 +415,12 @@ static void android_input_poll_main_cmd(void)
|
||||
|
||||
/* Avoid draining battery while app is not being used. */
|
||||
if (disable_accelerometer)
|
||||
input_sensor_set_state(0,
|
||||
input_set_sensor_state(0,
|
||||
RETRO_SENSOR_ACCELEROMETER_DISABLE,
|
||||
android_app->accelerometer_event_rate);
|
||||
|
||||
if (disable_gyroscope)
|
||||
input_sensor_set_state(0,
|
||||
input_set_sensor_state(0,
|
||||
RETRO_SENSOR_GYROSCOPE_DISABLE,
|
||||
android_app->gyroscope_event_rate);
|
||||
}
|
||||
|
||||
@@ -96,7 +96,7 @@ enum udev_input_dev_type
|
||||
/* NOTE: must be in sync with enum udev_input_dev_type */
|
||||
static const char *g_dev_type_str[] =
|
||||
{
|
||||
"ID_INPUT_KEYBOARD",
|
||||
"ID_INPUT_KEY",
|
||||
"ID_INPUT_MOUSE",
|
||||
"ID_INPUT_TOUCHPAD"
|
||||
};
|
||||
|
||||
@@ -876,9 +876,12 @@ static int16_t winraw_input_state(
|
||||
if (!check_pos && idx > 0) /* idx = 0 has mouse fallback. */
|
||||
return 0;
|
||||
|
||||
x = mouse->x;
|
||||
y = mouse->y;
|
||||
pointer_down = mouse->btn_l;
|
||||
if (mouse)
|
||||
{
|
||||
x = mouse->x;
|
||||
y = mouse->y;
|
||||
pointer_down = mouse->btn_l;
|
||||
}
|
||||
|
||||
if (check_pos)
|
||||
{
|
||||
|
||||
@@ -174,13 +174,6 @@ enum input_turbo_default_button
|
||||
INPUT_TURBO_DEFAULT_BUTTON_LAST
|
||||
};
|
||||
|
||||
enum input_action
|
||||
{
|
||||
INPUT_ACTION_NONE = 0,
|
||||
INPUT_ACTION_AXIS_THRESHOLD,
|
||||
INPUT_ACTION_MAX_USERS
|
||||
};
|
||||
|
||||
/* Specialized _MOUSE that targets the full screen regardless of viewport.
|
||||
*/
|
||||
#define RARCH_DEVICE_MOUSE_SCREEN (RETRO_DEVICE_MOUSE | 0x10000)
|
||||
|
||||
@@ -0,0 +1,423 @@
|
||||
/**
|
||||
* RetroArch - A frontend for libretro.
|
||||
* Copyright (C) 2010-2014 - Hans-Kristian Arntzen
|
||||
* Copyright (C) 2011-2017 - Daniel De Matteis
|
||||
*
|
||||
* 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 Foundation, 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/>.
|
||||
**/
|
||||
|
||||
#include <string/stdstring.h>
|
||||
|
||||
#include "input_driver.h"
|
||||
|
||||
#include "../retroarch.h"
|
||||
#include "../verbosity.h"
|
||||
#include "../configuration.h"
|
||||
#include "../list_special.h"
|
||||
|
||||
/**************************************/
|
||||
|
||||
static void *input_null_init(const char *joypad_driver) { return (void*)-1; }
|
||||
static void input_null_poll(void *data) { }
|
||||
static int16_t input_null_input_state(
|
||||
void *data,
|
||||
const input_device_driver_t *joypad,
|
||||
const input_device_driver_t *sec_joypad,
|
||||
rarch_joypad_info_t *joypad_info,
|
||||
const struct retro_keybind **retro_keybinds,
|
||||
bool keyboard_mapping_blocked,
|
||||
unsigned port, unsigned device, unsigned index, unsigned id) { return 0; }
|
||||
static void input_null_free(void *data) { }
|
||||
static bool input_null_set_sensor_state(void *data, unsigned port,
|
||||
enum retro_sensor_action action, unsigned rate) { return false; }
|
||||
static float input_null_get_sensor_input(void *data, unsigned port, unsigned id) { return 0.0; }
|
||||
static uint64_t input_null_get_capabilities(void *data) { return 0; }
|
||||
static void input_null_grab_mouse(void *data, bool state) { }
|
||||
static bool input_null_grab_stdin(void *data) { return false; }
|
||||
|
||||
static input_driver_t input_null = {
|
||||
input_null_init,
|
||||
input_null_poll,
|
||||
input_null_input_state,
|
||||
input_null_free,
|
||||
input_null_set_sensor_state,
|
||||
input_null_get_sensor_input,
|
||||
input_null_get_capabilities,
|
||||
"null",
|
||||
input_null_grab_mouse,
|
||||
input_null_grab_stdin
|
||||
};
|
||||
|
||||
static input_device_driver_t null_joypad = {
|
||||
NULL, /* init */
|
||||
NULL, /* query_pad */
|
||||
NULL, /* destroy */
|
||||
NULL, /* button */
|
||||
NULL, /* state */
|
||||
NULL, /* get_buttons */
|
||||
NULL, /* axis */
|
||||
NULL, /* poll */
|
||||
NULL,
|
||||
NULL, /* name */
|
||||
"null",
|
||||
};
|
||||
|
||||
|
||||
#ifdef HAVE_HID
|
||||
static bool null_hid_joypad_query(void *data, unsigned pad) {
|
||||
return pad < MAX_USERS; }
|
||||
static const char *null_hid_joypad_name(
|
||||
void *data, unsigned pad) { return NULL; }
|
||||
static void null_hid_joypad_get_buttons(void *data,
|
||||
unsigned port, input_bits_t *state) { BIT256_CLEAR_ALL_PTR(state); }
|
||||
static int16_t null_hid_joypad_button(
|
||||
void *data, unsigned port, uint16_t joykey) { return 0; }
|
||||
static bool null_hid_joypad_rumble(void *data, unsigned pad,
|
||||
enum retro_rumble_effect effect, uint16_t strength) { return false; }
|
||||
static int16_t null_hid_joypad_axis(
|
||||
void *data, unsigned port, uint32_t joyaxis) { return 0; }
|
||||
static void *null_hid_init(void) { return (void*)-1; }
|
||||
static void null_hid_free(const void *data) { }
|
||||
static void null_hid_poll(void *data) { }
|
||||
static int16_t null_hid_joypad_state(
|
||||
void *data,
|
||||
rarch_joypad_info_t *joypad_info,
|
||||
const void *binds_data,
|
||||
unsigned port) { return 0; }
|
||||
|
||||
static hid_driver_t null_hid = {
|
||||
null_hid_init, /* init */
|
||||
null_hid_joypad_query, /* joypad_query */
|
||||
null_hid_free, /* free */
|
||||
null_hid_joypad_button, /* button */
|
||||
null_hid_joypad_state, /* state */
|
||||
null_hid_joypad_get_buttons, /* get_buttons */
|
||||
null_hid_joypad_axis, /* axis */
|
||||
null_hid_poll, /* poll */
|
||||
null_hid_joypad_rumble, /* rumble */
|
||||
null_hid_joypad_name, /* joypad_name */
|
||||
"null",
|
||||
};
|
||||
#endif
|
||||
|
||||
input_device_driver_t *joypad_drivers[] = {
|
||||
#ifdef HAVE_XINPUT
|
||||
&xinput_joypad,
|
||||
#endif
|
||||
#ifdef GEKKO
|
||||
&gx_joypad,
|
||||
#endif
|
||||
#ifdef WIIU
|
||||
&wiiu_joypad,
|
||||
#endif
|
||||
#ifdef _XBOX1
|
||||
&xdk_joypad,
|
||||
#endif
|
||||
#if defined(ORBIS)
|
||||
&ps4_joypad,
|
||||
#endif
|
||||
#if defined(__PSL1GHT__) || defined(__PS3__)
|
||||
&ps3_joypad,
|
||||
#endif
|
||||
#if defined(PSP) || defined(VITA)
|
||||
&psp_joypad,
|
||||
#endif
|
||||
#if defined(PS2)
|
||||
&ps2_joypad,
|
||||
#endif
|
||||
#ifdef _3DS
|
||||
&ctr_joypad,
|
||||
#endif
|
||||
#ifdef SWITCH
|
||||
&switch_joypad,
|
||||
#endif
|
||||
#ifdef HAVE_DINPUT
|
||||
&dinput_joypad,
|
||||
#endif
|
||||
#ifdef HAVE_UDEV
|
||||
&udev_joypad,
|
||||
#endif
|
||||
#if defined(__linux) && !defined(ANDROID)
|
||||
&linuxraw_joypad,
|
||||
#endif
|
||||
#ifdef HAVE_PARPORT
|
||||
&parport_joypad,
|
||||
#endif
|
||||
#ifdef ANDROID
|
||||
&android_joypad,
|
||||
#endif
|
||||
#if defined(HAVE_SDL) || defined(HAVE_SDL2)
|
||||
&sdl_joypad,
|
||||
#endif
|
||||
#if defined(DINGUX) && defined(HAVE_SDL_DINGUX)
|
||||
&sdl_dingux_joypad,
|
||||
#endif
|
||||
#ifdef __QNX__
|
||||
&qnx_joypad,
|
||||
#endif
|
||||
#ifdef HAVE_MFI
|
||||
&mfi_joypad,
|
||||
#endif
|
||||
#ifdef DJGPP
|
||||
&dos_joypad,
|
||||
#endif
|
||||
/* Selecting the HID gamepad driver disables the Wii U gamepad. So while
|
||||
* we want the HID code to be compiled & linked, we don't want the driver
|
||||
* to be selectable in the UI. */
|
||||
#if defined(HAVE_HID) && !defined(WIIU)
|
||||
&hid_joypad,
|
||||
#endif
|
||||
#ifdef EMSCRIPTEN
|
||||
&rwebpad_joypad,
|
||||
#endif
|
||||
&null_joypad,
|
||||
NULL,
|
||||
};
|
||||
|
||||
input_driver_t *input_drivers[] = {
|
||||
#ifdef ORBIS
|
||||
&input_ps4,
|
||||
#endif
|
||||
#if defined(__PSL1GHT__) || defined(__PS3__)
|
||||
&input_ps3,
|
||||
#endif
|
||||
#if defined(SN_TARGET_PSP2) || defined(PSP) || defined(VITA)
|
||||
&input_psp,
|
||||
#endif
|
||||
#if defined(PS2)
|
||||
&input_ps2,
|
||||
#endif
|
||||
#if defined(_3DS)
|
||||
&input_ctr,
|
||||
#endif
|
||||
#if defined(SWITCH)
|
||||
&input_switch,
|
||||
#endif
|
||||
#if defined(HAVE_SDL) || defined(HAVE_SDL2)
|
||||
&input_sdl,
|
||||
#endif
|
||||
#if defined(DINGUX) && defined(HAVE_SDL_DINGUX)
|
||||
&input_sdl_dingux,
|
||||
#endif
|
||||
#ifdef HAVE_DINPUT
|
||||
&input_dinput,
|
||||
#endif
|
||||
#ifdef HAVE_X11
|
||||
&input_x,
|
||||
#endif
|
||||
#ifdef __WINRT__
|
||||
&input_uwp,
|
||||
#endif
|
||||
#ifdef XENON
|
||||
&input_xenon360,
|
||||
#endif
|
||||
#if defined(HAVE_XINPUT2) || defined(HAVE_XINPUT_XBOX1) || defined(__WINRT__)
|
||||
&input_xinput,
|
||||
#endif
|
||||
#ifdef GEKKO
|
||||
&input_gx,
|
||||
#endif
|
||||
#ifdef WIIU
|
||||
&input_wiiu,
|
||||
#endif
|
||||
#ifdef ANDROID
|
||||
&input_android,
|
||||
#endif
|
||||
#ifdef HAVE_UDEV
|
||||
&input_udev,
|
||||
#endif
|
||||
#if defined(__linux__) && !defined(ANDROID)
|
||||
&input_linuxraw,
|
||||
#endif
|
||||
#if defined(HAVE_COCOA) || defined(HAVE_COCOATOUCH) || defined(HAVE_COCOA_METAL)
|
||||
&input_cocoa,
|
||||
#endif
|
||||
#ifdef __QNX__
|
||||
&input_qnx,
|
||||
#endif
|
||||
#ifdef EMSCRIPTEN
|
||||
&input_rwebinput,
|
||||
#endif
|
||||
#ifdef DJGPP
|
||||
&input_dos,
|
||||
#endif
|
||||
#if defined(_WIN32) && !defined(_XBOX) && _WIN32_WINNT >= 0x0501 && !defined(__WINRT__)
|
||||
#ifdef HAVE_WINRAWINPUT
|
||||
/* winraw only available since XP */
|
||||
&input_winraw,
|
||||
#endif
|
||||
#endif
|
||||
&input_null,
|
||||
NULL,
|
||||
};
|
||||
|
||||
#ifdef HAVE_HID
|
||||
hid_driver_t *hid_drivers[] = {
|
||||
#if defined(HAVE_BTSTACK)
|
||||
&btstack_hid,
|
||||
#endif
|
||||
#if defined(__APPLE__) && defined(HAVE_IOHIDMANAGER)
|
||||
&iohidmanager_hid,
|
||||
#endif
|
||||
#if defined(HAVE_LIBUSB) && defined(HAVE_THREADS)
|
||||
&libusb_hid,
|
||||
#endif
|
||||
#ifdef HW_RVL
|
||||
&wiiusb_hid,
|
||||
#endif
|
||||
&null_hid,
|
||||
NULL,
|
||||
};
|
||||
#endif
|
||||
|
||||
/**************************************/
|
||||
|
||||
/* private function prototypes */
|
||||
|
||||
static const input_device_driver_t *input_joypad_init_first(void *data);
|
||||
|
||||
|
||||
/**************************************/
|
||||
|
||||
bool input_driver_set_rumble(
|
||||
input_driver_state_t *driver_state, 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 (!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_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 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds first suitable joypad driver and initializes. Used as a fallback by
|
||||
* input_joypad_init_driver when no matching driver is found.
|
||||
*
|
||||
* @param data joypad state data pointer, which can be NULL and will be
|
||||
* initialized by the new joypad driver, if one is found.
|
||||
*
|
||||
* @return joypad driver if found and initialized, otherwise NULL.
|
||||
**/
|
||||
static const input_device_driver_t *input_joypad_init_first(void *data)
|
||||
{
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; joypad_drivers[i]; i++)
|
||||
{
|
||||
if ( joypad_drivers[i]
|
||||
&& 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 NULL;
|
||||
}
|
||||
@@ -22,8 +22,6 @@
|
||||
#include <stddef.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#include "input_types.h"
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif /* HAVE_CONFIG_H */
|
||||
@@ -35,11 +33,13 @@
|
||||
#include <retro_miscellaneous.h>
|
||||
|
||||
#include "input_defines.h"
|
||||
#include "input_types.h"
|
||||
|
||||
#include "../msg_hash.h"
|
||||
#include "include/hid_types.h"
|
||||
#include "include/hid_driver.h"
|
||||
#include "include/gamepad.h"
|
||||
#include "../configuration.h"
|
||||
|
||||
RETRO_BEGIN_DECLS
|
||||
|
||||
@@ -279,6 +279,21 @@ struct rarch_joypad_driver
|
||||
const char *ident;
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* 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 */
|
||||
|
||||
/* primitives */
|
||||
bool nonblocking_flag;
|
||||
} input_driver_state_t;
|
||||
|
||||
|
||||
void input_driver_init_joypads(void);
|
||||
|
||||
/**
|
||||
* Get an enumerated list of all input driver names
|
||||
*
|
||||
@@ -287,73 +302,48 @@ struct rarch_joypad_driver
|
||||
const char* config_get_input_driver_options(void);
|
||||
|
||||
/**
|
||||
* Sets the rumble state. Used by RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE.
|
||||
* Sets the rumble state.
|
||||
*
|
||||
* @param port User number.
|
||||
* @param effect Rumble effect.
|
||||
* @param strength Strength of rumble effect.
|
||||
* @param driver_state
|
||||
* @param port User number.
|
||||
* @param joy_idx
|
||||
* @param effect Rumble effect.
|
||||
* @param strength Strength of rumble effect.
|
||||
*
|
||||
* @return true if the rumble state has been successfully set
|
||||
**/
|
||||
bool input_driver_set_rumble_state(unsigned port,
|
||||
enum retro_rumble_effect effect, uint16_t strength);
|
||||
bool input_driver_set_rumble(
|
||||
input_driver_state_t *driver_state, unsigned port, unsigned joy_idx,
|
||||
enum retro_rumble_effect effect, uint16_t strength);
|
||||
|
||||
/**
|
||||
* Sets the sensor state. Used by RETRO_ENVIRONMENT_GET_SENSOR_INTERFACE.
|
||||
* Sets the sensor state.
|
||||
*
|
||||
* @param driver_state
|
||||
* @param port
|
||||
* @param effect Sensor action
|
||||
* @param rate Sensor rate update
|
||||
* @param sensors_enable
|
||||
* @param effect Sensor action
|
||||
* @param rate Sensor rate update
|
||||
*
|
||||
* @return true if the sensor state has been successfully set
|
||||
**/
|
||||
bool input_sensor_set_state(unsigned port,
|
||||
enum retro_sensor_action action, unsigned rate);
|
||||
bool input_driver_set_sensor(
|
||||
input_driver_state_t *driver_state, 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 id Sensor ID
|
||||
* @param sensors_enable
|
||||
* @param id Sensor ID
|
||||
*
|
||||
* @return The current state associated with the port and ID as a float
|
||||
**/
|
||||
float input_sensor_get_input(unsigned port, unsigned id);
|
||||
|
||||
/**
|
||||
* Retrieves the input driver state struct
|
||||
*
|
||||
* @return The input state struct
|
||||
**/
|
||||
void *input_driver_get_data(void);
|
||||
|
||||
/**
|
||||
* Sets the input_driver_nonblock_state flag to true
|
||||
**/
|
||||
void input_driver_set_nonblock_state(void);
|
||||
|
||||
/**
|
||||
* Sets the input_driver_nonblock_state flag to false
|
||||
**/
|
||||
void input_driver_unset_nonblock_state(void);
|
||||
|
||||
/**
|
||||
* If the action is INPUT_ACTION_AXIS_THRESHOLD, return the current
|
||||
* input_driver_axis_threshold.
|
||||
*
|
||||
* @return value of input_driver_axis_threshold or NULL for actions other than
|
||||
* INPUT_ACTION_AXIS_THRESHOLD
|
||||
**/
|
||||
float *input_driver_get_float(enum input_action action);
|
||||
|
||||
/**
|
||||
* If the action is INPUT_ACTION_MAX_USERS, return the current
|
||||
* input_driver_max_users.
|
||||
*
|
||||
* @return value of input_driver_axis_threshold or NULL for actions other than
|
||||
* INPUT_ACTION_AXIS_THRESHOLD
|
||||
**/
|
||||
unsigned *input_driver_get_uint(enum input_action action);
|
||||
float input_driver_get_sensor(
|
||||
input_driver_state_t *driver_state,
|
||||
unsigned port, bool sensors_enable, unsigned id);
|
||||
|
||||
/**
|
||||
* Get an enumerated list of all joypad driver names
|
||||
@@ -367,6 +357,8 @@ const char* config_get_joypad_driver_options(void);
|
||||
* zero-length string, equivalent to calling input_joypad_init_first().
|
||||
*
|
||||
* @param ident identifier of driver to initialize.
|
||||
* @param data joypad state data pointer, which can be NULL and will be
|
||||
* initialized by the new joypad driver, if one is found.
|
||||
*
|
||||
* @return The joypad driver if found, otherwise NULL.
|
||||
**/
|
||||
@@ -728,28 +720,11 @@ void input_config_reset(void);
|
||||
#define DEFAULT_MAX_PADS 16
|
||||
#endif /* defined(ANDROID) */
|
||||
|
||||
extern input_device_driver_t dinput_joypad;
|
||||
extern input_device_driver_t linuxraw_joypad;
|
||||
extern input_device_driver_t parport_joypad;
|
||||
extern input_device_driver_t udev_joypad;
|
||||
extern input_device_driver_t xinput_joypad;
|
||||
extern input_device_driver_t sdl_joypad;
|
||||
extern input_device_driver_t sdl_dingux_joypad;
|
||||
extern input_device_driver_t ps4_joypad;
|
||||
extern input_device_driver_t ps3_joypad;
|
||||
extern input_device_driver_t psp_joypad;
|
||||
extern input_device_driver_t ps2_joypad;
|
||||
extern input_device_driver_t ctr_joypad;
|
||||
extern input_device_driver_t switch_joypad;
|
||||
extern input_device_driver_t xdk_joypad;
|
||||
extern input_device_driver_t gx_joypad;
|
||||
extern input_device_driver_t wiiu_joypad;
|
||||
extern input_device_driver_t hid_joypad;
|
||||
extern input_device_driver_t android_joypad;
|
||||
extern input_device_driver_t qnx_joypad;
|
||||
extern input_device_driver_t mfi_joypad;
|
||||
extern input_device_driver_t dos_joypad;
|
||||
extern input_device_driver_t rwebpad_joypad;
|
||||
extern input_device_driver_t *joypad_drivers[];
|
||||
extern input_driver_t *input_drivers[];
|
||||
#ifdef HAVE_HID
|
||||
extern hid_driver_t *hid_drivers[];
|
||||
#endif
|
||||
|
||||
extern input_driver_t input_android;
|
||||
extern input_driver_t input_sdl;
|
||||
@@ -776,6 +751,29 @@ extern input_driver_t input_dos;
|
||||
extern input_driver_t input_winraw;
|
||||
extern input_driver_t input_wayland;
|
||||
|
||||
extern input_device_driver_t dinput_joypad;
|
||||
extern input_device_driver_t linuxraw_joypad;
|
||||
extern input_device_driver_t parport_joypad;
|
||||
extern input_device_driver_t udev_joypad;
|
||||
extern input_device_driver_t xinput_joypad;
|
||||
extern input_device_driver_t sdl_joypad;
|
||||
extern input_device_driver_t sdl_dingux_joypad;
|
||||
extern input_device_driver_t ps4_joypad;
|
||||
extern input_device_driver_t ps3_joypad;
|
||||
extern input_device_driver_t psp_joypad;
|
||||
extern input_device_driver_t ps2_joypad;
|
||||
extern input_device_driver_t ctr_joypad;
|
||||
extern input_device_driver_t switch_joypad;
|
||||
extern input_device_driver_t xdk_joypad;
|
||||
extern input_device_driver_t gx_joypad;
|
||||
extern input_device_driver_t wiiu_joypad;
|
||||
extern input_device_driver_t hid_joypad;
|
||||
extern input_device_driver_t android_joypad;
|
||||
extern input_device_driver_t qnx_joypad;
|
||||
extern input_device_driver_t mfi_joypad;
|
||||
extern input_device_driver_t dos_joypad;
|
||||
extern input_device_driver_t rwebpad_joypad;
|
||||
|
||||
#ifdef HAVE_HID
|
||||
extern hid_driver_t iohidmanager_hid;
|
||||
extern hid_driver_t btstack_hid;
|
||||
|
||||
@@ -220,7 +220,7 @@ enum winraw_scancodes {
|
||||
SC_LAUNCH_MEDIA = 0xE06D,
|
||||
|
||||
SC_PAUSE = 0xFFFE/*0xE11D45*/,
|
||||
SC_LAST = 0xFFFF,
|
||||
SC_LAST = 0xFFFF
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
@@ -1322,6 +1322,10 @@ MSG_HASH(
|
||||
MENU_ENUM_LABEL_CORE_OPTIONS_RESET,
|
||||
"core_options_reset"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_CORE_OPTIONS_FLUSH,
|
||||
"core_options_flush"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS_CREATE,
|
||||
"game_specific_options_create"
|
||||
@@ -4070,6 +4074,10 @@ MSG_HASH(
|
||||
MENU_ENUM_LABEL_QUICK_MENU_SHOW_OPTIONS,
|
||||
"quick_menu_show_options"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH,
|
||||
"quick_menu_show_core_options_flush"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_QUICK_MENU_SHOW_CONTROLS,
|
||||
"quick_menu_show_controls"
|
||||
|
||||
@@ -1502,6 +1502,10 @@ MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_VIDEO_GPU_INDEX,
|
||||
"GPU Index"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_VIDEO_GPU_INDEX,
|
||||
"Select which graphics card to use."
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_VIDEO_REFRESH_RATE,
|
||||
"Vertical Refresh Rate"
|
||||
@@ -1691,7 +1695,7 @@ MSG_HASH(
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_VIDEO_ASPECT_RATIO,
|
||||
"Floating point value for video aspect ratio (width / height), used if the Aspect Ratio is set to 'Custom Aspect Ratio'."
|
||||
"Floating point value for video aspect ratio (width / height), used if 'Aspect Ratio' is set to 'Config'."
|
||||
)
|
||||
#if defined(DINGUX)
|
||||
MSG_HASH(
|
||||
@@ -1849,6 +1853,10 @@ MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_MENU_SOUNDS,
|
||||
"Menu Sounds"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_MENU_SOUNDS,
|
||||
"Change menu sound settings."
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_AUDIO_MUTE,
|
||||
"Mute"
|
||||
@@ -4561,6 +4569,14 @@ MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_QUICK_MENU_SHOW_OPTIONS,
|
||||
"Show the 'Options' option."
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH,
|
||||
"Show 'Flush Options to Disk'"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH,
|
||||
"Show the 'Flush Options to Disk' entry in the 'Options > Manage Core Options' menu."
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_QUICK_MENU_SHOW_CONTROLS,
|
||||
"Show 'Controls'"
|
||||
@@ -6486,6 +6502,14 @@ MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_CORE_OPTIONS_RESET,
|
||||
"Set all core options to default values."
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_CORE_OPTIONS_FLUSH,
|
||||
"Flush Options to Disk"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_CORE_OPTIONS_FLUSH,
|
||||
"Force current settings to be written to active options file. Ensures options are preserved in the event that a core bug causes improper shutdown of the frontend."
|
||||
)
|
||||
|
||||
/* - Legacy (unused) */
|
||||
MSG_HASH(
|
||||
@@ -10944,6 +10968,14 @@ MSG_HASH(
|
||||
MSG_CORE_OPTIONS_RESET,
|
||||
"All core options reset to default."
|
||||
)
|
||||
MSG_HASH(
|
||||
MSG_CORE_OPTIONS_FLUSHED,
|
||||
"Core options saved to:"
|
||||
)
|
||||
MSG_HASH(
|
||||
MSG_CORE_OPTIONS_FLUSH_FAILED,
|
||||
"Failed to save core options to:"
|
||||
)
|
||||
MSG_HASH(
|
||||
MSG_COULD_NOT_FIND_ANY_NEXT_DRIVER,
|
||||
"Could not find any next driver"
|
||||
@@ -12142,6 +12174,10 @@ MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION,
|
||||
"Screen Resolution"
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_SUBLABEL_SCREEN_RESOLUTION,
|
||||
"Select display mode."
|
||||
)
|
||||
MSG_HASH(
|
||||
MENU_ENUM_LABEL_VALUE_SHUTDOWN,
|
||||
"Shutdown"
|
||||
|
||||
@@ -85,16 +85,81 @@ typedef struct rarch_sinc_resampler
|
||||
float kaiser_beta;
|
||||
} rarch_sinc_resampler_t;
|
||||
|
||||
#if (defined(__ARM_NEON__) && !defined(DONT_WANT_ARM_ASM_OPTIMIZATIONS)) || defined(HAVE_NEON)
|
||||
#if TARGET_OS_IPHONE
|
||||
#else
|
||||
#ifndef WANT_NEON
|
||||
#define WANT_NEON
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#if (defined(__ARM_NEON__) || defined(HAVE_NEON))
|
||||
#ifdef DONT_WANT_ARM_ASM_OPTIMIZATIONS
|
||||
#include <arm_neon.h>
|
||||
|
||||
#ifdef WANT_NEON
|
||||
/* Assumes that taps >= 8, and that taps is a multiple of 8. */
|
||||
static void resampler_sinc_process_neon_intrin(void *re_, struct resampler_data *data)
|
||||
{
|
||||
rarch_sinc_resampler_t *resamp = (rarch_sinc_resampler_t*)re_;
|
||||
unsigned phases = 1 << (resamp->phase_bits + resamp->subphase_bits);
|
||||
|
||||
uint32_t ratio = phases / data->ratio;
|
||||
const float *input = data->data_in;
|
||||
float *output = data->data_out;
|
||||
size_t frames = data->input_frames;
|
||||
size_t out_frames = 0;
|
||||
|
||||
while (frames)
|
||||
{
|
||||
while (resamp->time >= phases)
|
||||
{
|
||||
/* Push in reverse to make filter more obvious. */
|
||||
if (!resamp->ptr)
|
||||
resamp->ptr = resamp->taps;
|
||||
resamp->ptr--;
|
||||
|
||||
resamp->buffer_l[resamp->ptr + resamp->taps] =
|
||||
resamp->buffer_l[resamp->ptr] = *input++;
|
||||
|
||||
resamp->buffer_r[resamp->ptr + resamp->taps] =
|
||||
resamp->buffer_r[resamp->ptr] = *input++;
|
||||
|
||||
resamp->time -= phases;
|
||||
frames--;
|
||||
}
|
||||
|
||||
{
|
||||
const float *buffer_l = resamp->buffer_l + resamp->ptr;
|
||||
const float *buffer_r = resamp->buffer_r + resamp->ptr;
|
||||
unsigned taps = resamp->taps;
|
||||
while (resamp->time < phases)
|
||||
{
|
||||
int i;
|
||||
unsigned phase = resamp->time >> resamp->subphase_bits;
|
||||
const float *phase_table = resamp->phase_table + phase * taps;
|
||||
|
||||
float32x4_t p1 = {0, 0, 0, 0}, p2 = {0, 0, 0, 0};
|
||||
float32x2_t p3, p4;
|
||||
|
||||
for (i = 0; i < taps; i += 8)
|
||||
{
|
||||
float32x4x2_t coeff8 = vld2q_f32(&phase_table[i]);
|
||||
float32x4x2_t left8 = vld2q_f32(&buffer_l[i]);
|
||||
float32x4x2_t right8 = vld2q_f32(&buffer_r[i]);
|
||||
|
||||
p1 = vmlaq_f32(p1, left8.val[0], coeff8.val[0]);
|
||||
p2 = vmlaq_f32(p2, right8.val[0], coeff8.val[0]);
|
||||
p1 = vmlaq_f32(p1, left8.val[1], coeff8.val[1]);
|
||||
p2 = vmlaq_f32(p2, right8.val[1], coeff8.val[1]);
|
||||
}
|
||||
|
||||
p3 = vadd_f32(vget_low_f32(p1), vget_high_f32(p1));
|
||||
p4 = vadd_f32(vget_low_f32(p2), vget_high_f32(p2));
|
||||
vst1_f32(output, vpadd_f32(p3, p4));
|
||||
|
||||
|
||||
output += 2;
|
||||
out_frames++;
|
||||
resamp->time += ratio;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
data->output_frames = out_frames;
|
||||
}
|
||||
#else
|
||||
/* Assumes that taps >= 8, and that taps is a multiple of 8. */
|
||||
void process_sinc_neon_asm(float *out, const float *left,
|
||||
const float *right, const float *coeff, unsigned taps);
|
||||
@@ -150,6 +215,7 @@ static void resampler_sinc_process_neon(void *re_, struct resampler_data *data)
|
||||
data->output_frames = out_frames;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(__AVX__)
|
||||
static void resampler_sinc_process_avx_kaiser(void *re_, struct resampler_data *data)
|
||||
@@ -844,7 +910,7 @@ static void *resampler_sinc_new(const struct resampler_config *config,
|
||||
else
|
||||
#endif
|
||||
{
|
||||
#if defined(WANT_NEON)
|
||||
#if (defined(__ARM_NEON__) || defined(HAVE_NEON))
|
||||
re->taps = (re->taps + 7) & ~7;
|
||||
#else
|
||||
re->taps = (re->taps + 3) & ~3;
|
||||
@@ -902,8 +968,12 @@ static void *resampler_sinc_new(const struct resampler_config *config,
|
||||
}
|
||||
else if (mask & RESAMPLER_SIMD_NEON && window_type != SINC_WINDOW_KAISER)
|
||||
{
|
||||
#if defined(WANT_NEON)
|
||||
#if (defined(__ARM_NEON__) || defined(HAVE_NEON))
|
||||
#ifdef DONT_WANT_ARM_ASM_OPTIMIZATIONS
|
||||
sinc_resampler.process = resampler_sinc_process_neon_intrin;
|
||||
#else
|
||||
sinc_resampler.process = resampler_sinc_process_neon;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -922,5 +992,3 @@ retro_resampler_t sinc_resampler = {
|
||||
"sinc",
|
||||
"sinc"
|
||||
};
|
||||
|
||||
#undef WANT_NEON
|
||||
@@ -300,7 +300,7 @@ int rmsgpack_write_int(RFILE *fd, int64_t value)
|
||||
}
|
||||
else if (value >= -32 && value < 0)
|
||||
{
|
||||
tmpval = (uint8_t)(value + 256); // -32..-1 => 0xE0 .. 0xFF
|
||||
tmpval = (uint8_t)(value + 256); /* -32..-1 => 0xE0 .. 0xFF */
|
||||
if (filestream_write(fd, &tmpval, sizeof(uint8_t)) == -1)
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -5084,6 +5084,13 @@ static int action_ok_core_options_reset(const char *path,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int action_ok_core_options_flush(const char *path,
|
||||
const char *label, unsigned type, size_t idx, size_t entry_idx)
|
||||
{
|
||||
core_options_flush();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int action_ok_close_content(const char *path, const char *label, unsigned type, size_t idx, size_t entry_idx)
|
||||
{
|
||||
int ret;
|
||||
@@ -8437,6 +8444,9 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs,
|
||||
case MENU_SETTING_ACTION_CORE_OPTIONS_RESET:
|
||||
BIND_ACTION_OK(cbs, action_ok_core_options_reset);
|
||||
break;
|
||||
case MENU_SETTING_ACTION_CORE_OPTIONS_FLUSH:
|
||||
BIND_ACTION_OK(cbs, action_ok_core_options_flush);
|
||||
break;
|
||||
case MENU_SETTING_ITEM_CORE_RESTORE_BACKUP:
|
||||
BIND_ACTION_OK(cbs, action_ok_core_restore_backup);
|
||||
break;
|
||||
|
||||
@@ -370,6 +370,7 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_refresh_rate, MENU_
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_refresh_rate_polled, MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE_POLLED)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_audio_enable, MENU_ENUM_SUBLABEL_AUDIO_ENABLE)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_audio_enable_menu, MENU_ENUM_SUBLABEL_AUDIO_ENABLE_MENU)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_sounds, MENU_ENUM_SUBLABEL_MENU_SOUNDS)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_audio_max_timing_skew, MENU_ENUM_SUBLABEL_AUDIO_MAX_TIMING_SKEW)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_pause_nonactive, MENU_ENUM_SUBLABEL_PAUSE_NONACTIVE)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_disable_composition, MENU_ENUM_SUBLABEL_VIDEO_DISABLE_COMPOSITION)
|
||||
@@ -687,6 +688,7 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_shader_options,
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_core_input_remapping_options, MENU_ENUM_SUBLABEL_CORE_INPUT_REMAPPING_OPTIONS)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_core_option_override_list, MENU_ENUM_SUBLABEL_CORE_OPTION_OVERRIDE_LIST)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_core_options_reset, MENU_ENUM_SUBLABEL_CORE_OPTIONS_RESET)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_core_options_flush, MENU_ENUM_SUBLABEL_CORE_OPTIONS_FLUSH)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_show_advanced_settings, MENU_ENUM_SUBLABEL_SHOW_ADVANCED_SETTINGS)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_threaded_data_runloop_enable, MENU_ENUM_SUBLABEL_THREADED_DATA_RUNLOOP_ENABLE)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_playlist_entry_rename, MENU_ENUM_SUBLABEL_PLAYLIST_ENTRY_RENAME)
|
||||
@@ -769,6 +771,7 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_quick_menu_show_start_streaming,
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_quick_menu_show_set_core_association, MENU_ENUM_SUBLABEL_QUICK_MENU_SHOW_SET_CORE_ASSOCIATION)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_quick_menu_show_reset_core_association,MENU_ENUM_SUBLABEL_QUICK_MENU_SHOW_RESET_CORE_ASSOCIATION)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_quick_menu_show_options, MENU_ENUM_SUBLABEL_QUICK_MENU_SHOW_OPTIONS)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_quick_menu_show_core_options_flush, MENU_ENUM_SUBLABEL_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_quick_menu_show_controls, MENU_ENUM_SUBLABEL_QUICK_MENU_SHOW_CONTROLS)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_quick_menu_show_shaders, MENU_ENUM_SUBLABEL_QUICK_MENU_SHOW_SHADERS)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_content_show_overlays, MENU_ENUM_SUBLABEL_CONTENT_SHOW_OVERLAYS)
|
||||
@@ -880,6 +883,8 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_dingux_refresh_rate,
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_dingux_rs90_softfilter_type, MENU_ENUM_SUBLABEL_VIDEO_DINGUX_RS90_SOFTFILTER_TYPE)
|
||||
#endif
|
||||
#endif
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_screen_resolution, MENU_ENUM_SUBLABEL_SCREEN_RESOLUTION)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_gpu_index, MENU_ENUM_SUBLABEL_VIDEO_GPU_INDEX)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_viewport_custom_height, MENU_ENUM_SUBLABEL_VIDEO_VIEWPORT_CUSTOM_HEIGHT)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_viewport_custom_width, MENU_ENUM_SUBLABEL_VIDEO_VIEWPORT_CUSTOM_WIDTH)
|
||||
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_video_viewport_custom_x, MENU_ENUM_SUBLABEL_VIDEO_VIEWPORT_CUSTOM_X)
|
||||
@@ -1984,6 +1989,12 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_materialui_thumbnail_background_enable);
|
||||
#endif
|
||||
break;
|
||||
case MENU_ENUM_LABEL_SCREEN_RESOLUTION:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_screen_resolution);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_VIDEO_GPU_INDEX:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_gpu_index);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_HEIGHT:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_viewport_custom_height);
|
||||
break;
|
||||
@@ -2355,6 +2366,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
|
||||
case MENU_ENUM_LABEL_QUICK_MENU_SHOW_OPTIONS:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_quick_menu_show_options);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_quick_menu_show_core_options_flush);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_QUICK_MENU_SHOW_CONTROLS:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_quick_menu_show_controls);
|
||||
break;
|
||||
@@ -2657,6 +2671,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
|
||||
case MENU_ENUM_LABEL_CORE_OPTIONS_RESET:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_core_options_reset);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_CORE_OPTIONS_FLUSH:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_core_options_flush);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_core_input_remapping_options);
|
||||
break;
|
||||
@@ -3532,6 +3549,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
|
||||
case MENU_ENUM_LABEL_AUDIO_ENABLE_MENU:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_audio_enable_menu);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_MENU_SOUNDS:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_sounds);
|
||||
break;
|
||||
case MENU_ENUM_LABEL_VIDEO_REFRESH_RATE:
|
||||
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_video_refresh_rate);
|
||||
break;
|
||||
|
||||
@@ -10068,6 +10068,10 @@ static void materialui_list_insert(
|
||||
node->icon_texture_index = MUI_TEXTURE_UNDO_SAVE_STATE;
|
||||
node->icon_type = MUI_ICON_TYPE_INTERNAL;
|
||||
break;
|
||||
case MENU_SETTING_ACTION_CORE_OPTIONS_FLUSH:
|
||||
node->icon_texture_index = MUI_TEXTURE_FILE;
|
||||
node->icon_type = MUI_ICON_TYPE_INTERNAL;
|
||||
break;
|
||||
case FILE_TYPE_RPL_ENTRY:
|
||||
case MENU_SETTING_DROPDOWN_ITEM:
|
||||
case MENU_SETTING_DROPDOWN_ITEM_RESOLUTION:
|
||||
|
||||
@@ -259,6 +259,8 @@ uintptr_t ozone_entries_icon_get_texture(ozone_handle_t *ozone,
|
||||
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_CLOSE];
|
||||
case MENU_ENUM_LABEL_CORE_OPTIONS_RESET:
|
||||
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_UNDO];
|
||||
case MENU_ENUM_LABEL_CORE_OPTIONS_FLUSH:
|
||||
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_FILE];
|
||||
case MENU_ENUM_LABEL_CORE_LOCK:
|
||||
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_CORE];
|
||||
case MENU_ENUM_LABEL_ONSCREEN_DISPLAY_SETTINGS:
|
||||
|
||||
@@ -2778,6 +2778,8 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
|
||||
return xmb->textures.list[XMB_TEXTURE_CLOSE];
|
||||
case MENU_ENUM_LABEL_CORE_OPTIONS_RESET:
|
||||
return xmb->textures.list[XMB_TEXTURE_UNDO];
|
||||
case MENU_ENUM_LABEL_CORE_OPTIONS_FLUSH:
|
||||
return xmb->textures.list[XMB_TEXTURE_FILE];
|
||||
case MENU_ENUM_LABEL_CORE_LOCK:
|
||||
return xmb->textures.list[XMB_TEXTURE_CORE];
|
||||
case MENU_ENUM_LABEL_ONSCREEN_DISPLAY_SETTINGS:
|
||||
|
||||
@@ -1026,13 +1026,15 @@ end:
|
||||
}
|
||||
|
||||
static unsigned menu_displaylist_parse_core_option_override_list(
|
||||
menu_displaylist_info_t *info)
|
||||
menu_displaylist_info_t *info, settings_t *settings)
|
||||
{
|
||||
unsigned count = 0;
|
||||
bool core_has_options = !rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL) &&
|
||||
unsigned count = 0;
|
||||
bool core_has_options = !rarch_ctl(RARCH_CTL_IS_DUMMY_CORE, NULL) &&
|
||||
rarch_ctl(RARCH_CTL_HAS_CORE_OPTIONS, NULL);
|
||||
bool game_options_active = rarch_ctl(RARCH_CTL_IS_GAME_OPTIONS_ACTIVE, NULL);
|
||||
bool folder_options_active = rarch_ctl(RARCH_CTL_IS_FOLDER_OPTIONS_ACTIVE, NULL);
|
||||
bool game_options_active = rarch_ctl(RARCH_CTL_IS_GAME_OPTIONS_ACTIVE, NULL);
|
||||
bool folder_options_active = rarch_ctl(RARCH_CTL_IS_FOLDER_OPTIONS_ACTIVE, NULL);
|
||||
bool show_core_options_flush = settings ?
|
||||
settings->bools.quick_menu_show_core_options_flush : false;
|
||||
|
||||
/* Sanity check - cannot handle core option
|
||||
* overrides if:
|
||||
@@ -1087,14 +1089,25 @@ static unsigned menu_displaylist_parse_core_option_override_list(
|
||||
MENU_SETTING_ACTION_FOLDER_SPECIFIC_CORE_OPTIONS_REMOVE, 0, 0))
|
||||
count++;
|
||||
end:
|
||||
/* Reset core options */
|
||||
if (core_has_options)
|
||||
{
|
||||
/* Flush core options to disk */
|
||||
if (show_core_options_flush)
|
||||
if (menu_entries_append_enum(info->list,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_OPTIONS_FLUSH),
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_CORE_OPTIONS_FLUSH),
|
||||
MENU_ENUM_LABEL_CORE_OPTIONS_FLUSH,
|
||||
MENU_SETTING_ACTION_CORE_OPTIONS_FLUSH, 0, 0))
|
||||
count++;
|
||||
|
||||
/* Reset core options */
|
||||
if (menu_entries_append_enum(info->list,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_OPTIONS_RESET),
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_CORE_OPTIONS_RESET),
|
||||
MENU_ENUM_LABEL_CORE_OPTIONS_RESET,
|
||||
MENU_SETTING_ACTION_CORE_OPTIONS_RESET, 0, 0))
|
||||
count++;
|
||||
}
|
||||
|
||||
/* Fallback, in case we open this menu while running
|
||||
* a core without options */
|
||||
@@ -5987,58 +6000,62 @@ unsigned menu_displaylist_build_list(
|
||||
count++;
|
||||
break;
|
||||
case DISPLAYLIST_AUDIO_SETTINGS_LIST:
|
||||
{
|
||||
bool audio_mute_enable = *audio_get_bool_ptr(AUDIO_ACTION_MUTE_ENABLE);
|
||||
bool audio_mixer_mute_enable= *audio_get_bool_ptr(AUDIO_ACTION_MIXER_MUTE_ENABLE);
|
||||
menu_displaylist_build_info_selective_t build_list[] = {
|
||||
{MENU_ENUM_LABEL_AUDIO_OUTPUT_SETTINGS, PARSE_ACTION, true },
|
||||
{MENU_ENUM_LABEL_AUDIO_RESAMPLER_SETTINGS, PARSE_ACTION, true },
|
||||
{MENU_ENUM_LABEL_AUDIO_SYNCHRONIZATION_SETTINGS, PARSE_ACTION, true },
|
||||
{MENU_ENUM_LABEL_MIDI_SETTINGS, PARSE_ACTION, true },
|
||||
{MENU_ENUM_LABEL_AUDIO_MIXER_SETTINGS, PARSE_ACTION, false },
|
||||
{MENU_ENUM_LABEL_MENU_SOUNDS, PARSE_ACTION, true },
|
||||
{MENU_ENUM_LABEL_AUDIO_MUTE, PARSE_ONLY_BOOL, true },
|
||||
{MENU_ENUM_LABEL_AUDIO_MIXER_MUTE, PARSE_ONLY_BOOL, true },
|
||||
{MENU_ENUM_LABEL_AUDIO_FASTFORWARD_MUTE, PARSE_ONLY_BOOL, true },
|
||||
{MENU_ENUM_LABEL_AUDIO_VOLUME, PARSE_ONLY_FLOAT, false },
|
||||
{MENU_ENUM_LABEL_AUDIO_MIXER_VOLUME, PARSE_ONLY_FLOAT, false },
|
||||
{MENU_ENUM_LABEL_SYSTEM_BGM_ENABLE, PARSE_ONLY_BOOL, true },
|
||||
#ifdef HAVE_DSP_FILTER
|
||||
{MENU_ENUM_LABEL_AUDIO_DSP_PLUGIN, PARSE_ONLY_PATH, true },
|
||||
{
|
||||
bool audio_mute_enable = *audio_get_bool_ptr(AUDIO_ACTION_MUTE_ENABLE);
|
||||
#if defined(HAVE_AUDIOMIXER)
|
||||
bool audio_mixer_mute_enable = *audio_get_bool_ptr(AUDIO_ACTION_MIXER_MUTE_ENABLE);
|
||||
#else
|
||||
bool audio_mixer_mute_enable = true;
|
||||
#endif
|
||||
};
|
||||
menu_displaylist_build_info_selective_t build_list[] = {
|
||||
{MENU_ENUM_LABEL_AUDIO_OUTPUT_SETTINGS, PARSE_ACTION, true },
|
||||
{MENU_ENUM_LABEL_AUDIO_RESAMPLER_SETTINGS, PARSE_ACTION, true },
|
||||
{MENU_ENUM_LABEL_AUDIO_SYNCHRONIZATION_SETTINGS, PARSE_ACTION, true },
|
||||
{MENU_ENUM_LABEL_MIDI_SETTINGS, PARSE_ACTION, true },
|
||||
{MENU_ENUM_LABEL_AUDIO_MIXER_SETTINGS, PARSE_ACTION, false },
|
||||
{MENU_ENUM_LABEL_MENU_SOUNDS, PARSE_ACTION, true },
|
||||
{MENU_ENUM_LABEL_AUDIO_MUTE, PARSE_ONLY_BOOL, true },
|
||||
{MENU_ENUM_LABEL_AUDIO_MIXER_MUTE, PARSE_ONLY_BOOL, true },
|
||||
{MENU_ENUM_LABEL_AUDIO_FASTFORWARD_MUTE, PARSE_ONLY_BOOL, true },
|
||||
{MENU_ENUM_LABEL_AUDIO_VOLUME, PARSE_ONLY_FLOAT, false },
|
||||
{MENU_ENUM_LABEL_AUDIO_MIXER_VOLUME, PARSE_ONLY_FLOAT, false },
|
||||
{MENU_ENUM_LABEL_SYSTEM_BGM_ENABLE, PARSE_ONLY_BOOL, true },
|
||||
#if defined(HAVE_DSP_FILTER)
|
||||
{MENU_ENUM_LABEL_AUDIO_DSP_PLUGIN, PARSE_ONLY_PATH, true },
|
||||
#endif
|
||||
};
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(build_list); i++)
|
||||
{
|
||||
switch (build_list[i].enum_idx)
|
||||
{
|
||||
case MENU_ENUM_LABEL_AUDIO_VOLUME:
|
||||
if (!audio_mute_enable)
|
||||
build_list[i].checked = true;
|
||||
break;
|
||||
case MENU_ENUM_LABEL_AUDIO_MIXER_VOLUME:
|
||||
case MENU_ENUM_LABEL_AUDIO_MIXER_SETTINGS:
|
||||
if (!audio_mixer_mute_enable)
|
||||
build_list[i].checked = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (i = 0; i < ARRAY_SIZE(build_list); i++)
|
||||
{
|
||||
switch (build_list[i].enum_idx)
|
||||
{
|
||||
case MENU_ENUM_LABEL_AUDIO_VOLUME:
|
||||
if (!audio_mute_enable)
|
||||
build_list[i].checked = true;
|
||||
break;
|
||||
case MENU_ENUM_LABEL_AUDIO_MIXER_VOLUME:
|
||||
case MENU_ENUM_LABEL_AUDIO_MIXER_SETTINGS:
|
||||
if (!audio_mixer_mute_enable)
|
||||
build_list[i].checked = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(build_list); i++)
|
||||
{
|
||||
if (!build_list[i].checked && !include_everything)
|
||||
continue;
|
||||
for (i = 0; i < ARRAY_SIZE(build_list); i++)
|
||||
{
|
||||
if (!build_list[i].checked && !include_everything)
|
||||
continue;
|
||||
|
||||
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list,
|
||||
build_list[i].enum_idx, build_list[i].parse_type,
|
||||
false) == 0)
|
||||
count++;
|
||||
}
|
||||
}
|
||||
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list,
|
||||
build_list[i].enum_idx, build_list[i].parse_type,
|
||||
false) == 0)
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef HAVE_DSP_FILTER
|
||||
#if defined(HAVE_DSP_FILTER)
|
||||
if (!string_is_empty(settings->paths.path_audio_dsp_plugin))
|
||||
if (menu_entries_append_enum(list,
|
||||
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_AUDIO_DSP_PLUGIN_REMOVE),
|
||||
@@ -6153,7 +6170,7 @@ unsigned menu_displaylist_build_list(
|
||||
case DISPLAYLIST_OPTIONS_REMAPPINGS:
|
||||
{
|
||||
unsigned p;
|
||||
unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
|
||||
unsigned max_users = settings->uints.input_max_users;
|
||||
|
||||
#ifdef HAVE_CONFIGFILE
|
||||
if (menu_entries_append_enum(list,
|
||||
@@ -6489,7 +6506,7 @@ unsigned menu_displaylist_build_list(
|
||||
|
||||
{
|
||||
unsigned user;
|
||||
unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
|
||||
unsigned max_users = settings->uints.input_max_users;
|
||||
for (user = 0; user < max_users; user++)
|
||||
{
|
||||
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list,
|
||||
@@ -7246,7 +7263,7 @@ unsigned menu_displaylist_build_list(
|
||||
|
||||
{
|
||||
unsigned user;
|
||||
unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
|
||||
unsigned max_users = settings->uints.input_max_users;
|
||||
for (user = 0; user < max_users; user++)
|
||||
{
|
||||
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list,
|
||||
@@ -7770,6 +7787,17 @@ unsigned menu_displaylist_build_list(
|
||||
MENU_ENUM_LABEL_VIDEO_DRIVER,
|
||||
PARSE_ONLY_STRING_OPTIONS, false) == 0)
|
||||
count++;
|
||||
|
||||
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list,
|
||||
MENU_ENUM_LABEL_VIDEO_GPU_INDEX,
|
||||
PARSE_ONLY_INT, false) == 0)
|
||||
count++;
|
||||
|
||||
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list,
|
||||
MENU_ENUM_LABEL_VIDEO_MONITOR_INDEX,
|
||||
PARSE_ONLY_UINT, false) == 0)
|
||||
count++;
|
||||
|
||||
#if defined(GEKKO) || !defined(__PSL1GHT__) && defined(__PS3__)
|
||||
if (true)
|
||||
#else
|
||||
@@ -7799,10 +7827,6 @@ unsigned menu_displaylist_build_list(
|
||||
MENU_ENUM_LABEL_VIDEO_FILTER_FLICKER,
|
||||
PARSE_ONLY_UINT, false) == 0)
|
||||
count++;
|
||||
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list,
|
||||
MENU_ENUM_LABEL_VIDEO_MONITOR_INDEX,
|
||||
PARSE_ONLY_UINT, false) == 0)
|
||||
count++;
|
||||
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list,
|
||||
MENU_ENUM_LABEL_VIDEO_ROTATION,
|
||||
PARSE_ONLY_UINT, false) == 0)
|
||||
@@ -7813,10 +7837,6 @@ unsigned menu_displaylist_build_list(
|
||||
MENU_ENUM_LABEL_SCREEN_ORIENTATION,
|
||||
PARSE_ONLY_UINT, false) == 0)
|
||||
count++;
|
||||
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list,
|
||||
MENU_ENUM_LABEL_VIDEO_GPU_INDEX,
|
||||
PARSE_ONLY_INT, false) == 0)
|
||||
count++;
|
||||
#if defined(DINGUX) && defined(DINGUX_BETA)
|
||||
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(list,
|
||||
MENU_ENUM_LABEL_VIDEO_DINGUX_REFRESH_RATE,
|
||||
@@ -8889,6 +8909,7 @@ unsigned menu_displaylist_build_list(
|
||||
{MENU_ENUM_LABEL_QUICK_MENU_SHOW_SET_CORE_ASSOCIATION, PARSE_ONLY_BOOL},
|
||||
{MENU_ENUM_LABEL_QUICK_MENU_SHOW_RESET_CORE_ASSOCIATION, PARSE_ONLY_BOOL},
|
||||
{MENU_ENUM_LABEL_QUICK_MENU_SHOW_OPTIONS, PARSE_ONLY_BOOL},
|
||||
{MENU_ENUM_LABEL_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH, PARSE_ONLY_BOOL},
|
||||
{MENU_ENUM_LABEL_QUICK_MENU_SHOW_CONTROLS, PARSE_ONLY_BOOL},
|
||||
{MENU_ENUM_LABEL_QUICK_MENU_SHOW_CHEATS, PARSE_ONLY_BOOL},
|
||||
};
|
||||
@@ -9398,11 +9419,15 @@ static unsigned menu_displaylist_build_shader_parameter(
|
||||
unsigned setting_type)
|
||||
{
|
||||
video_shader_ctx_t shader_info;
|
||||
float current_value = 0.0f;
|
||||
float current_value = 0.0f;
|
||||
float original_value = 0.0f;
|
||||
unsigned count = 0;
|
||||
float min = 0;
|
||||
float max = 0;
|
||||
float min = 0.0f;
|
||||
float max = 0.0f;
|
||||
float half_step = 0.0f;
|
||||
unsigned i = 0;
|
||||
unsigned checked = 0;
|
||||
bool checked_found = false;
|
||||
struct video_shader_parameter *param = NULL;
|
||||
unsigned offset = entry_type - _offset;
|
||||
|
||||
@@ -9414,7 +9439,9 @@ static unsigned menu_displaylist_build_shader_parameter(
|
||||
|
||||
min = param->minimum;
|
||||
max = param->maximum;
|
||||
half_step = param->step * 0.5f;
|
||||
current_value = min;
|
||||
original_value = param->current;
|
||||
|
||||
for (i = 0; current_value < (max + 0.0001f); i++)
|
||||
{
|
||||
@@ -9428,11 +9455,28 @@ static unsigned menu_displaylist_build_shader_parameter(
|
||||
MENU_ENUM_LABEL_NO_ITEMS,
|
||||
setting_type,
|
||||
i, entry_type))
|
||||
{
|
||||
if (!checked_found &&
|
||||
(fabs(current_value - original_value) < half_step))
|
||||
{
|
||||
checked = count;
|
||||
checked_found = true;
|
||||
}
|
||||
|
||||
count++;
|
||||
}
|
||||
|
||||
current_value += param->step;
|
||||
}
|
||||
|
||||
if (checked_found)
|
||||
{
|
||||
menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*)info->list->list[checked].actiondata;
|
||||
if (cbs)
|
||||
cbs->checked = true;
|
||||
menu_navigation_set_selection(checked);
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
@@ -9741,7 +9785,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
|
||||
break;
|
||||
case DISPLAYLIST_OPTIONS_REMAPPINGS_PORT:
|
||||
{
|
||||
unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
|
||||
unsigned max_users = settings->uints.input_max_users;
|
||||
const char *menu_driver = menu_driver_ident();
|
||||
bool is_rgui = string_is_equal(menu_driver, "rgui");
|
||||
file_list_t *list = info->list;
|
||||
@@ -11434,7 +11478,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
|
||||
size_t selection = menu_navigation_get_selection();
|
||||
|
||||
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
|
||||
count = menu_displaylist_parse_core_option_override_list(info);
|
||||
count = menu_displaylist_parse_core_option_override_list(info, settings);
|
||||
|
||||
if (selection >= count)
|
||||
{
|
||||
|
||||
@@ -244,6 +244,7 @@ enum menu_settings_type
|
||||
MENU_SETTING_ACTION_FOLDER_SPECIFIC_CORE_OPTIONS_CREATE,
|
||||
MENU_SETTING_ACTION_FOLDER_SPECIFIC_CORE_OPTIONS_REMOVE,
|
||||
MENU_SETTING_ACTION_CORE_OPTIONS_RESET,
|
||||
MENU_SETTING_ACTION_CORE_OPTIONS_FLUSH,
|
||||
|
||||
MENU_SETTINGS_LAST
|
||||
};
|
||||
|
||||
@@ -340,7 +340,53 @@ static void menu_input_st_uint_cb(void *userdata, const char *str)
|
||||
const char *label = menu_input_dialog_get_label_setting_buffer();
|
||||
rarch_setting_t *setting = menu_setting_find(label);
|
||||
|
||||
setting_set_with_string_representation(setting, str);
|
||||
const char *ptr = NULL;
|
||||
unsigned value = 0;
|
||||
int chars_read = 0;
|
||||
int ret = 0;
|
||||
bool minus_found = false;
|
||||
|
||||
/* Ensure that input string contains a valid
|
||||
* unsigned value
|
||||
* Note: sscanf() will accept negative number
|
||||
* strings here and overflow, so have to check
|
||||
* for minus characters first... */
|
||||
for (ptr = str; *ptr != '\0'; ptr++)
|
||||
{
|
||||
if (*ptr == '-')
|
||||
{
|
||||
minus_found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!minus_found)
|
||||
ret = sscanf(str, "%u %n", &value, &chars_read);
|
||||
|
||||
if ((ret == 1) && !str[chars_read])
|
||||
setting_set_with_string_representation(setting, str);
|
||||
}
|
||||
|
||||
menu_input_dialog_end();
|
||||
}
|
||||
|
||||
static void menu_input_st_int_cb(void *userdata, const char *str)
|
||||
{
|
||||
if (str && *str)
|
||||
{
|
||||
const char *label = menu_input_dialog_get_label_setting_buffer();
|
||||
rarch_setting_t *setting = menu_setting_find(label);
|
||||
|
||||
int value = 0;
|
||||
int chars_read = 0;
|
||||
int ret = 0;
|
||||
|
||||
/* Ensure that input string contains a valid
|
||||
* unsigned value */
|
||||
ret = sscanf(str, "%d %n", &value, &chars_read);
|
||||
|
||||
if ((ret == 1) && !str[chars_read])
|
||||
setting_set_with_string_representation(setting, str);
|
||||
}
|
||||
|
||||
menu_input_dialog_end();
|
||||
@@ -399,6 +445,28 @@ static void menu_input_st_hex_cb(void *userdata, const char *str)
|
||||
menu_input_dialog_end();
|
||||
}
|
||||
|
||||
static void menu_input_st_float_cb(void *userdata, const char *str)
|
||||
{
|
||||
if (str && *str)
|
||||
{
|
||||
const char *label = menu_input_dialog_get_label_setting_buffer();
|
||||
rarch_setting_t *setting = menu_setting_find(label);
|
||||
|
||||
float value = 0.0f;
|
||||
int chars_read = 0;
|
||||
int ret = 0;
|
||||
|
||||
/* Ensure that input string contains a valid
|
||||
* floating point value */
|
||||
ret = sscanf(str, "%f %n", &value, &chars_read);
|
||||
|
||||
if ((ret == 1) && !str[chars_read])
|
||||
setting_set_with_string_representation(setting, str);
|
||||
}
|
||||
|
||||
menu_input_dialog_end();
|
||||
}
|
||||
|
||||
static void menu_input_st_string_cb(void *userdata, const char *str)
|
||||
{
|
||||
if (str && *str)
|
||||
@@ -437,9 +505,15 @@ static int setting_generic_action_ok_linefeed(
|
||||
case ST_UINT:
|
||||
cb = menu_input_st_uint_cb;
|
||||
break;
|
||||
case ST_INT:
|
||||
cb = menu_input_st_int_cb;
|
||||
break;
|
||||
case ST_HEX:
|
||||
cb = menu_input_st_hex_cb;
|
||||
break;
|
||||
case ST_FLOAT:
|
||||
cb = menu_input_st_float_cb;
|
||||
break;
|
||||
case ST_STRING:
|
||||
case ST_STRING_OPTIONS:
|
||||
cb = menu_input_st_string_cb;
|
||||
@@ -477,9 +551,15 @@ static void setting_add_special_callbacks(
|
||||
case ST_UINT:
|
||||
(*list)[idx].action_cancel = NULL;
|
||||
break;
|
||||
case ST_INT:
|
||||
(*list)[idx].action_cancel = NULL;
|
||||
break;
|
||||
case ST_HEX:
|
||||
(*list)[idx].action_cancel = NULL;
|
||||
break;
|
||||
case ST_FLOAT:
|
||||
(*list)[idx].action_cancel = NULL;
|
||||
break;
|
||||
case ST_STRING:
|
||||
(*list)[idx].action_start = setting_string_action_start_generic;
|
||||
(*list)[idx].action_cancel = NULL;
|
||||
@@ -5532,8 +5612,8 @@ static int setting_uint_action_left_custom_viewport_width(
|
||||
|
||||
video_driver_get_viewport_info(&vp);
|
||||
|
||||
if (custom->width <= 1)
|
||||
custom->width = 1;
|
||||
if (custom->width <= setting->min)
|
||||
custom->width = setting->min;
|
||||
else if (settings->bools.video_scale_integer)
|
||||
{
|
||||
unsigned int rotation = retroarch_get_rotation();
|
||||
@@ -5551,8 +5631,8 @@ static int setting_uint_action_left_custom_viewport_width(
|
||||
else
|
||||
custom->width -= 1;
|
||||
|
||||
aspectratio_lut[ASPECT_RATIO_CUSTOM].value =
|
||||
(float)custom->width / custom->height;
|
||||
/* aspectratio_lut[ASPECT_RATIO_CUSTOM].value
|
||||
* is updated in general_write_handler() */
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -5572,8 +5652,8 @@ static int setting_uint_action_left_custom_viewport_height(
|
||||
|
||||
video_driver_get_viewport_info(&vp);
|
||||
|
||||
if (custom->height <= 1)
|
||||
custom->height = 1;
|
||||
if (custom->height <= setting->min)
|
||||
custom->height = setting->min;
|
||||
else if (settings->bools.video_scale_integer)
|
||||
{
|
||||
unsigned int rotation = retroarch_get_rotation();
|
||||
@@ -5591,8 +5671,8 @@ static int setting_uint_action_left_custom_viewport_height(
|
||||
else
|
||||
custom->height -= 1;
|
||||
|
||||
aspectratio_lut[ASPECT_RATIO_CUSTOM].value =
|
||||
(float)custom->width / custom->height;
|
||||
/* aspectratio_lut[ASPECT_RATIO_CUSTOM].value
|
||||
* is updated in general_write_handler() */
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -5815,7 +5895,9 @@ static int setting_uint_action_right_custom_viewport_width(
|
||||
|
||||
video_driver_get_viewport_info(&vp);
|
||||
|
||||
if (settings->bools.video_scale_integer)
|
||||
if (custom->width >= setting->max)
|
||||
custom->width = setting->max;
|
||||
else if (settings->bools.video_scale_integer)
|
||||
{
|
||||
unsigned int rotation = retroarch_get_rotation();
|
||||
if (rotation % 2)
|
||||
@@ -5826,8 +5908,8 @@ static int setting_uint_action_right_custom_viewport_width(
|
||||
else
|
||||
custom->width += 1;
|
||||
|
||||
aspectratio_lut[ASPECT_RATIO_CUSTOM].value =
|
||||
(float)custom->width / custom->height;
|
||||
/* aspectratio_lut[ASPECT_RATIO_CUSTOM].value
|
||||
* is updated in general_write_handler() */
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -5847,7 +5929,9 @@ static int setting_uint_action_right_custom_viewport_height(
|
||||
|
||||
video_driver_get_viewport_info(&vp);
|
||||
|
||||
if (settings->bools.video_scale_integer)
|
||||
if (custom->height >= setting->max)
|
||||
custom->height = setting->max;
|
||||
else if (settings->bools.video_scale_integer)
|
||||
{
|
||||
unsigned int rotation = retroarch_get_rotation();
|
||||
if (rotation % 2)
|
||||
@@ -5858,8 +5942,8 @@ static int setting_uint_action_right_custom_viewport_height(
|
||||
else
|
||||
custom->height += 1;
|
||||
|
||||
aspectratio_lut[ASPECT_RATIO_CUSTOM].value =
|
||||
(float)custom->width / custom->height;
|
||||
/* aspectratio_lut[ASPECT_RATIO_CUSTOM].value
|
||||
* is updated in general_write_handler() */
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -6961,8 +7045,8 @@ static int setting_action_start_custom_viewport_width(rarch_setting_t *setting)
|
||||
else
|
||||
custom->width = vp.full_width - custom->x;
|
||||
|
||||
aspectratio_lut[ASPECT_RATIO_CUSTOM].value =
|
||||
(float)custom->width / custom->height;
|
||||
/* aspectratio_lut[ASPECT_RATIO_CUSTOM].value
|
||||
* is updated in general_write_handler() */
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -6996,8 +7080,8 @@ static int setting_action_start_custom_viewport_height(rarch_setting_t *setting)
|
||||
else
|
||||
custom->height = vp.full_height - custom->y;
|
||||
|
||||
aspectratio_lut[ASPECT_RATIO_CUSTOM].value =
|
||||
(float)custom->width / custom->height;
|
||||
/* aspectratio_lut[ASPECT_RATIO_CUSTOM].value
|
||||
* is updated in general_write_handler() */
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -7995,11 +8079,11 @@ static void general_write_handler(rarch_setting_t *setting)
|
||||
{
|
||||
/* Event rate does not matter when disabling
|
||||
* sensors - set to zero */
|
||||
input_sensor_set_state(i,
|
||||
input_set_sensor_state(i,
|
||||
RETRO_SENSOR_ACCELEROMETER_DISABLE, 0);
|
||||
input_sensor_set_state(i,
|
||||
input_set_sensor_state(i,
|
||||
RETRO_SENSOR_GYROSCOPE_DISABLE, 0);
|
||||
input_sensor_set_state(i,
|
||||
input_set_sensor_state(i,
|
||||
RETRO_SENSOR_ILLUMINANCE_DISABLE, 0);
|
||||
}
|
||||
}
|
||||
@@ -8048,6 +8132,21 @@ static void general_write_handler(rarch_setting_t *setting)
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_WIDTH:
|
||||
case MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_HEIGHT:
|
||||
{
|
||||
/* Whenever custom viewport dimensions are
|
||||
* changed, ASPECT_RATIO_CUSTOM must be
|
||||
* recalculated */
|
||||
video_viewport_t *custom_vp = video_viewport_get_custom();
|
||||
float default_aspect = aspectratio_lut[ASPECT_RATIO_CORE].value;
|
||||
|
||||
aspectratio_lut[ASPECT_RATIO_CUSTOM].value =
|
||||
(custom_vp && custom_vp->width && custom_vp->height) ?
|
||||
((float)custom_vp->width / (float)custom_vp->height) :
|
||||
default_aspect;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
/* Special cases */
|
||||
|
||||
@@ -9726,11 +9825,6 @@ static bool setting_append_list(
|
||||
#endif
|
||||
for (i = 0; i < ARRAY_SIZE(bool_entries); i++)
|
||||
{
|
||||
#if defined(IOS)
|
||||
if (bool_entries[i].name_enum_idx ==
|
||||
MENU_ENUM_LABEL_CORE_INFO_CACHE_ENABLE)
|
||||
continue;
|
||||
#endif
|
||||
CONFIG_BOOL(
|
||||
list, list_info,
|
||||
bool_entries[i].target,
|
||||
@@ -11067,6 +11161,7 @@ static bool setting_append_list(
|
||||
general_write_handler,
|
||||
general_read_handler);
|
||||
menu_settings_list_current_add_range(list, list_info, 0, 0, 0.001, true, false);
|
||||
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT);
|
||||
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED);
|
||||
|
||||
CONFIG_FLOAT(
|
||||
@@ -11169,7 +11264,7 @@ static bool setting_append_list(
|
||||
&settings->floats.video_aspect_ratio,
|
||||
MENU_ENUM_LABEL_VIDEO_ASPECT_RATIO,
|
||||
MENU_ENUM_LABEL_VALUE_VIDEO_ASPECT_RATIO,
|
||||
1.33,
|
||||
DEFAULT_ASPECT_RATIO,
|
||||
"%.2f",
|
||||
&group_info,
|
||||
&subgroup_info,
|
||||
@@ -11195,10 +11290,8 @@ static bool setting_append_list(
|
||||
general_read_handler);
|
||||
menu_settings_list_current_add_range(list, list_info, -9999, 9999, 1, true, true);
|
||||
(*list)[list_info->index - 1].offset_by = -9999;
|
||||
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
|
||||
MENU_SETTINGS_LIST_CURRENT_ADD_CMD(
|
||||
list,
|
||||
list_info,
|
||||
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT);
|
||||
MENU_SETTINGS_LIST_CURRENT_ADD_CMD(list, list_info,
|
||||
CMD_EVENT_VIDEO_APPLY_STATE_CHANGES);
|
||||
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED);
|
||||
|
||||
@@ -11215,10 +11308,8 @@ static bool setting_append_list(
|
||||
general_read_handler);
|
||||
menu_settings_list_current_add_range(list, list_info, -9999, 9999, 1, true, true);
|
||||
(*list)[list_info->index - 1].offset_by = -9999;
|
||||
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
|
||||
MENU_SETTINGS_LIST_CURRENT_ADD_CMD(
|
||||
list,
|
||||
list_info,
|
||||
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT);
|
||||
MENU_SETTINGS_LIST_CURRENT_ADD_CMD(list, list_info,
|
||||
CMD_EVENT_VIDEO_APPLY_STATE_CHANGES);
|
||||
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED);
|
||||
|
||||
@@ -11248,16 +11339,14 @@ static bool setting_append_list(
|
||||
parent_group,
|
||||
general_write_handler,
|
||||
general_read_handler);
|
||||
menu_settings_list_current_add_range(list, list_info, 0, 0, 1, true, false);
|
||||
menu_settings_list_current_add_range(list, list_info, 1, 9999, 1, true, true);
|
||||
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT);
|
||||
(*list)[list_info->index - 1].get_string_representation =
|
||||
&setting_get_string_representation_uint_custom_viewport_width;
|
||||
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
|
||||
&setting_get_string_representation_uint_custom_viewport_width;
|
||||
(*list)[list_info->index - 1].action_start = &setting_action_start_custom_viewport_width;
|
||||
(*list)[list_info->index - 1].action_left = setting_uint_action_left_custom_viewport_width;
|
||||
(*list)[list_info->index - 1].action_right = setting_uint_action_right_custom_viewport_width;
|
||||
MENU_SETTINGS_LIST_CURRENT_ADD_CMD(
|
||||
list,
|
||||
list_info,
|
||||
(*list)[list_info->index - 1].action_left = &setting_uint_action_left_custom_viewport_width;
|
||||
(*list)[list_info->index - 1].action_right = &setting_uint_action_right_custom_viewport_width;
|
||||
MENU_SETTINGS_LIST_CURRENT_ADD_CMD(list, list_info,
|
||||
CMD_EVENT_VIDEO_APPLY_STATE_CHANGES);
|
||||
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED);
|
||||
|
||||
@@ -11272,16 +11361,14 @@ static bool setting_append_list(
|
||||
parent_group,
|
||||
general_write_handler,
|
||||
general_read_handler);
|
||||
menu_settings_list_current_add_range(list, list_info, 0, 0, 1, true, false);
|
||||
menu_settings_list_current_add_range(list, list_info, 1, 9999, 1, true, true);
|
||||
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_ALLOW_INPUT);
|
||||
(*list)[list_info->index - 1].get_string_representation =
|
||||
&setting_get_string_representation_uint_custom_viewport_height;
|
||||
(*list)[list_info->index - 1].action_ok = &setting_action_ok_uint;
|
||||
&setting_get_string_representation_uint_custom_viewport_height;
|
||||
(*list)[list_info->index - 1].action_start = &setting_action_start_custom_viewport_height;
|
||||
(*list)[list_info->index - 1].action_left = setting_uint_action_left_custom_viewport_height;
|
||||
(*list)[list_info->index - 1].action_right = setting_uint_action_right_custom_viewport_height;
|
||||
MENU_SETTINGS_LIST_CURRENT_ADD_CMD(
|
||||
list,
|
||||
list_info,
|
||||
(*list)[list_info->index - 1].action_left = &setting_uint_action_left_custom_viewport_height;
|
||||
(*list)[list_info->index - 1].action_right = &setting_uint_action_right_custom_viewport_height;
|
||||
MENU_SETTINGS_LIST_CURRENT_ADD_CMD(list, list_info,
|
||||
CMD_EVENT_VIDEO_APPLY_STATE_CHANGES);
|
||||
SETTINGS_DATA_LIST_CURRENT_ADD_FLAGS(list, list_info, SD_FLAG_LAKKA_ADVANCED);
|
||||
|
||||
@@ -12570,7 +12657,7 @@ static bool setting_append_list(
|
||||
|
||||
CONFIG_UINT(
|
||||
list, list_info,
|
||||
input_driver_get_uint(INPUT_ACTION_MAX_USERS),
|
||||
&settings->uints.input_max_users,
|
||||
MENU_ENUM_LABEL_INPUT_MAX_USERS,
|
||||
MENU_ENUM_LABEL_VALUE_INPUT_MAX_USERS,
|
||||
input_max_users,
|
||||
@@ -12996,7 +13083,7 @@ static bool setting_append_list(
|
||||
|
||||
CONFIG_FLOAT(
|
||||
list, list_info,
|
||||
input_driver_get_float(INPUT_ACTION_AXIS_THRESHOLD),
|
||||
&settings->floats.input_axis_threshold,
|
||||
MENU_ENUM_LABEL_INPUT_BUTTON_AXIS_THRESHOLD,
|
||||
MENU_ENUM_LABEL_VALUE_INPUT_BUTTON_AXIS_THRESHOLD,
|
||||
DEFAULT_AXIS_THRESHOLD,
|
||||
@@ -17710,6 +17797,21 @@ static bool setting_append_list(
|
||||
general_read_handler,
|
||||
SD_FLAG_NONE);
|
||||
|
||||
CONFIG_BOOL(
|
||||
list, list_info,
|
||||
&settings->bools.quick_menu_show_core_options_flush,
|
||||
MENU_ENUM_LABEL_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH,
|
||||
MENU_ENUM_LABEL_VALUE_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH,
|
||||
DEFAULT_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH,
|
||||
MENU_ENUM_LABEL_VALUE_OFF,
|
||||
MENU_ENUM_LABEL_VALUE_ON,
|
||||
&group_info,
|
||||
&subgroup_info,
|
||||
parent_group,
|
||||
general_write_handler,
|
||||
general_read_handler,
|
||||
SD_FLAG_NONE);
|
||||
|
||||
CONFIG_BOOL(
|
||||
list, list_info,
|
||||
&settings->bools.quick_menu_show_controls,
|
||||
@@ -18964,7 +19066,7 @@ static bool setting_append_list(
|
||||
/* TODO/FIXME - add enum_idx */
|
||||
|
||||
{
|
||||
unsigned max_users = *(input_driver_get_uint(INPUT_ACTION_MAX_USERS));
|
||||
unsigned max_users = settings->uints.input_max_users;
|
||||
for (user = 0; user < max_users; user++)
|
||||
{
|
||||
char s1[64], s2[64];
|
||||
|
||||
@@ -358,6 +358,8 @@ enum msg_hash_enums
|
||||
MSG_CORE_OPTIONS_FILE_CREATED_SUCCESSFULLY,
|
||||
MSG_CORE_OPTIONS_FILE_REMOVED_SUCCESSFULLY,
|
||||
MSG_CORE_OPTIONS_RESET,
|
||||
MSG_CORE_OPTIONS_FLUSHED,
|
||||
MSG_CORE_OPTIONS_FLUSH_FAILED,
|
||||
MSG_DECOMPRESSION_ALREADY_IN_PROGRESS,
|
||||
MSG_DECOMPRESSION_FAILED,
|
||||
MSG_DISK_EJECTED,
|
||||
@@ -1249,6 +1251,7 @@ enum msg_hash_enums
|
||||
MENU_LABEL(QUICK_MENU_SHOW_SET_CORE_ASSOCIATION),
|
||||
MENU_LABEL(QUICK_MENU_SHOW_RESET_CORE_ASSOCIATION),
|
||||
MENU_LABEL(QUICK_MENU_SHOW_OPTIONS),
|
||||
MENU_LABEL(QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH),
|
||||
MENU_LABEL(QUICK_MENU_SHOW_CONTROLS),
|
||||
MENU_LABEL(QUICK_MENU_SHOW_CHEATS),
|
||||
MENU_LABEL(QUICK_MENU_SHOW_SHADERS),
|
||||
@@ -1753,6 +1756,7 @@ enum msg_hash_enums
|
||||
MENU_LABEL(FOLDER_SPECIFIC_CORE_OPTIONS_REMOVE),
|
||||
MENU_LABEL(CORE_OPTION_OVERRIDE_INFO),
|
||||
MENU_LABEL(CORE_OPTIONS_RESET),
|
||||
MENU_LABEL(CORE_OPTIONS_FLUSH),
|
||||
|
||||
/* Legacy (unused)
|
||||
* > Cannot remove these because they are
|
||||
|
||||
@@ -1452,7 +1452,7 @@ void netplay_sync_post_frame(netplay_t *netplay, bool stalled)
|
||||
if (netplay->catch_up)
|
||||
{
|
||||
netplay->catch_up = false;
|
||||
input_driver_unset_nonblock_state();
|
||||
input_unset_nonblock_state();
|
||||
driver_set_nonblock_state();
|
||||
}
|
||||
return;
|
||||
@@ -1645,7 +1645,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_driver_unset_nonblock_state();
|
||||
input_unset_nonblock_state();
|
||||
driver_set_nonblock_state();
|
||||
}
|
||||
|
||||
@@ -1674,7 +1674,7 @@ void netplay_sync_post_frame(netplay_t *netplay, bool stalled)
|
||||
/* We're definitely falling behind! */
|
||||
netplay->catch_up = true;
|
||||
netplay->catch_up_time = 0;
|
||||
input_driver_set_nonblock_state();
|
||||
input_set_nonblock_state();
|
||||
driver_set_nonblock_state();
|
||||
}
|
||||
else
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
//
|
||||
// Created by Stuart Carnie on 5/10/18.
|
||||
//
|
||||
OTHER_CFLAGS = $(inherited) -DHAVE_RUNAHEAD -DHAVE_GRIFFIN -DHAVE_FLAC -DHAVE_DR_FLAC -DHAVE_DR_MP3 -DHAVE_LROUND -DFLAC__HAS_OGG=0 -DHAVE_CHD -DHAVE_STB_VORBIS -DHAVE_MINIUPNPC -DHAVE_BUILTINMINIUPNPC -DHAVE_UPDATE_ASSETS -DHAVE_UPDATE_CORES -DHAVE_ONLINE_UPDATER -DHAVE_LANGEXTRA -DRC_DISABLE_LUA -DHAVE_CHEEVOS -DHAVE_IMAGEVIEWER -DHAVE_IOHIDMANAGER -DHAVE_STB_FONT -DHAVE_RGUI -DHAVE_MENU -DHAVE_CONFIGFILE -DHAVE_PATCH -DHAVE_DSP_FILTER -DHAVE_VIDEO_FILTER -DHAVE_REWIND -DHAVE_SCREENSHOTS -DHAVE_CHEATS -DHAVE_GFX_WIDGETS -DOSX -DHAVE_CC_RESAMPLER -DHAVE_GLSL -DINLINE=inline -D__LIBRETRO__ -DHAVE_COREAUDIO -DHAVE_DYNAMIC -DHAVE_OVERLAY -DHAVE_ZLIB -DHAVE_RPNG -DHAVE_RJPEG -DHAVE_RBMP -DHAVE_RTGA -DHAVE_NETWORKGAMEPAD -DHAVE_NETWORKING -DHAVE_NETPLAYDISCOVERY -DRARCH_INTERNAL -DHAVE_THREADS -DHAVE_DYLIB -DHAVE_7ZIP -D_7ZIP_ST -DHAVE_MATERIALUI -DHAVE_HID -DHAVE_XMB -DHAVE_SHADERPIPELINE -DHAVE_MMAP -DHAVE_LIBRETRODB -DHAVE_GETOPT_LONG -DHAVE_METAL -DHAVE_COCOA_METAL -DHAVE_SLANG -DHAVE_GLSLANG -DHAVE_BUILTINGLSLANG -DHAVE_SPIRV_CROSS -DWANT_GLSLANG -DENABLE_HLSL -DGLSLANG_OSINCLUDE_UNIX -DMETAL_DEBUG -DHAVE_OPENGL -DHAVE_OZONE -DHAVE_EASTEREGG -DHAVE_GIT_VERSION -DHAVE_COREAUDIO3 -DHAVE_AUDIOMIXER -DHAVE_RWAV -DHAVE_NO_BUILTINZLIB -DHAVE_TRANSLATE -DHAVE_VIDEO_LAYOUT -DHAVE_COMMAND -DHAVE_NETWORK_CMD -DHAVE_ACCESSIBILITY -DHAVE_TRANSLATE
|
||||
OTHER_CFLAGS = $(inherited) -DHAVE_RUNAHEAD -DHAVE_GRIFFIN -DHAVE_FLAC -DHAVE_DR_FLAC -DHAVE_DR_MP3 -DHAVE_LROUND -DFLAC__HAS_OGG=0 -DHAVE_CHD -DHAVE_STB_VORBIS -DHAVE_MINIUPNPC -DHAVE_BUILTINMINIUPNPC -DHAVE_UPDATE_ASSETS -DHAVE_UPDATE_CORES -DHAVE_ONLINE_UPDATER -DHAVE_LANGEXTRA -DRC_DISABLE_LUA -DHAVE_CHEEVOS -DHAVE_IMAGEVIEWER -DHAVE_IOHIDMANAGER -DHAVE_STB_FONT -DHAVE_RGUI -DHAVE_MENU -DHAVE_CONFIGFILE -DHAVE_PATCH -DHAVE_DSP_FILTER -DHAVE_VIDEO_FILTER -DHAVE_REWIND -DHAVE_SCREENSHOTS -DHAVE_CHEATS -DHAVE_GFX_WIDGETS -DOSX -DHAVE_CC_RESAMPLER -DHAVE_GLSL -DINLINE=inline -D__LIBRETRO__ -DHAVE_COREAUDIO -DHAVE_DYNAMIC -DHAVE_OVERLAY -DHAVE_ZLIB -DHAVE_RPNG -DHAVE_RJPEG -DHAVE_RBMP -DHAVE_RTGA -DHAVE_NETWORKGAMEPAD -DHAVE_NETWORKING -DHAVE_NETPLAYDISCOVERY -DRARCH_INTERNAL -DHAVE_THREADS -DHAVE_DYLIB -DHAVE_7ZIP -D_7ZIP_ST -DHAVE_MATERIALUI -DHAVE_HID -DHAVE_XMB -DHAVE_SHADERPIPELINE -DHAVE_MMAP -DHAVE_LIBRETRODB -DHAVE_GETOPT_LONG -DHAVE_METAL -DHAVE_COCOA_METAL -DHAVE_SLANG -DHAVE_GLSLANG -DHAVE_BUILTINGLSLANG -DHAVE_SPIRV_CROSS -DWANT_GLSLANG -DENABLE_HLSL -DGLSLANG_OSINCLUDE_UNIX -DMETAL_DEBUG -DHAVE_OPENGL -DHAVE_OZONE -DHAVE_EASTEREGG -DHAVE_GIT_VERSION -DHAVE_COREAUDIO3 -DHAVE_AUDIOMIXER -DHAVE_RWAV -DHAVE_NO_BUILTINZLIB -DHAVE_TRANSLATE -DHAVE_VIDEO_LAYOUT -DHAVE_COMMAND -DHAVE_NETWORK_CMD -DHAVE_ACCESSIBILITY -DHAVE_TRANSLATE -DHAVE_DISCORD
|
||||
|
||||
SRCBASE = $(SRCROOT)/../..
|
||||
DEPS_DIR = $(SRCBASE)/deps
|
||||
|
||||
@@ -392,6 +392,7 @@
|
||||
"$(SRCROOT)/../../gfx/include",
|
||||
"$(SRCROOT)/../../libretro-common/include",
|
||||
"$(SRCROOT)/../../libretro-common/include/compat/zlib",
|
||||
"$(SRCROOT)/../../deps/discord-rpc/include",
|
||||
"$(SRCROOT)/../../deps/libFLAC/include",
|
||||
"$(SRCROOT)/../../deps/rcheevos/include",
|
||||
"$(SRCROOT)/../../deps/7zip",
|
||||
@@ -434,6 +435,7 @@
|
||||
"$(SRCROOT)/../../gfx/include",
|
||||
"$(SRCROOT)/../../libretro-common/include",
|
||||
"$(SRCROOT)/../../libretro-common/include/compat/zlib",
|
||||
"$(SRCROOT)/../../deps/discord-rpc/include",
|
||||
"$(SRCROOT)/../../deps/libFLAC/include",
|
||||
"$(SRCROOT)/../../deps/rcheevos/include",
|
||||
"$(SRCROOT)/../../deps/7zip",
|
||||
@@ -479,6 +481,7 @@
|
||||
"$(SRCROOT)/../../gfx/include",
|
||||
"$(SRCROOT)/../../libretro-common/include",
|
||||
"$(SRCROOT)/../../libretro-common/include/compat/zlib",
|
||||
"$(SRCROOT)/../../deps/discord-rpc/include",
|
||||
"$(SRCROOT)/../../deps/libFLAC/include",
|
||||
"$(SRCROOT)/../../deps/rcheevos/include",
|
||||
"$(SRCROOT)/../../deps/7zip",
|
||||
@@ -518,6 +521,7 @@
|
||||
"$(SRCROOT)/../../gfx/include",
|
||||
"$(SRCROOT)/../../libretro-common/include",
|
||||
"$(SRCROOT)/../../libretro-common/include/compat/zlib",
|
||||
"$(SRCROOT)/../../deps/discord-rpc/include",
|
||||
"$(SRCROOT)/../../deps/libFLAC/include",
|
||||
"$(SRCROOT)/../../deps/rcheevos/include",
|
||||
"$(SRCROOT)/../../deps/7zip",
|
||||
|
||||
@@ -1814,6 +1814,7 @@
|
||||
"$(SRCBASE)/gfx/include",
|
||||
"$(SRCBASE)/libretro-common/include",
|
||||
"$(SRCBASE)/libretro-common/include/compat/zlib",
|
||||
"$(DEPS_DIR)/discord-rpc/include",
|
||||
"$(DEPS_DIR)/libFLAC/include",
|
||||
"$(DEPS_DIR)/7zip",
|
||||
"$(DEPS_DIR)/rcheevos/include",
|
||||
@@ -1870,6 +1871,7 @@
|
||||
"$(SRCBASE)/gfx/include",
|
||||
"$(SRCBASE)/libretro-common/include",
|
||||
"$(SRCBASE)/libretro-common/include/compat/zlib",
|
||||
"$(DEPS_DIR)/discord-rpc/include",
|
||||
"$(DEPS_DIR)/libFLAC/include",
|
||||
"$(DEPS_DIR)/7zip",
|
||||
"$(DEPS_DIR)/rcheevos/include",
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
*/
|
||||
var BrowserFS = BrowserFS;
|
||||
var afs;
|
||||
var initializationCount = 0;
|
||||
|
||||
function cleanupStorage()
|
||||
{
|
||||
@@ -42,7 +43,7 @@ function idbfsInit()
|
||||
afs = new BrowserFS.FileSystem.InMemory();
|
||||
console.log("WEBPLAYER: error: " + e + " falling back to in-memory filesystem");
|
||||
setupFileSystem("browser");
|
||||
preLoadingComplete();
|
||||
appInitialized();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -54,7 +55,7 @@ function idbfsInit()
|
||||
afs = new BrowserFS.FileSystem.InMemory();
|
||||
console.log("WEBPLAYER: error: " + e + " falling back to in-memory filesystem");
|
||||
setupFileSystem("browser");
|
||||
preLoadingComplete();
|
||||
appInitialized();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -74,9 +75,20 @@ function idbfsSyncComplete()
|
||||
console.log("WEBPLAYER: idbfs setup successful");
|
||||
|
||||
setupFileSystem("browser");
|
||||
preLoadingComplete();
|
||||
appInitialized();
|
||||
}
|
||||
|
||||
function appInitialized()
|
||||
{
|
||||
/* Need to wait for both the file system and the wasm runtime
|
||||
to complete before enabling the Run button. */
|
||||
initializationCount++;
|
||||
if (initializationCount == 2)
|
||||
{
|
||||
preLoadingComplete();
|
||||
}
|
||||
}
|
||||
|
||||
function preLoadingComplete()
|
||||
{
|
||||
/* Make the Preview image clickable to start RetroArch. */
|
||||
@@ -184,6 +196,10 @@ var Module =
|
||||
arguments: ["-v", "--menu"],
|
||||
preRun: [],
|
||||
postRun: [],
|
||||
onRuntimeInitialized: function()
|
||||
{
|
||||
appInitialized();
|
||||
},
|
||||
print: function(text)
|
||||
{
|
||||
console.log(text);
|
||||
|
||||
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 198 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 5.7 KiB |
|
After Width: | Height: | Size: 7.7 KiB |
|
After Width: | Height: | Size: 9.6 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 391 B |
|
After Width: | Height: | Size: 607 B |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 894 B |
|
After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 398 B After Width: | Height: | Size: 391 B |
|
After Width: | Height: | Size: 607 B |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 894 B |
|
Before Width: | Height: | Size: 942 B After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 541 B After Width: | Height: | Size: 391 B |
|
After Width: | Height: | Size: 607 B |
|
After Width: | Height: | Size: 607 B |
|
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 894 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 19 KiB |
|
After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 9.1 KiB After Width: | Height: | Size: 23 KiB |