+
+static bool update_option_visibility(void)
+{
+ struct retro_variable var = {0};
+ struct retro_core_option_display option_display = {0};
+ bool updated = false;
+ unsigned i;
+
+ /* If frontend supports core option categories
+ * then show/hide core option entries are ignored
+ * and no options should be hidden */
+ if (libretro_supports_option_categories)
+ return false;
+
+ var.key = "pcsx_rearmed_show_input_settings";
+ var.value = NULL;
+
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
+ {
+ bool show_input_settings_prev =
+ show_input_settings;
+
+ show_input_settings = true;
+ if (strcmp(var.value, "disabled") == 0)
+ show_input_settings = false;
+
+ if (show_input_settings !=
+ show_input_settings_prev)
+ {
+ char input_option[][50] = {
+ "pcsx_rearmed_analog_axis_modifier",
+ "pcsx_rearmed_vibration",
+ "pcsx_rearmed_multitap",
+ "pcsx_rearmed_negcon_deadzone",
+ "pcsx_rearmed_negcon_response",
+ "pcsx_rearmed_input_sensitivity",
+ "pcsx_rearmed_crosshair1",
+ "pcsx_rearmed_crosshair2",
+ "pcsx_rearmed_konamigunadjustx",
+ "pcsx_rearmed_konamigunadjusty",
+ "pcsx_rearmed_gunconadjustx",
+ "pcsx_rearmed_gunconadjusty",
+ "pcsx_rearmed_gunconadjustratiox",
+ "pcsx_rearmed_gunconadjustratioy"
+ };
+
+ option_display.visible = show_input_settings;
+
+ for (i = 0;
+ i < (sizeof(input_option) /
+ sizeof(input_option[0]));
+ i++)
+ {
+ option_display.key = input_option[i];
+ environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY,
+ &option_display);
+ }
+
+ updated = true;
+ }
+ }
+#ifdef GPU_PEOPS
+ var.key = "pcsx_rearmed_show_gpu_peops_settings";
+ var.value = NULL;
+
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
+ {
+ bool show_advanced_gpu_peops_settings_prev =
+ show_advanced_gpu_peops_settings;
+
+ show_advanced_gpu_peops_settings = true;
+ if (strcmp(var.value, "disabled") == 0)
+ show_advanced_gpu_peops_settings = false;
+
+ if (show_advanced_gpu_peops_settings !=
+ show_advanced_gpu_peops_settings_prev)
+ {
+ unsigned i;
+ struct retro_core_option_display option_display;
+ char gpu_peops_option[][45] = {
+ "pcsx_rearmed_gpu_peops_odd_even_bit",
+ "pcsx_rearmed_gpu_peops_expand_screen_width",
+ "pcsx_rearmed_gpu_peops_ignore_brightness",
+ "pcsx_rearmed_gpu_peops_disable_coord_check",
+ "pcsx_rearmed_gpu_peops_lazy_screen_update",
+ "pcsx_rearmed_gpu_peops_repeated_triangles",
+ "pcsx_rearmed_gpu_peops_quads_with_triangles",
+ "pcsx_rearmed_gpu_peops_fake_busy_state"
+ };
+
+ option_display.visible = show_advanced_gpu_peops_settings;
+
+ for (i = 0;
+ i < (sizeof(gpu_peops_option) /
+ sizeof(gpu_peops_option[0]));
+ i++)
+ {
+ option_display.key = gpu_peops_option[i];
+ environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY,
+ &option_display);
+ }
+
+ updated = true;
+ }
+ }
+#endif
+#ifdef GPU_UNAI
+ var.key = "pcsx_rearmed_show_gpu_unai_settings";
+ var.value = NULL;
+
+ if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
+ {
+ bool show_advanced_gpu_unai_settings_prev =
+ show_advanced_gpu_unai_settings;
+
+ show_advanced_gpu_unai_settings = true;
+ if (strcmp(var.value, "disabled") == 0)
+ show_advanced_gpu_unai_settings = false;
+
+ if (show_advanced_gpu_unai_settings !=
+ show_advanced_gpu_unai_settings_prev)
+ {
+ unsigned i;
+ struct retro_core_option_display option_display;
+ char gpu_unai_option[][40] = {
+ "pcsx_rearmed_gpu_unai_blending",
+ "pcsx_rearmed_gpu_unai_lighting",
+ "pcsx_rearmed_gpu_unai_fast_lighting",
+ "pcsx_rearmed_gpu_unai_scale_hires",
+ };
+
+ option_display.visible = show_advanced_gpu_unai_settings;
+
+ for (i = 0;
+ i < (sizeof(gpu_unai_option) /
+ sizeof(gpu_unai_option[0]));
+ i++)
+ {
+ option_display.key = gpu_unai_option[i];
+ environ_cb(RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY,
+ &option_display);
+ }
+
+ updated = true;
+ }
+ }
+#endif
+ return updated;
+}
+