static int show_advanced_gpu_unai_settings = -1;
#endif
static int show_other_input_settings = -1;
+static float mouse_sensitivity = 1.0f;
static unsigned previous_width = 0;
static unsigned previous_height = 0;
Config.SpuIrq = 1;
}
+#ifdef THREAD_RENDERING
+ var.key = "pcsx_rearmed_gpu_thread_rendering";
+ var.value = NULL;
+
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
+ {
+ if (strcmp(var.value, "disabled") == 0)
+ pl_rearmed_cbs.thread_rendering = THREAD_RENDERING_OFF;
+ else if (strcmp(var.value, "sync") == 0)
+ pl_rearmed_cbs.thread_rendering = THREAD_RENDERING_SYNC;
+ else if (strcmp(var.value, "async") == 0)
+ pl_rearmed_cbs.thread_rendering = THREAD_RENDERING_ASYNC;
+ }
+#endif
+
#ifdef GPU_PEOPS
var.value = NULL;
var.key = "pcsx_rearmed_gpu_peops_odd_even_bit";
pl_rearmed_cbs.gpu_unai.blending = 1;
}
+ var.key = "pcsx_rearmed_gpu_unai_scale_hires";
+ var.value = NULL;
+
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
+ {
+ if (strcmp(var.value, "disabled") == 0)
+ pl_rearmed_cbs.gpu_unai.scale_hires = 0;
+ else if (strcmp(var.value, "enabled") == 0)
+ pl_rearmed_cbs.gpu_unai.scale_hires = 1;
+ }
+
var.key = "pcsx_rearmed_show_gpu_unai_settings";
var.value = NULL;
{
unsigned i;
struct retro_core_option_display option_display;
- char gpu_unai_option[5][40] = {
+ char gpu_unai_option[6][40] = {
"pcsx_rearmed_gpu_unai_blending",
"pcsx_rearmed_gpu_unai_lighting",
"pcsx_rearmed_gpu_unai_fast_lighting",
"pcsx_rearmed_gpu_unai_ilace_force",
- "pcsx_rearmed_gpu_unai_pixel_skip"
+ "pcsx_rearmed_gpu_unai_pixel_skip",
+ "pcsx_rearmed_gpu_unai_scale_hires",
};
option_display.visible = show_advanced_gpu_unai_settings;
- for (i = 0; i < 5; i++)
+ for (i = 0; i < 6; i++)
{
option_display.key = gpu_unai_option[i];
environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY, &option_display);
}
#endif /* NEW_DYNAREC */
+ var.value = NULL;
+ var.key = "pcsx_rearmed_input_sensitivity";
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
+ {
+ mouse_sensitivity = atof(var.value);
+ }
+
var.key = "pcsx_rearmed_show_other_input_settings";
var.value = NULL;
//RETRO_DEVICE_ID_LIGHTGUN_AUX_B
//Though not sure these are hooked up properly on the Pi
- //ToDo
- //Put the controller index back to port instead of hardcoding to 1 when the libretro overlay crash bug is fixed
- //This is required for 2 player
-
//GUNCON has 3 controls, Trigger,A,B which equal Circle,Start,Cross
// Trigger
//The 1 is hardcoded instead of port to prevent the overlay mouse button libretro crash bug
- if (input_state_cb(1, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_LEFT))
+ if (input_state_cb(port, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_LEFT))
{
in_keystate[port] |= (1 << DKEY_CIRCLE);
}
// A
- if (input_state_cb(1, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_RIGHT))
+ if (input_state_cb(port, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_RIGHT))
{
in_keystate[port] |= (1 << DKEY_START);
}
// B
- if (input_state_cb(1, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_MIDDLE))
+ if (input_state_cb(port, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_MIDDLE))
{
in_keystate[port] |= (1 << DKEY_CROSS);
}
- //The 1 is hardcoded instead of port to prevent the overlay mouse button libretro crash bug
- int gunx = input_state_cb(1, RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_X);
- int guny = input_state_cb(1, RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_Y);
+ int gunx = input_state_cb(port, RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_X);
+ int guny = input_state_cb(port, RETRO_DEVICE_POINTER, 0, RETRO_DEVICE_ID_POINTER_Y);
//Mouse range is -32767 -> 32767
//1% is about 655
//Use the left analog stick field to store the absolute coordinates
- in_analog_left[0][0] = (gunx * GunconAdjustRatioX) + (GunconAdjustX * 655);
- in_analog_left[0][1] = (guny * GunconAdjustRatioY) + (GunconAdjustY * 655);
+ in_analog_left[port][0] = (gunx * GunconAdjustRatioX) + (GunconAdjustX * 655);
+ in_analog_left[port][1] = (guny * GunconAdjustRatioY) + (GunconAdjustY * 655);
}
static void update_input_negcon(int port, int ret)
in_analog_left[port][1] = get_analog_button(ret, input_state_cb, port, RETRO_DEVICE_ID_JOYPAD_L);
}
+static void update_input_mouse(int port, int ret)
+{
+ float raw_x = input_state_cb(port, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_X);
+ float raw_y = input_state_cb(port, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_Y);
+
+ int x = (int)roundf(raw_x * mouse_sensitivity);
+ int y = (int)roundf(raw_y * mouse_sensitivity);
+
+ if (x > 127) x = 127;
+ else if (x < -128) x = -128;
+
+ if (y > 127) y = 127;
+ else if (y < -128) y = -128;
+
+ in_mouse[port][0] = x; /* -128..+128 left/right movement, 0 = no movement */
+ in_mouse[port][1] = y; /* -128..+128 down/up movement, 0 = no movement */
+
+ /* left mouse button state */
+ if (input_state_cb(port, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_LEFT))
+ in_keystate[port] |= 1 << 11;
+
+ /* right mouse button state */
+ if (input_state_cb(port, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_RIGHT))
+ in_keystate[port] |= 1 << 10;
+}
+
static void update_input(void)
{
// reset all keystate, query libretro for keystate
update_input_negcon(i, ret);
break;
case PSE_PAD_TYPE_MOUSE:
- {
- /* mouse x/y movement, range -128 to +127 */
- float accum_x = 0, accum_y = 0;
-
- float x = input_state_cb(i, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_X);
- float y = input_state_cb(i, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_Y);
-
- accum_x += x;
- accum_y += y;
-
- if (accum_x > 127)
- accum_x = 127;
- else if (accum_x < -128)
- accum_x = -128;
-
- if (accum_y > 127)
- accum_y = 127;
- else if (accum_y < -128)
- accum_y = -128;
-
- in_mouse[i][0] = (int)accum_x;
- in_mouse[i][1] = (int)accum_y;
-
- /* mouse button state */
- if (input_state_cb(i, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_LEFT))
- in_keystate[i] |= 1 << 11;
-
- if (input_state_cb(i, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_RIGHT))
- in_keystate[i] |= 1 << 10;
-
- break;
- }
+ update_input_mouse(i, ret);
+ break;
default:
// Query digital inputs
for (j = 0; j < RETRO_PSX_MAP_LEN; j++)
* we have to do this because cache misses and some IO penalties
* are not emulated. Warning: changing this may break compatibility. */
cycle_multiplier = 175;
-#ifdef HAVE_PRE_ARMV7
+#if defined(HAVE_PRE_ARMV7) && !defined(_3DS)
cycle_multiplier = 200;
#endif
pl_rearmed_cbs.gpu_peops.iUseDither = 1;
if (log_cb)
log_cb(RETRO_LOG_INFO, "%s", msg);
}
+
+/* Prints debug-level logs */
+void SysDLog(const char *fmt, ...)
+{
+ va_list list;
+ char msg[512];
+
+ va_start(list, fmt);
+ vsprintf(msg, fmt, list);
+ va_end(list);
+
+ if (log_cb)
+ log_cb(RETRO_LOG_DEBUG, "%s", msg);
+}