Merge pull request #3 from libretro/master

Merge master
This commit is contained in:
Aleksey Samoilov 2018-12-05 23:22:25 +04:00 committed by GitHub
commit ff9ebb3998
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
64 changed files with 1132 additions and 789 deletions

6
.gitignore vendored
View File

@ -163,3 +163,9 @@ retroarch_switch.lst
retroarch_switch.nacp
retroarch_switch.nro
retroarch_switch.nso
# Wayland
gfx/common/wayland/idle-inhibit-unstable-v1.c
gfx/common/wayland/idle-inhibit-unstable-v1.h
gfx/common/wayland/xdg-shell.c
gfx/common/wayland/xdg-shell.h

View File

@ -41,6 +41,8 @@
"ozone_texture.h": "c",
"string_list.h": "c",
"core_info.h": "c"
"thread": "c",
"xlocale": "c"
},
"C_Cpp.dimInactiveRegions": false,
}

View File

@ -903,7 +903,7 @@ ifeq ($(HAVE_X11), 1)
gfx/common/xinerama_common.o \
gfx/display_servers/dispserv_x11.o
LIBS += $(X11_LIBS) $(XEXT_LIBS) $(XF86VM_LIBS) $(XINERAMA_LIBS)
LIBS += $(X11_LIBS) $(XEXT_LIBS) $(XF86VM_LIBS) $(XINERAMA_LIBS) $(XRANDR_LIBS)
DEFINES += -DHAVE_X11 $(X11_CFLAGS) $(XEXT_CFLAGS) $(XF86VM_CFLAGS) $(XINERAMA_CFLAGS)
ifeq ($(HAVE_XCB),1)
LIBS += -lX11-xcb

View File

@ -39,7 +39,6 @@ typedef struct
volatile unsigned dma_write;
size_t write_ptr;
OSCond cond;
bool nonblock;
bool is_paused;
} gx_audio_t;
@ -63,8 +62,6 @@ static void dma_callback(void)
DCFlushRange(wa->data[wa->dma_next], CHUNK_SIZE);
AIInitDMA((uint32_t)wa->data[wa->dma_next], CHUNK_SIZE);
OSSignalCond(wa->cond);
}
static void *gx_audio_init(const char *device,
@ -95,8 +92,6 @@ static void *gx_audio_init(const char *device,
*new_rate = 48000;
}
OSInitThreadQueue(&wa->cond);
wa->dma_write = BLOCKS - 1;
DCFlushRange(wa->data, sizeof(wa->data));
stop_audio = false;
@ -133,8 +128,7 @@ static ssize_t gx_audio_write(void *data, const void *buf_, size_t size)
/* FIXME: Nonblocking audio should break out of loop
* when it has nothing to write. */
while ((wa->dma_write == wa->dma_next ||
wa->dma_write == wa->dma_busy) && !wa->nonblock)
OSSleepThread(wa->cond);
wa->dma_write == wa->dma_busy) && !wa->nonblock);
copy_swapped(wa->data[wa->dma_write] + wa->write_ptr, buf, to_write);
@ -205,10 +199,6 @@ static void gx_audio_free(void *data)
AIStopDMA();
AIRegisterDMACallback(NULL);
if (wa->cond)
OSCloseThreadQueue(wa->cond);
wa->cond = 0;
free(data);
}

View File

@ -220,6 +220,7 @@ static const struct cmd_map map[] = {
{ "SCREENSHOT", RARCH_SCREENSHOT },
{ "MUTE", RARCH_MUTE },
{ "OSK", RARCH_OSK },
{ "FPS_TOGGLE", RARCH_FPS_TOGGLE },
{ "NETPLAY_GAME_WATCH", RARCH_NETPLAY_GAME_WATCH },
{ "VOLUME_UP", RARCH_VOLUME_UP },
{ "VOLUME_DOWN", RARCH_VOLUME_DOWN },
@ -1899,7 +1900,10 @@ bool command_event(enum event_command cmd, void *data)
break;
case CMD_EVENT_LOAD_CORE:
{
bool success = command_event(CMD_EVENT_LOAD_CORE_PERSIST, NULL);
bool success = false;
subsystem_size = 0;
content_clear_subsystem();
success = command_event(CMD_EVENT_LOAD_CORE_PERSIST, NULL);
(void)success;
#ifndef HAVE_DYNAMIC
@ -2019,8 +2023,10 @@ bool command_event(enum event_command cmd, void *data)
command_event(CMD_EVENT_RESTORE_REMAPS, NULL);
if (is_inited)
{
if (!task_push_start_dummy_core(&content_info))
return false;
}
#ifdef HAVE_DYNAMIC
path_clear(RARCH_PATH_CORE);
rarch_ctl(RARCH_CTL_SYSTEM_INFO_FREE, NULL);
@ -2037,6 +2043,11 @@ bool command_event(enum event_command cmd, void *data)
command_event(CMD_EVENT_DISCORD_UPDATE, &userdata);
}
#endif
if (is_inited)
{
subsystem_size = 0;
content_clear_subsystem();
}
}
break;
case CMD_EVENT_QUIT:
@ -2177,6 +2188,12 @@ TODO: Add a setting for these tweaks */
RARCH_LOG("%s\n", msg);
}
break;
case CMD_EVENT_FPS_TOGGLE:
{
settings_t *settings = config_get_ptr();
settings->bools.video_fps_show = !(settings->bools.video_fps_show);
}
break;
case CMD_EVENT_OVERLAY_DEINIT:
#ifdef HAVE_OVERLAY
input_overlay_free(overlay_ptr);

View File

@ -85,6 +85,8 @@ enum event_command
CMD_EVENT_AUDIO_START,
/* Mutes audio. */
CMD_EVENT_AUDIO_MUTE_TOGGLE,
/* Toggles FPS counter. */
CMD_EVENT_FPS_TOGGLE,
/* Initializes overlay. */
CMD_EVENT_OVERLAY_INIT,
/* Deinitializes overlay. */

View File

@ -240,7 +240,7 @@ static const float aspect_ratio = DEFAULT_ASPECT_RATIO;
/* 1:1 PAR */
static const bool aspect_ratio_auto = false;
#if defined(__CELLOS_LV2) || defined(_XBOX360) || defined(ANDROID_AARCH64)
#if defined(__CELLOS_LV2) || defined(_XBOX360)
static unsigned aspect_ratio_idx = ASPECT_RATIO_16_9;
#elif defined(PSP)
static unsigned aspect_ratio_idx = ASPECT_RATIO_CORE;
@ -549,8 +549,11 @@ static const int wasapi_sh_buffer_length = -16; /* auto */
/* Enables displaying the current frames per second. */
static const bool fps_show = false;
/* Show frame count on FPS display */
static const bool framecount_show = true;
/* Enables displaying the current frame count. */
static const bool framecount_show = false;
/* Includes displaying the current memory usage/total with FPS/Frames. */
static const bool memory_show = false;
/* Enables use of rewind. This will incur some memory footprint
* depending on the save state buffer. */
@ -581,7 +584,13 @@ static const bool pause_nonactive = true;
/* Saves non-volatile SRAM at a regular interval.
* It is measured in seconds. A value of 0 disables autosave. */
#if defined(__i386__) || defined(__i486__) || defined(__i686__) || defined(__x86_64__) || defined(_M_X64) || defined(_WIN32) || defined(OSX) || defined(ANDROID) || defined(IOS)
/* Flush to file every 10 seconds on modern platforms by default */
static const unsigned autosave_interval = 10;
#else
/* Default to disabled on I/O-constrained platforms */
static const unsigned autosave_interval = 0;
#endif
/* Publicly announce netplay */
static const bool netplay_public_announce = true;

View File

@ -87,6 +87,7 @@ static const struct retro_keybind retro_keybinds_1[] = {
{ true, RARCH_SCREENSHOT, MENU_ENUM_LABEL_VALUE_INPUT_META_SCREENSHOT, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE },
{ true, RARCH_MUTE, MENU_ENUM_LABEL_VALUE_INPUT_META_MUTE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE },
{ true, RARCH_OSK, MENU_ENUM_LABEL_VALUE_INPUT_META_OSK, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE },
{ true, RARCH_FPS_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_FPS_TOGGLE, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE },
{ true, RARCH_NETPLAY_GAME_WATCH, MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_GAME_WATCH, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE },
{ true, RARCH_ENABLE_HOTKEY, MENU_ENUM_LABEL_VALUE_INPUT_META_ENABLE_HOTKEY, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE },
{ true, RARCH_VOLUME_UP, MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_UP, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE },
@ -165,6 +166,7 @@ static const struct retro_keybind retro_keybinds_1[] = {
{ true, RARCH_SCREENSHOT, MENU_ENUM_LABEL_VALUE_INPUT_META_SCREENSHOT, RETROK_F8, NO_BTN, NO_BTN, 0, AXIS_NONE },
{ true, RARCH_MUTE, MENU_ENUM_LABEL_VALUE_INPUT_META_MUTE, RETROK_F9, NO_BTN, NO_BTN, 0, AXIS_NONE },
{ true, RARCH_OSK, MENU_ENUM_LABEL_VALUE_INPUT_META_OSK, RETROK_F12, NO_BTN, NO_BTN, 0, AXIS_NONE },
{ true, RARCH_FPS_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_FPS_TOGGLE, RETROK_F3, NO_BTN, NO_BTN, 0, AXIS_NONE },
{ true, RARCH_NETPLAY_GAME_WATCH, MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_GAME_WATCH, RETROK_i, NO_BTN, NO_BTN, 0, AXIS_NONE },
{ true, RARCH_ENABLE_HOTKEY, MENU_ENUM_LABEL_VALUE_INPUT_META_ENABLE_HOTKEY, RETROK_UNKNOWN, NO_BTN, NO_BTN, 0, AXIS_NONE },
{ true, RARCH_VOLUME_UP, MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_UP, RETROK_KP_PLUS, NO_BTN, NO_BTN, 0, AXIS_NONE },

View File

@ -1317,7 +1317,8 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
SETTING_BOOL("builtin_imageviewer_enable", &settings->bools.multimedia_builtin_imageviewer_enable, true, true, false);
SETTING_BOOL("fps_show", &settings->bools.video_fps_show, true, false, false);
SETTING_BOOL("statistics_show", &settings->bools.video_statistics_show, true, false, false);
SETTING_BOOL("framecount_show", &settings->bools.video_framecount_show, true, true, false);
SETTING_BOOL("framecount_show", &settings->bools.video_framecount_show, true, false, false);
SETTING_BOOL("memory_show", &settings->bools.video_memory_show, true, false, false);
SETTING_BOOL("ui_menubar_enable", &settings->bools.ui_menubar_enable, true, true, false);
SETTING_BOOL("suspend_screensaver_enable", &settings->bools.ui_suspend_screensaver_enable, true, true, false);
SETTING_BOOL("rewind_enable", &settings->bools.rewind_enable, true, rewind_enable, false);
@ -1678,6 +1679,10 @@ static struct config_uint_setting *populate_settings_uint(settings_t *settings,
SETTING_UINT("video_record_threads", &settings->uints.video_record_threads, true, video_record_threads, false);
#ifdef HAVE_LIBNX
SETTING_UINT("libnx_overclock", &settings->uints.libnx_overclock, true, SWITCH_DEFAULT_CPU_PROFILE, false);
#endif
*size = count;
return tmp;
@ -3132,6 +3137,12 @@ static bool config_load_file(const char *path, bool set_defaults,
strlcpy(settings->arrays.menu_driver, "rgui", sizeof(settings->arrays.menu_driver));
#endif
#ifdef HAVE_LIBNX
// Apply initial clocks
extern void libnx_apply_overclock();
libnx_apply_overclock();
#endif
frontend_driver_set_sustained_performance_mode(settings->bools.sustained_performance_mode);
recording_driver_update_streaming_url();

View File

@ -103,6 +103,7 @@ typedef struct settings
bool video_fps_show;
bool video_statistics_show;
bool video_framecount_show;
bool video_memory_show;
bool video_msg_bgcolor_enable;
bool video_3ds_lcd_bottom;
@ -445,6 +446,8 @@ typedef struct settings
unsigned window_position_height;
unsigned video_record_threads;
unsigned libnx_overclock;
} uints;
struct

View File

@ -176,12 +176,81 @@ void libretro_free_system_info(struct retro_system_info *info)
static bool environ_cb_get_system_info(unsigned cmd, void *data)
{
rarch_system_info_t *system = runloop_get_system_info();
switch (cmd)
{
case RETRO_ENVIRONMENT_SET_SUPPORT_NO_GAME:
*load_no_content_hook = *(const bool*)data;
break;
case RETRO_ENVIRONMENT_SET_SUBSYSTEM_INFO:
{
unsigned i, j;
unsigned size = i;
const struct retro_subsystem_info *info =
(const struct retro_subsystem_info*)data;
subsystem_size = 0;
RARCH_LOG("Environ SET_SUBSYSTEM_INFO.\n");
for (i = 0; info[i].ident; i++)
{
RARCH_LOG("Subsystem ID: %d\n", i);
RARCH_LOG("Special game type: %s\n", info[i].desc);
RARCH_LOG(" Ident: %s\n", info[i].ident);
RARCH_LOG(" ID: %u\n", info[i].id);
RARCH_LOG(" Content:\n");
for (j = 0; j < info[i].num_roms; j++)
{
RARCH_LOG(" %s (%s)\n",
info[i].roms[j].desc, info[i].roms[j].required ?
"required" : "optional");
}
}
RARCH_LOG("Subsystems: %d\n", i);
size = i;
if (system)
{
for (i = 0; i < size; i++)
{
subsystem_data[i].desc = strdup(info[i].desc);
subsystem_data[i].ident = strdup(info[i].ident);
subsystem_data[i].id = info[i].id;
subsystem_data[i].num_roms = info[i].num_roms;
for (j = 0; j < subsystem_data[i].num_roms; j++)
{
subsystem_data_roms[i][j].desc = strdup(info[i].roms[j].desc);
subsystem_data_roms[i][j].valid_extensions = strdup(info[i].roms[j].valid_extensions);
subsystem_data_roms[i][j].required = info[i].roms[j].required;
subsystem_data_roms[i][j].block_extract = info[i].roms[j].block_extract;
subsystem_data_roms[i][j].need_fullpath = info[i].roms[j].need_fullpath;
}
subsystem_data[i].roms = subsystem_data_roms[i];
}
for (i = 0; i < size; i++)
{
#if 1
RARCH_LOG("Subsystem ID: %d\n", i);
RARCH_LOG("Special game type: %s\n", subsystem_data[i].desc);
RARCH_LOG(" Ident: %s\n", subsystem_data[i].ident);
RARCH_LOG(" ID: %u\n", subsystem_data[i].id);
RARCH_LOG(" Content:\n");
#endif
for (j = 0; j < subsystem_data[i].num_roms; j++)
{
RARCH_LOG(" %s (%s)\n",
subsystem_data[i].roms[j].desc, subsystem_data[i].roms[j].required ?
"required" : "optional");
}
}
RARCH_LOG("Subsystems: %d\n", subsystem_size);
subsystem_size = size;
RARCH_LOG("Subsystems: %d\n", subsystem_size);
}
break;
}
default:
return false;
}
@ -396,7 +465,6 @@ bool libretro_get_system_info(const char *path,
#ifdef HAVE_DYNAMIC
dylib_close(lib);
#endif
return true;
}

View File

@ -146,6 +146,10 @@ bool init_libretro_sym_custom(enum rarch_core_type type, struct retro_core_t *cu
**/
void uninit_libretro_sym(struct retro_core_t *core);
struct retro_subsystem_info subsystem_data[20];
struct retro_subsystem_rom_info subsystem_data_roms[10][10];
unsigned subsystem_size;
RETRO_END_DECLS
#endif

View File

@ -13,6 +13,9 @@
#ifdef HAVE_LIBNX
#include <switch.h>
#include "../../switch_performance_profiles.h"
#include "../../configuration.h"
#include <unistd.h>
#else
#include <libtransistor/nx.h>
#include <libtransistor/ipc_helpers.h>
@ -55,6 +58,8 @@ static const char *elf_path_cst = "/switch/retroarch_switch.nro";
static uint64_t frontend_switch_get_mem_used(void);
bool platform_switch_has_focus = true;
#ifdef HAVE_LIBNX
/* Splash */
@ -68,10 +73,46 @@ static AppletHookCookie applet_hook_cookie;
extern bool nxlink_connected;
#endif
static void on_applet_hook(AppletHookType hook, void* param) {
if(hook == AppletHookType_OnExitRequest) {
void libnx_apply_overclock() {
const size_t profiles_count = sizeof(SWITCH_CPU_PROFILES) / sizeof(SWITCH_CPU_PROFILES[1]);
if (config_get_ptr()->uints.libnx_overclock >= 0 && config_get_ptr()->uints.libnx_overclock <= profiles_count)
pcvSetClockRate(PcvModule_Cpu, SWITCH_CPU_SPEEDS_VALUES[config_get_ptr()->uints.libnx_overclock]);
}
static void on_applet_hook(AppletHookType hook, void *param) {
u32 performance_mode;
AppletFocusState focus_state;
/* Exit request */
switch (hook)
{
case AppletHookType_OnExitRequest:
RARCH_LOG("Got AppletHook OnExitRequest, exiting.\n");
retroarch_main_quit();
break;
/* Focus state*/
case AppletHookType_OnFocusState:
focus_state = appletGetFocusState();
RARCH_LOG("Got AppletHook OnFocusState - new focus state is %d\n", focus_state);
platform_switch_has_focus = focus_state == AppletFocusState_Focused;
if(!platform_switch_has_focus) {
pcvSetClockRate(PcvModule_Cpu, 1020000000);
} else {
libnx_apply_overclock();
}
break;
/* Performance mode */
case AppletHookType_OnPerformanceMode:
// 0 == Handheld, 1 == Docked
// Since CPU doesn't change we just re-apply
performance_mode = appletGetPerformanceMode();
libnx_apply_overclock();
break;
default:
break;
}
}
@ -201,6 +242,8 @@ static void frontend_switch_deinit(void *data)
#ifdef HAVE_LIBNX
nifmExit();
pcvSetClockRate(PcvModule_Cpu, 1020000000); // Always 1020 MHz, unless SDEV
pcvExit();
#if defined(SWITCH) && defined(NXLINK)
socketExit();
#endif
@ -225,7 +268,7 @@ static void frontend_switch_deinit(void *data)
#ifdef HAVE_LIBNX
static void frontend_switch_exec(const char *path, bool should_load_game)
{
char game_path[PATH_MAX];
char game_path[PATH_MAX-4];
const char *arg_data[3];
char error_string[200 + PATH_MAX];
int args = 0;
@ -613,14 +656,20 @@ static void frontend_switch_shutdown(bool unused)
/* runloop_get_system_info isnt initialized that early.. */
extern void retro_get_system_info(struct retro_system_info *info);
static void frontend_switch_init(void *data)
{
(void)data;
#ifdef HAVE_LIBNX
nifmInitialize();
pcvInitialize();
appletLockExit();
appletHook(&applet_hook_cookie, on_applet_hook, NULL);
appletSetFocusHandlingMode(AppletFocusHandlingMode_NoSuspend);
#ifndef HAVE_OPENGL
/* Init Resolution before initDefault */
gfxInitResolution(1280, 720);
@ -631,7 +680,10 @@ static void frontend_switch_init(void *data)
gfxConfigureTransform(0);
#endif /* HAVE_OPENGL */
appletInitializeGamePlayRecording();
bool recording_supported = false;
appletIsGamePlayRecordingSupported(&recording_supported);
if(recording_supported)
appletInitializeGamePlayRecording();
#ifdef NXLINK
socketInitializeDefault();
@ -776,6 +828,8 @@ static enum frontend_powerstate frontend_switch_get_powerstate(int *seconds, int
case ChargerType_Charger:
case ChargerType_Usb:
return FRONTEND_POWERSTATE_CHARGING;
default:
break;
}
return FRONTEND_POWERSTATE_NO_SOURCE;

View File

@ -305,8 +305,9 @@ void dxgi_copy(
void dxgi_update_title(video_frame_info_t* video_info)
{
const ui_window_t* window = ui_companion_driver_get_window_ptr();
const settings_t *settings = config_get_ptr();
if (video_info->fps_show)
if (settings->bools.video_memory_show)
{
MEMORYSTATUS stat;
char mem[128];
@ -315,7 +316,7 @@ void dxgi_update_title(video_frame_info_t* video_info)
GlobalMemoryStatus(&stat);
snprintf(
mem, sizeof(mem), "|| MEM: %.2f/%.2fMB", stat.dwAvailPhys / (1024.0f * 1024.0f),
mem, sizeof(mem), " || MEM: %.2f/%.2fMB", stat.dwAvailPhys / (1024.0f * 1024.0f),
stat.dwTotalPhys / (1024.0f * 1024.0f));
strlcat(video_info->fps_text, mem, sizeof(video_info->fps_text));
}

View File

@ -76,6 +76,7 @@ typedef struct
/*! @brief end commits the command buffer */
- (void)end;
- (void)setRotation:(unsigned)rotation;
- (bool)readBackBuffer:(uint8_t *)buffer;
@end

View File

@ -53,10 +53,16 @@
id<MTLRenderPipelineState> _states[GFX_MAX_SHADERS][2];
id<MTLRenderPipelineState> _clearState;
Uniforms _uniforms;
bool _captureEnabled;
id<MTLTexture> _backBuffer;
unsigned _rotation;
matrix_float4x4 _mvp_no_rot;
matrix_float4x4 _mvp;
Uniforms _uniforms;
Uniforms _uniformsNoRotate;
}
- (instancetype)initWithDevice:(id<MTLDevice>)d
@ -75,6 +81,11 @@
_commandQueue = [_device newCommandQueue];
_clearColor = MTLClearColorMake(0, 0, 0, 1);
_uniforms.projectionMatrix = matrix_proj_ortho(0, 1, 0, 1);
_rotation = 0;
[self setRotation:0];
_mvp_no_rot = matrix_proj_ortho(0, 1, 0, 1);
_mvp = matrix_proj_ortho(0, 1, 0, 1);
{
MTLSamplerDescriptor *sd = [MTLSamplerDescriptor new];
@ -130,6 +141,27 @@
return &_uniforms;
}
- (void)setRotation:(unsigned)rotation
{
_rotation = 270 * rotation;
/* Calculate projection. */
_mvp_no_rot = matrix_proj_ortho(0, 1, 0, 1);
bool allow_rotate = true;
if (!allow_rotate)
{
_mvp = _mvp_no_rot;
return;
}
matrix_float4x4 rot = matrix_rotate_z((float)(M_PI * _rotation / 180.0f));
_mvp = simd_mul(rot, _mvp_no_rot);
_uniforms.projectionMatrix = _mvp;
_uniformsNoRotate.projectionMatrix = _mvp_no_rot;
}
- (void)setDisplaySyncEnabled:(bool)displaySyncEnabled
{
#if TARGET_OS_OSX

View File

@ -55,6 +55,7 @@ typedef NS_ENUM(NSUInteger, RTextureFilter)
};
extern matrix_float4x4 matrix_proj_ortho(float left, float right, float top, float bottom);
extern matrix_float4x4 matrix_rotate_z(float rot);
extern matrix_float4x4 make_matrix_float4x4(const float *v);
#endif /* RendererCommon_h */

View File

@ -86,3 +86,17 @@ matrix_float4x4 matrix_proj_ortho(float left, float right, float top, float bott
matrix_float4x4 mat = {P, Q, R, S};
return mat;
}
matrix_float4x4 matrix_rotate_z(float rot)
{
float cz, sz;
__sincosf(rot, &sz, &cz);
simd_float4 P = simd_make_float4(cz, -sz, 0, 0);
simd_float4 Q = simd_make_float4(sz, cz, 0, 0);
simd_float4 R = simd_make_float4( 0, 0, 1, 0);
simd_float4 S = simd_make_float4( 0, 0, 0, 1);
matrix_float4x4 mat = {P, Q, R, S};
return mat;
}

View File

@ -96,6 +96,8 @@ extern MTLPixelFormat SelectOptimalPixelFormat(MTLPixelFormat fmt);
/*! @brief setNeedsResize triggers a display resize */
- (void)setNeedsResize;
- (void)setViewportWidth:(unsigned)width height:(unsigned)height forceFull:(BOOL)forceFull allowRotate:(BOOL)allowRotate;
- (void)setRotation:(unsigned)rotation;
@end

View File

@ -216,21 +216,19 @@
return YES;
}
- (void)_updateUniforms
- (void)setViewportWidth:(unsigned)width height:(unsigned)height forceFull:(BOOL)forceFull allowRotate:(BOOL)allowRotate
{
_uniforms.projectionMatrix = matrix_proj_ortho(0, 1, 0, 1);
}
- (void)_updateViewport:(CGSize)size
{
RARCH_LOG("[Metal]: _updateViewport size %.0fx%.0f\n", size.width, size.height);
#if 0
RARCH_LOG("[Metal]: setViewportWidth size %dx%d\n", width, height);
#endif
_viewport->full_width = (unsigned int)size.width;
_viewport->full_height = (unsigned int)size.height;
_viewport->full_width = width;
_viewport->full_height = height;
video_driver_set_size(&_viewport->full_width, &_viewport->full_height);
_layer.drawableSize = size;
video_driver_update_viewport(_viewport, NO, _keepAspect);
_layer.drawableSize = CGSizeMake(width, height);
video_driver_update_viewport(_viewport, forceFull, _keepAspect);
// update matrix
_context.viewport = _viewport;
_viewportMVP.outputSize = simd_make_float2(_viewport->full_width, _viewport->full_height);
@ -256,8 +254,10 @@
[self _beginFrame];
_frameView.frameCount = frameCount;
_frameView.size = CGSizeMake(width, height);
[_frameView updateFrame:data pitch:pitch];
if (data && width && height) {
_frameView.size = CGSizeMake(width, height);
[_frameView updateFrame:data pitch:pitch];
}
[self _drawViews:video_info];
@ -277,7 +277,7 @@
id<MTLRenderCommandEncoder> rce = _context.rce;
[rce pushDebugGroup:@"overlay"];
[rce setRenderPipelineState:[_context getStockShader:VIDEO_SHADER_STOCK_BLEND blend:YES]];
[rce setVertexBytes:&_uniforms length:sizeof(_uniforms) atIndex:BufferIndexUniforms];
[rce setVertexBytes:_context.uniforms length:sizeof(*_context.uniforms) atIndex:BufferIndexUniforms];
[rce setFragmentSamplerState:_samplerStateLinear atIndex:SamplerIndexDraw];
[_overlay drawWithEncoder:rce];
[rce popDebugGroup];
@ -338,7 +338,6 @@
_context.viewport = _viewport;
}
[_context begin];
[self _updateUniforms];
}
- (void)_drawViews:(video_frame_info_t *)video_info
@ -351,7 +350,7 @@
if ((_frameView.drawState & ViewDrawStateEncoder) != 0)
{
[rce setVertexBytes:&_uniforms length:sizeof(_uniforms) atIndex:BufferIndexUniforms];
[rce setVertexBytes:_context.uniforms length:sizeof(*_context.uniforms) atIndex:BufferIndexUniforms];
[rce setRenderPipelineState:_t_pipelineStateNoAlpha];
if (_frameView.filter == RTextureFilterNearest)
{
@ -410,6 +409,11 @@
// TODO(sgc): resize all drawables
}
- (void)setRotation:(unsigned)rotation
{
[_context setRotation:rotation];
}
- (Uniforms *)viewportMVP
{
return &_viewportMVP;
@ -419,7 +423,7 @@
- (void)mtkView:(MTKView *)view drawableSizeWillChange:(CGSize)size
{
[self _updateViewport:size];
[self setViewportWidth:(unsigned int)size.width height:(unsigned int)size.height forceFull:NO allowRotate:YES];
}
- (void)drawInMTKView:(MTKView *)view
@ -897,7 +901,7 @@ typedef struct MTLALIGN(16)
rce = [cb renderCommandEncoderWithDescriptor:rpd];
}
#if METAL_DEBUG
#if DEBUG && METAL_DEBUG
rce.label = [NSString stringWithFormat:@"pass %d", i];
#endif
@ -1126,6 +1130,8 @@ typedef struct MTLALIGN(16)
texture_t *source = &_engine.frame.texture[0];
for (unsigned i = 0; i < shader->passes; source = &_engine.pass[i++].rt)
{
matrix_float4x4 *mvp = (i == shader->passes-1) ? &_context.uniforms->projectionMatrix : &_engine.mvp;
/* clang-format off */
semantics_map_t semantics_map = {
{
@ -1154,7 +1160,7 @@ typedef struct MTLALIGN(16)
&_engine.luts[0].size_data, sizeof(*_engine.luts)},
},
{
&_engine.mvp, /* MVP */
mvp, /* MVP */
&_engine.pass[i].rt.size_data, /* OutputSize */
&_engine.frame.output_size, /* FinalViewportSize */
&_engine.pass[i].frame_count, /* FrameCount */

View File

@ -42,7 +42,7 @@
#define VENDOR_ID_NV 0x10DE
#define VENDOR_ID_INTEL 0x8086
#ifdef _WIN32
#if defined(_WIN32) || defined(ANDROID)
#define VULKAN_EMULATE_MAILBOX
#endif

View File

@ -14,9 +14,18 @@
* You should have received a copy of the GNU General Public License along with RetroArch.
* If not, see <http://www.gnu.org/licenses/>.
*/
#include <compat/strl.h>
#include <sys/types.h>
#include <unistd.h>
#include "../../config.h"
#ifdef HAVE_XRANDR
#include <X11/extensions/Xrandr.h>
#endif
#include "../video_display_server.h"
#include "../common/x11_common.h"
#include "../../configuration.h"
@ -284,8 +293,37 @@ static bool x11_display_server_set_resolution(void *data,
const char *x11_display_server_get_output_options(void *data)
{
#ifdef HAVE_XRANDR
Display *dpy;
XRRScreenResources *res;
XRROutputInfo *info;
Window root;
int i;
static char s[PATH_MAX_LENGTH];
if (!(dpy = XOpenDisplay(0)))
return NULL;
root = RootWindow(dpy, DefaultScreen(dpy));
if (!(res = XRRGetScreenResources(dpy, root)))
return NULL;
for (i = 0; i < res->noutput; i++)
{
if (!(info = XRRGetOutputInfo(dpy, res, res->outputs[i])))
return NULL;
strlcat(s, info->name, sizeof(s));
if ((i+1) < res->noutput)
strlcat(s, "|", sizeof(s));
}
return s;
#else
/* TODO/FIXME - hardcoded for now; list should be built up dynamically later */
return "HDMI-0|HDMI-1|HDMI-2|HDMI-3|DVI-0|DVI-1|DVI-2|DVI-3|VGA-0|VGA-1|VGA-2|VGA-3|Config";
#endif
}
const video_display_server_t dispserv_x11 = {

View File

@ -1990,14 +1990,14 @@ static void d3d9_video_texture_load_d3d(
*id = (uintptr_t)tex;
}
static int64_t d3d9_video_texture_load_wrap_d3d(void *data)
static int d3d9_video_texture_load_wrap_d3d(void *data)
{
uintptr_t id = 0;
struct d3d9_texture_info *info = (struct d3d9_texture_info*)data;
if (!info)
return 0;
d3d9_video_texture_load_d3d(info, &id);
return (int64_t)(uintptr_t)id;
return id;
}
static uintptr_t d3d9_load_texture(void *video_data, void *data,

View File

@ -957,12 +957,6 @@ static bool gl_frame(void *data, const void *frame,
if (!gl)
return false;
#ifdef HAVE_LIBNX
// Should be called once per frame
if(!appletMainLoop())
return false;
#endif
gl_context_bind_hw_render(gl, false);
if (gl->core_context_in_use && gl->renderchain_driver->bind_vao)
@ -2509,7 +2503,7 @@ static void video_texture_load_gl(
}
#ifdef HAVE_THREADS
static int64_t video_texture_load_wrap_gl_mipmap(void *data)
static int video_texture_load_wrap_gl_mipmap(void *data)
{
uintptr_t id = 0;
@ -2517,10 +2511,10 @@ static int64_t video_texture_load_wrap_gl_mipmap(void *data)
return 0;
video_texture_load_gl((struct texture_image*)data,
TEXTURE_FILTER_MIPMAP_LINEAR, &id);
return (int64_t)(uintptr_t)id;
return (int)id;
}
static int64_t video_texture_load_wrap_gl(void *data)
static int video_texture_load_wrap_gl(void *data)
{
uintptr_t id = 0;
@ -2528,7 +2522,7 @@ static int64_t video_texture_load_wrap_gl(void *data)
return 0;
video_texture_load_gl((struct texture_image*)data,
TEXTURE_FILTER_LINEAR, &id);
return (int64_t)(uintptr_t)id;
return (int)id;
}
#endif

View File

@ -151,16 +151,22 @@ static void metal_free(void *data)
static void metal_set_viewport(void *data, unsigned viewport_width,
unsigned viewport_height, bool force_full, bool allow_rotate)
{
#if 0
RARCH_LOG("[Metal]: set_viewport size: %dx%d full: %s rotate: %s\n",
viewport_width, viewport_height,
force_full ? "YES" : "NO",
allow_rotate ? "YES" : "NO");
#endif
MetalDriver *md = (__bridge MetalDriver *)data;
if (md == nil) {
return;
}
[md setViewportWidth:viewport_width height:viewport_height forceFull:force_full allowRotate:allow_rotate];
}
static void metal_set_rotation(void *data, unsigned rotation)
{
MetalDriver *md = (__bridge MetalDriver *)data;
if (md == nil) {
return;
}
[md setRotation:rotation];
}
static void metal_viewport_info(void *data, struct video_viewport *vp)

View File

@ -27,6 +27,8 @@
static enum gfx_ctx_api ctx_nx_api = GFX_CTX_OPENGL_API;
switch_ctx_data_t *nx_ctx_ptr = NULL;
extern bool platform_switch_has_focus;
void switch_ctx_destroy(void *data)
{
switch_ctx_data_t *ctx_nx = (switch_ctx_data_t *)data;
@ -190,7 +192,7 @@ static bool switch_ctx_bind_api(void *data,
static bool switch_ctx_has_focus(void *data)
{
(void)data;
return true;
return platform_switch_has_focus;
}
static bool switch_ctx_suppress_screensaver(void *data, bool enable)

View File

@ -986,7 +986,8 @@ static bool video_driver_init_internal(bool *video_is_threaded)
else
{
/* To-Do: remove when the new window resizing core is hooked */
if (settings->uints.window_position_width || settings->uints.window_position_height)
if (settings->bools.video_window_save_positions &&
(settings->uints.window_position_width || settings->uints.window_position_height))
{
width = settings->uints.window_position_width;
height = settings->uints.window_position_height;
@ -2448,10 +2449,13 @@ void video_driver_frame(const void *data, unsigned width,
char frames_text[64];
last_fps = TIME_TO_FPS(curr_time, new_time, FPS_UPDATE_INTERVAL);
if (video_info.fps_show)
if (video_info.fps_show || video_info.framecount_show)
{
snprintf(video_info.fps_text, sizeof(video_info.fps_text),
"|| FPS: %6.1f ", last_fps);
if (video_info.fps_show)
{
snprintf(video_info.fps_text, sizeof(video_info.fps_text),
" || FPS: %6.1f ", last_fps);
}
if (video_info.framecount_show)
{
snprintf(frames_text,
@ -2460,7 +2464,8 @@ void video_driver_frame(const void *data, unsigned width,
(uint64_t)video_driver_frame_count);
}
snprintf(video_driver_window_title, sizeof(video_driver_window_title),
"%s%s%s", title, video_info.fps_text,
"%s%s%s", title,
video_info.fps_show ? video_info.fps_text : "",
video_info.framecount_show ? frames_text : "");
}
else
@ -2490,6 +2495,28 @@ void video_driver_frame(const void *data, unsigned width,
"FPS: %6.1f",
last_fps);
}
if (video_info.fps_show && video_info.framecount_show)
snprintf(
video_info.fps_text,
sizeof(video_info.fps_text),
"FPS: %6.1f || %s: %" PRIu64,
last_fps,
msg_hash_to_str(MSG_FRAMES),
(uint64_t)video_driver_frame_count);
else if (video_info.framecount_show)
snprintf(
video_info.fps_text,
sizeof(video_info.fps_text),
"%s: %" PRIu64,
msg_hash_to_str(MSG_FRAMES),
(uint64_t)video_driver_frame_count);
else if (video_info.fps_show)
snprintf(
video_info.fps_text,
sizeof(video_info.fps_text),
"FPS: %6.1f",
last_fps);
}
else
{
@ -2619,7 +2646,7 @@ void video_driver_frame(const void *data, unsigned width,
video_driver_frame_count++;
/* Display the FPS, with a higher priority. */
if (video_info.fps_show)
if (video_info.fps_show || video_info.framecount_show)
runloop_msg_queue_push(video_info.fps_text, 2, 1, true);
/* trigger set resolution*/

View File

@ -27,7 +27,7 @@
RETRO_BEGIN_DECLS
typedef int64_t (*custom_command_method_t)(void*);
typedef int (*custom_command_method_t)(void*);
typedef bool (*custom_font_command_method_t)(const void **font_driver,
void **font_handle, void *video_data, const char *font_path,

View File

@ -97,6 +97,7 @@ enum
RARCH_SCREENSHOT,
RARCH_MUTE,
RARCH_OSK,
RARCH_FPS_TOGGLE,
RARCH_NETPLAY_GAME_WATCH,
RARCH_ENABLE_HOTKEY,
RARCH_VOLUME_UP,

View File

@ -343,6 +343,7 @@ const struct input_bind_map input_config_bind_map[RARCH_BIND_LIST_END_NULL] = {
DECLARE_META_BIND(2, screenshot, RARCH_SCREENSHOT, MENU_ENUM_LABEL_VALUE_INPUT_META_SCREENSHOT),
DECLARE_META_BIND(2, audio_mute, RARCH_MUTE, MENU_ENUM_LABEL_VALUE_INPUT_META_MUTE),
DECLARE_META_BIND(2, osk_toggle, RARCH_OSK, MENU_ENUM_LABEL_VALUE_INPUT_META_OSK),
DECLARE_META_BIND(2, fps_toggle, RARCH_FPS_TOGGLE, MENU_ENUM_LABEL_VALUE_INPUT_META_FPS_TOGGLE),
DECLARE_META_BIND(2, netplay_game_watch, RARCH_NETPLAY_GAME_WATCH, MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_GAME_WATCH),
DECLARE_META_BIND(2, enable_hotkey, RARCH_ENABLE_HOTKEY, MENU_ENUM_LABEL_VALUE_INPUT_META_ENABLE_HOTKEY),
DECLARE_META_BIND(2, volume_up, RARCH_VOLUME_UP, MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_UP),

View File

@ -3432,7 +3432,7 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_COLOR_GREEN,
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_MESSAGE_COLOR_BLUE,
"Notification Blue Color")
MSG_HASH(MENU_ENUM_LABEL_VALUE_FRAMECOUNT_SHOW,
"Show frame count on FPS display")
"Display Frame Count")
MSG_HASH(MSG_CONFIG_OVERRIDE_LOADED,
"Configuration override loaded.")
MSG_HASH(MSG_GAME_REMAP_FILE_LOADED,

View File

@ -15,6 +15,8 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_SWITCH_BACKLIGHT_CONTROL,
"调整 Switch 的屏幕亮度"
)
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_SWITCH_CPU_PROFILE,
"CPU 超频"

View File

@ -15,6 +15,8 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_SWITCH_BACKLIGHT_CONTROL,
"Anpassen der Switch Bildschirmhelligkeit"
)
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_SWITCH_CPU_PROFILE,
"CPU Übertakten"

View File

@ -6224,7 +6224,7 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_FRAMECOUNT_SHOW,
"Show frame count on FPS display"
"Display Frame Count"
)
MSG_HASH(
MSG_CONFIG_OVERRIDE_LOADED,

View File

@ -15,6 +15,8 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_SWITCH_BACKLIGHT_CONTROL,
"Ajusta el brillo de la pantalla"
)
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_SWITCH_CPU_PROFILE,
"CPU Overclock"

View File

@ -3,6 +3,8 @@ MSG_HASH(MENU_ENUM_LABEL_SWITCH_GPU_PROFILE,
"switch_gpu_profile")
MSG_HASH(MENU_ENUM_LABEL_SWITCH_BACKLIGHT_CONTROL,
"switch_backlight_control")
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
MSG_HASH(MENU_ENUM_LABEL_SWITCH_CPU_PROFILE,
"switch_cpu_profile")
#endif
@ -1551,6 +1553,8 @@ MSG_HASH(MENU_ENUM_LABEL_VIDEO_MESSAGE_COLOR_BLUE,
"video_msg_color_blue")
MSG_HASH(MENU_ENUM_LABEL_FRAMECOUNT_SHOW,
"framecount_show")
MSG_HASH(MENU_ENUM_LABEL_MEMORY_SHOW,
"memory_show")
MSG_HASH(MENU_ENUM_LABEL_AUTOMATICALLY_ADD_CONTENT_TO_PLAYLIST,
"automatically_add_content_to_playlist")
MSG_HASH(MENU_ENUM_LABEL_VIDEO_WINDOW_OPACITY,

View File

@ -15,6 +15,8 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_SWITCH_BACKLIGHT_CONTROL,
"Aumentar ou diminuir o brilho da tela do Switch"
)
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_SWITCH_CPU_PROFILE,
"Overclock da CPU"

View File

@ -104,6 +104,10 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len)
snprintf(s, len,
"Toggles onscreen keyboard.");
break;
case RARCH_FPS_TOGGLE:
snprintf(s, len,
"Toggles frames per second counter.");
break;
case RARCH_NETPLAY_GAME_WATCH:
snprintf(s, len,
"Netplay toggle play/spectate mode.");
@ -567,6 +571,11 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len)
"Enables displaying the current frames \n"
"per second.");
break;
case MENU_ENUM_LABEL_MEMORY_SHOW:
snprintf(s, len,
"Includes displaying the current memory \n"
"usage/total with FPS/Frames.");
break;
case MENU_ENUM_LABEL_VIDEO_FONT_ENABLE:
snprintf(s, len,
"Show and/or hide onscreen messages.");

View File

@ -15,6 +15,8 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_SWITCH_BACKLIGHT_CONTROL,
"Increase or decrease the Switch screen brightness"
)
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_SWITCH_CPU_PROFILE,
"CPU Overclock"
@ -843,6 +845,10 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_FPS_SHOW,
"Display Framerate"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_MEMORY_SHOW,
"Include Memory Details"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_ENABLE,
"Limit Maximum Run Speed"
@ -1247,6 +1253,10 @@ MSG_HASH(
MENU_ENUM_LABEL_VALUE_INPUT_META_FRAMEADVANCE,
"Frameadvance"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_INPUT_META_FPS_TOGGLE,
"FPS toggle"
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_INPUT_META_FULLSCREEN_TOGGLE_KEY,
"Fullscreen toggle"
@ -3630,6 +3640,14 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_FPS_SHOW,
"Displays the current framerate per second onscreen."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_FRAMECOUNT_SHOW,
"Displays the current frame count onscreen."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_MEMORY_SHOW,
"Includes the current memory usage/total onscreen with FPS/Frames."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_INPUT_HOTKEY_BINDS,
"Configure hotkey settings."
@ -6265,7 +6283,7 @@ MSG_HASH(
)
MSG_HASH(
MENU_ENUM_LABEL_VALUE_FRAMECOUNT_SHOW,
"Show frame count on FPS display"
"Display Frame Count"
)
MSG_HASH(
MSG_CONFIG_OVERRIDE_LOADED,
@ -7789,4 +7807,4 @@ MSG_HASH(
"Warning: Missing assets, use the Online Updater if available"
)
MSG_HASH(MENU_ENUM_LABEL_VALUE_VIDEO_WINDOW_SAVE_POSITION,
"Remember Window Positions")
"Remember Window Position and Size")

63
lakka.h
View File

@ -24,67 +24,6 @@
#define LAKKA_UPDATE_DIR "/storage/.update/"
#define LAKKA_CONNMAN_DIR "/storage/.cache/connman/"
#ifdef HAVE_LAKKA_SWITCH
static char* SWITCH_GPU_PROFILES[] = {
"docked-overclock-3",
"docked-overclock-2",
"docked-overclock-1",
"docked",
"non-docked-overclock-5",
"non-docked-overclock-4",
"non-docked-overclock-3",
"non-docked-overclock-2",
"non-docked-overclock-1",
"non-docked",
"non-docked-underclock-1",
"non-docked-underclock-2",
"non-docked-underclock-3",
};
static char* SWITCH_GPU_SPEEDS[] = {
"998 Mhz",
"921 Mhz",
"844 Mhz",
"768 Mhz",
"691 Mhz",
"614 Mhz",
"537 Mhz",
"460 Mhz",
"384 Mhz",
"307 Mhz",
"230 Mhz",
"153 Mhz",
"76 Mhz"
};
static int SWITCH_BRIGHTNESS[] = {
10,
20,
30,
40,
50,
60,
70,
80,
90,
100
};
static char* SWITCH_CPU_PROFILES[] = {
"overclock-4",
"overclock-3",
"overclock-2",
"overclock-1",
"default",
};
static char* SWITCH_CPU_SPEEDS[] = {
"1912 MHz",
"1734 MHz",
"1530 MHz",
"1224 MHz",
"1020 MHz"
};
#endif
#include "switch_performance_profiles.h"
#endif

View File

@ -187,10 +187,13 @@ generic_deferred_push(deferred_push_core_content_dirs_subdir_list, DISPLAYLIST_
generic_deferred_push(deferred_push_lakka_list, DISPLAYLIST_LAKKA)
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
generic_deferred_push(deferred_push_switch_cpu_profile, DISPLAYLIST_SWITCH_CPU_PROFILE)
#endif
#ifdef HAVE_LAKKA_SWITCH
generic_deferred_push(deferred_push_switch_gpu_profile, DISPLAYLIST_SWITCH_GPU_PROFILE)
generic_deferred_push(deferred_push_switch_backlight_control, DISPLAYLIST_SWITCH_BACKLIGHT_CONTROL)
generic_deferred_push(deferred_push_switch_cpu_profile, DISPLAYLIST_SWITCH_CPU_PROFILE)
#endif
static int deferred_push_cursor_manager_list_deferred(
@ -906,6 +909,8 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
{
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_switch_backlight_control);
}
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
else if (strstr(label,
msg_hash_to_str(MENU_ENUM_LABEL_SWITCH_CPU_PROFILE)))
{

View File

@ -2524,25 +2524,34 @@ static int action_ok_deferred_list_stub(const char *path,
return 0;
}
#ifdef HAVE_LAKKA_SWITCH
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
static int action_ok_set_switch_cpu_profile(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
char* profile_name = SWITCH_CPU_PROFILES[entry_idx];
char command[PATH_MAX_LENGTH] = {0};
#ifdef HAVE_LAKKA_SWITCH
snprintf(command, sizeof(command), "cpu-profile set %s", profile_name);
system(command);
snprintf(command, sizeof(command), "Current profile set to %s", profile_name);
#else
config_get_ptr()->uints.libnx_overclock = entry_idx;
unsigned profile_clock = SWITCH_CPU_SPEEDS_VALUES[entry_idx];
pcvSetClockRate(PcvModule_Cpu, (u32)profile_clock);
snprintf(command, sizeof(command), "Current Clock set to %i", profile_clock);
#endif
runloop_msg_queue_push(command, 1, 90, true);
return menu_cbs_exit();
}
#endif
#ifdef HAVE_LAKKA_SWITCH
static int action_ok_set_switch_gpu_profile(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
@ -5187,6 +5196,8 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
#ifdef HAVE_LAKKA_SWITCH
case MENU_ENUM_LABEL_SWITCH_GPU_PROFILE:
case MENU_ENUM_LABEL_SWITCH_BACKLIGHT_CONTROL:
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
case MENU_ENUM_LABEL_SWITCH_CPU_PROFILE:
#endif
BIND_ACTION_OK(cbs, action_ok_push_default);
@ -5640,6 +5651,8 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs,
case MENU_SET_SWITCH_BRIGHTNESS:
BIND_ACTION_OK(cbs, action_ok_set_switch_backlight);
break;
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
case MENU_SET_SWITCH_CPU_PROFILE:
BIND_ACTION_OK(cbs, action_ok_set_switch_cpu_profile);
break;

View File

@ -40,6 +40,7 @@
#include "../../retroarch.h"
#include "../../content.h"
#include "../../dynamic.h"
#include "../../configuration.h"
#include "../../managers/cheat_manager.h"
@ -123,6 +124,8 @@ default_sublabel_macro(action_bind_sublabel_user_language, MENU_
default_sublabel_macro(action_bind_sublabel_max_swapchain_images, MENU_ENUM_SUBLABEL_VIDEO_MAX_SWAPCHAIN_IMAGES )
default_sublabel_macro(action_bind_sublabel_online_updater, MENU_ENUM_SUBLABEL_ONLINE_UPDATER)
default_sublabel_macro(action_bind_sublabel_fps_show, MENU_ENUM_SUBLABEL_FPS_SHOW)
default_sublabel_macro(action_bind_sublabel_framecount_show, MENU_ENUM_SUBLABEL_FRAMECOUNT_SHOW)
default_sublabel_macro(action_bind_sublabel_memory_show, MENU_ENUM_SUBLABEL_MEMORY_SHOW)
default_sublabel_macro(action_bind_sublabel_statistics_show, MENU_ENUM_SUBLABEL_STATISTICS_SHOW)
default_sublabel_macro(action_bind_sublabel_netplay_settings, MENU_ENUM_SUBLABEL_NETPLAY)
default_sublabel_macro(action_bind_sublabel_user_bind_settings, MENU_ENUM_SUBLABEL_INPUT_USER_BINDS)
@ -482,9 +485,12 @@ default_sublabel_macro(action_bind_sublabel_show_wimp,
#endif
default_sublabel_macro(action_bind_sublabel_discord_allow, MENU_ENUM_SUBLABEL_DISCORD_ALLOW)
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
default_sublabel_macro(action_bind_sublabel_switch_cpu_profile, MENU_ENUM_SUBLABEL_SWITCH_CPU_PROFILE)
#endif
#ifdef HAVE_LAKKA_SWITCH
default_sublabel_macro(action_bind_sublabel_switch_gpu_profile, MENU_ENUM_SUBLABEL_SWITCH_GPU_PROFILE)
default_sublabel_macro(action_bind_sublabel_switch_cpu_profile, MENU_ENUM_SUBLABEL_SWITCH_CPU_PROFILE)
default_sublabel_macro(action_bind_sublabel_switch_backlight_control, MENU_ENUM_SUBLABEL_SWITCH_BACKLIGHT_CONTROL)
#endif
@ -514,14 +520,14 @@ static int action_bind_sublabel_subsystem_add(
char *s, size_t len)
{
rarch_system_info_t *system = runloop_get_system_info();
const struct retro_subsystem_info *subsystem = (system && system->subsystem.data) ?
system->subsystem.data + (type - MENU_SETTINGS_SUBSYSTEM_ADD) : NULL;
const struct retro_subsystem_info *subsystem = (system && subsystem_size > 0) ?
subsystem_data + (type - MENU_SETTINGS_SUBSYSTEM_ADD) : NULL;
if (subsystem && content_get_subsystem_rom_id() < subsystem->num_roms)
if (subsystem_size > 0 && content_get_subsystem_rom_id() < subsystem->num_roms)
snprintf(s, len, " Current Content: %s",
content_get_subsystem() == type - MENU_SETTINGS_SUBSYSTEM_ADD
? subsystem->roms[content_get_subsystem_rom_id()].desc
: subsystem->roms[0].desc);
content_get_subsystem() == type - MENU_SETTINGS_SUBSYSTEM_ADD
? subsystem->roms[content_get_subsystem_rom_id()].desc
: subsystem->roms[0].desc);
return 0;
}
@ -540,8 +546,8 @@ static int action_bind_sublabel_remap_kbd_sublabel(
input_config_get_device_display_name(user_idx) ?
input_config_get_device_display_name(user_idx) :
(input_config_get_device_name(user_idx) ?
input_config_get_device_name(user_idx) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE)));
input_config_get_device_name(user_idx) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_NOT_AVAILABLE)));
return 0;
}
@ -1872,6 +1878,12 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_FPS_SHOW:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_fps_show);
break;
case MENU_ENUM_LABEL_FRAMECOUNT_SHOW:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_framecount_show);
break;
case MENU_ENUM_LABEL_MEMORY_SHOW:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_memory_show);
break;
case MENU_ENUM_LABEL_MENU_VIEWS_SETTINGS:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_views_settings_list);
break;
@ -2027,10 +2039,12 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_show_wimp);
break;
#endif
#ifdef HAVE_LAKKA_SWITCH
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
case MENU_ENUM_LABEL_SWITCH_CPU_PROFILE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_switch_cpu_profile);
break;
#endif
#ifdef HAVE_LAKKA_SWITCH
case MENU_ENUM_LABEL_SWITCH_GPU_PROFILE:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_switch_gpu_profile);
break;

View File

@ -210,9 +210,12 @@ default_title_copy_macro(action_get_title_cheevos_list, MENU_ENUM_LABE
default_title_copy_macro(action_get_title_video_shader_parameters,MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PARAMETERS)
default_title_copy_macro(action_get_title_video_shader_preset_parameters,MENU_ENUM_LABEL_VALUE_VIDEO_SHADER_PRESET_PARAMETERS)
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
default_title_macro(action_get_title_switch_cpu_profile, MENU_ENUM_LABEL_VALUE_SWITCH_CPU_PROFILE)
#endif
#ifdef HAVE_LAKKA_SWITCH
default_title_macro(action_get_title_switch_gpu_profile, MENU_ENUM_LABEL_VALUE_SWITCH_GPU_PROFILE)
default_title_macro(action_get_title_switch_cpu_profile, MENU_ENUM_LABEL_VALUE_SWITCH_CPU_PROFILE)
default_title_macro(action_get_title_switch_backlight_control, MENU_ENUM_LABEL_VALUE_SWITCH_BACKLIGHT_CONTROL)
#endif
@ -879,13 +882,15 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_LIBRETRO_INFO_PATH:
BIND_ACTION_GET_TITLE(cbs, action_get_title_core_info_directory);
break;
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
case MENU_ENUM_LABEL_SWITCH_CPU_PROFILE:
BIND_ACTION_GET_TITLE(cbs, action_get_title_switch_cpu_profile);
break;
#endif
#ifdef HAVE_LAKKA_SWITCH
case MENU_ENUM_LABEL_SWITCH_GPU_PROFILE:
BIND_ACTION_GET_TITLE(cbs, action_get_title_switch_gpu_profile);
break;
case MENU_ENUM_LABEL_SWITCH_CPU_PROFILE:
BIND_ACTION_GET_TITLE(cbs, action_get_title_switch_cpu_profile);
break;
case MENU_ENUM_LABEL_SWITCH_BACKLIGHT_CONTROL:
BIND_ACTION_GET_TITLE(cbs, action_get_title_switch_backlight_control);
break;
@ -1176,13 +1181,15 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
case MENU_LABEL_LIBRETRO_INFO_PATH:
BIND_ACTION_GET_TITLE(cbs, action_get_title_core_info_directory);
break;
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
case MENU_ENUM_LABEL_SWITCH_CPU_PROFILE:
BIND_ACTION_GET_TITLE(cbs, action_get_title_switch_cpu_profile);
break;
#endif
#ifdef HAVE_LAKKA_SWITCH
case MENU_ENUM_LABEL_SWITCH_GPU_PROFILE:
BIND_ACTION_GET_TITLE(cbs, action_get_title_switch_gpu_profile);
break;
case MENU_ENUM_LABEL_SWITCH_CPU_PROFILE:
BIND_ACTION_GET_TITLE(cbs, action_get_title_switch_cpu_profile);
break;
case MENU_ENUM_LABEL_SWITCH_BACKLIGHT_CONTROL:
BIND_ACTION_GET_TITLE(cbs, action_get_title_switch_backlight_control);
break;

View File

@ -45,6 +45,7 @@
#include "../../../core.h"
#include "../../../verbosity.h"
#include "../../../tasks/tasks_internal.h"
#include "../../../dynamic.h"
ozone_node_t *ozone_alloc_node()
{
@ -108,7 +109,7 @@ void ozone_free_list_nodes(file_list_t *list, bool actiondata)
}
}
static void *ozone_init(void **userdata, bool video_is_threaded)
static void *ozone_init(void **userdata, bool video_is_threaded)
{
bool fallback_color_theme = false;
unsigned width, height, color_theme = 0;
@ -183,7 +184,7 @@ static void *ozone_init(void **userdata, bool video_is_threaded)
if (settings->bools.menu_use_preferred_system_color_theme)
{
#ifdef HAVE_LIBNX
if (R_SUCCEEDED(setsysInitialize()))
if (R_SUCCEEDED(setsysInitialize()))
{
ColorSetId theme;
setsysGetColorSetId(&theme);
@ -205,7 +206,7 @@ static void *ozone_init(void **userdata, bool video_is_threaded)
color_theme = settings->uints.menu_ozone_color_theme;
ozone_set_color_theme(ozone, color_theme);
}
ozone->need_compute = false;
ozone->animations.scroll_y = 0.0f;
ozone->animations.scroll_y_sidebar = 0.0f;
@ -351,7 +352,10 @@ static void ozone_context_reset(void *data, bool is_threaded)
strlcat(filename, ".png", sizeof(filename));
if (!menu_display_reset_textures_list(filename, ozone->png_path, &ozone->textures[i], TEXTURE_FILTER_MIPMAP_LINEAR))
{
ozone->has_all_assets = false;
RARCH_WARN("[OZONE] Asset missing: %s%s%s\n", ozone->png_path, path_default_slash(), filename);
}
}
/* Sidebar textures */
@ -362,7 +366,10 @@ static void ozone_context_reset(void *data, bool is_threaded)
strlcat(filename, ".png", sizeof(filename));
if (!menu_display_reset_textures_list(filename, ozone->tab_path, &ozone->tab_textures[i], TEXTURE_FILTER_MIPMAP_LINEAR))
{
ozone->has_all_assets = false;
RARCH_WARN("[OZONE] Asset missing: %s%s%s\n", ozone->tab_path, path_default_slash(), filename);
}
}
/* Theme textures */
@ -371,8 +378,11 @@ static void ozone_context_reset(void *data, bool is_threaded)
/* Icons textures init */
for (i = 0; i < OZONE_ENTRIES_ICONS_TEXTURE_LAST; i++)
if (!menu_display_reset_textures_list(ozone_entries_icon_texture_path(ozone, i), ozone->icons_path, &ozone->icons_textures[i], TEXTURE_FILTER_MIPMAP_LINEAR))
if (!menu_display_reset_textures_list(ozone_entries_icon_texture_path(i), ozone->icons_path, &ozone->icons_textures[i], TEXTURE_FILTER_MIPMAP_LINEAR))
{
ozone->has_all_assets = false;
RARCH_WARN("[OZONE] Asset missing: %s%s%s\n", ozone->icons_path, path_default_slash(), ozone_entries_icon_texture_path(i));
}
menu_display_allocate_white_texture();
@ -427,7 +437,7 @@ static void ozone_context_destroy(void *data)
/* Textures */
for (i = 0; i < OZONE_TEXTURE_LAST; i++)
video_driver_texture_unload(&ozone->textures[i]);
/* Icons */
for (i = 0; i < OZONE_TAB_TEXTURE_LAST; i++)
video_driver_texture_unload(&ozone->tab_textures[i]);
@ -583,16 +593,13 @@ static int ozone_list_push(void *data, void *userdata,
if (settings->bools.menu_show_load_content)
{
const struct retro_subsystem_info* subsystem = NULL;
entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST;
menu_displaylist_setting(&entry);
subsystem = system->subsystem.data;
if (subsystem)
if (subsystem_size > 0)
{
for (i = 0; i < (unsigned)system->subsystem.size; i++, subsystem++)
const struct retro_subsystem_info* subsystem = subsystem_data;
for (i = 0; i < subsystem_size; i++, subsystem++)
{
char s[PATH_MAX_LENGTH];
if (content_get_subsystem() == i)
@ -675,10 +682,12 @@ static int ozone_list_push(void *data, void *userdata,
menu_displaylist_setting(&entry);
}
#ifdef HAVE_LAKKA_SWITCH
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
entry.enum_idx = MENU_ENUM_LABEL_SWITCH_CPU_PROFILE;
menu_displaylist_setting(&entry);
#endif
#ifdef HAVE_LAKKA_SWITCH
entry.enum_idx = MENU_ENUM_LABEL_SWITCH_GPU_PROFILE;
menu_displaylist_setting(&entry);
@ -774,15 +783,14 @@ static void ozone_update_scroll(ozone_handle_t *ozone, bool allow_animation, ozo
bottom_boundary = video_info_height - 87 - 78;
entries_middle = video_info_height/2;
if (current_selection_middle_onscreen != entries_middle)
new_scroll = ozone->animations.scroll_y - (current_selection_middle_onscreen - entries_middle);
new_scroll = ozone->animations.scroll_y - (current_selection_middle_onscreen - entries_middle);
if (new_scroll + ozone->entries_height < bottom_boundary)
new_scroll = -(78 + ozone->entries_height - bottom_boundary);
if (new_scroll > 0)
new_scroll = 0;
if (allow_animation)
{
/* Cursor animation */
@ -848,7 +856,7 @@ static void ozone_compute_entries_position(ozone_handle_t *ozone)
/* Entry */
menu_entry_t entry;
ozone_node_t *node = NULL;
menu_entry_init(&entry);
menu_entry_get(&entry, 0, (unsigned)i, NULL, true);
@ -911,7 +919,7 @@ static void ozone_render(void *data, bool is_idle)
ozone_handle_t *ozone = (ozone_handle_t*)data;
if (!data)
return;
if (ozone->need_compute)
{
ozone_compute_entries_position(ozone);
@ -1066,12 +1074,12 @@ static void ozone_draw_footer(ozone_handle_t *ozone, video_frame_info_t *video_i
menu_display_blend_end(video_info);
ozone_draw_text(video_info, ozone,
do_swap ?
do_swap ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_OK) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_BACK),
video_info->width - back_width, video_info->height - back_height + FONT_SIZE_FOOTER, TEXT_ALIGN_LEFT, video_info->width, video_info->height, ozone->fonts.footer, ozone->theme->text_rgba, false);
ozone_draw_text(video_info, ozone,
do_swap ?
do_swap ?
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_BACK) :
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_BASIC_MENU_CONTROLS_OK),
video_info->width - ok_width, video_info->height - ok_height + FONT_SIZE_FOOTER, TEXT_ALIGN_LEFT, video_info->width, video_info->height, ozone->fonts.footer, ozone->theme->text_rgba, false);
@ -1200,9 +1208,9 @@ static void ozone_frame(void *data, video_frame_info_t *video_info)
ozone->raster_blocks.sidebar.carr.coords.vertices = 0;
/* Background */
menu_display_draw_quad(video_info,
0, 0, video_info->width, video_info->height,
video_info->width, video_info->height,
menu_display_draw_quad(video_info,
0, 0, video_info->width, video_info->height,
video_info->width, video_info->height,
!video_info->libretro_running ? ozone->theme->background : ozone->theme->background_libretro_running
);
@ -1226,7 +1234,7 @@ static void ozone_frame(void *data, video_frame_info_t *video_info)
ozone->animations.scroll_y,
ozone->is_playlist
);
/* Old list */
if (ozone->draw_old_list)
ozone_draw_entries(ozone,
@ -1436,7 +1444,7 @@ static int ozone_menu_iterate(menu_handle_t *menu, void *userdata, enum menu_act
if (!ozone)
return generic_menu_iterate(menu, userdata, action);
selection_buf = menu_entries_get_selection_buf_ptr(0);
tag = (uintptr_t)selection_buf;
new_action = action;
@ -1466,7 +1474,7 @@ static int ozone_menu_iterate(menu_handle_t *menu, void *userdata, enum menu_act
tag = (uintptr_t)ozone;
new_selection = ozone->categories_selection_ptr - 1;
if (new_selection < 0)
new_selection = horizontal_list_size + ozone->system_tab_end;
@ -1706,7 +1714,7 @@ static void ozone_list_cache(void *data,
bottom_boundary = video_info_height - 87 - 78;
for (i = 0; i < entries_end; i++)
{
{
ozone_node_t *node = (ozone_node_t*) file_list_get_userdata_at_offset(selection_buf, i);
if (!node)

View File

@ -211,7 +211,10 @@ menu_texture_item ozone_entries_icon_get_texture(ozone_handle_t *ozone,
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_UI];
#ifdef HAVE_LAKKA_SWITCH
case MENU_ENUM_LABEL_SWITCH_GPU_PROFILE:
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
case MENU_ENUM_LABEL_SWITCH_CPU_PROFILE:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_POWER];
#endif
case MENU_ENUM_LABEL_POWER_MANAGEMENT_SETTINGS:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_POWER];
@ -274,6 +277,10 @@ menu_texture_item ozone_entries_icon_get_texture(ozone_handle_t *ozone,
case MENU_ENUM_LABEL_CHEAT_ADD_NEW_TOP:
case MENU_ENUM_LABEL_CHEAT_ADD_NEW_BOTTOM:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_MENU_ADD];
case MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_TOGGLE:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_MENU_APPLY_TOGGLE];
case MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_LOAD:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_MENU_APPLY_COG];
default:
break;
}
@ -307,6 +314,7 @@ menu_texture_item ozone_entries_icon_get_texture(ozone_handle_t *ozone,
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_CURSOR];
case FILE_TYPE_PLAYLIST_ENTRY:
case MENU_SETTING_ACTION_RUN:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_RUN];
case MENU_SETTING_ACTION_RESUME_ACHIEVEMENTS:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_RESUME];
case MENU_SETTING_ACTION_CLOSE:
@ -448,351 +456,234 @@ menu_texture_item ozone_entries_icon_get_texture(ozone_handle_t *ozone,
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_SUBSETTING];
}
const char *ozone_entries_icon_texture_path(ozone_handle_t *ozone, unsigned id)
const char *ozone_entries_icon_texture_path(unsigned id)
{
char icon_fullpath[255];
char *icon_name = NULL;
switch (id)
{
case OZONE_ENTRIES_ICONS_TEXTURE_MAIN_MENU:
#if defined(HAVE_LAKKA)
icon_name = "lakka.png";
break;
return "lakka.png";
#else
icon_name = "retroarch.png";
break;
return "retroarch.png";
#endif
case OZONE_ENTRIES_ICONS_TEXTURE_SETTINGS:
icon_name = "settings.png";
break;
return "settings.png";
case OZONE_ENTRIES_ICONS_TEXTURE_HISTORY:
icon_name = "history.png";
break;
return "history.png";
case OZONE_ENTRIES_ICONS_TEXTURE_FAVORITES:
icon_name = "favorites.png";
break;
return "favorites.png";
case OZONE_ENTRIES_ICONS_TEXTURE_ADD_FAVORITE:
icon_name = "add-favorite.png";
break;
return "add-favorite.png";
case OZONE_ENTRIES_ICONS_TEXTURE_MUSICS:
icon_name = "musics.png";
break;
return "musics.png";
#if defined(HAVE_FFMPEG) || defined(HAVE_MPV)
case OZONE_ENTRIES_ICONS_TEXTURE_MOVIES:
icon_name = "movies.png";
break;
return "movies.png";
#endif
#ifdef HAVE_IMAGEVIEWER
case OZONE_ENTRIES_ICONS_TEXTURE_IMAGES:
icon_name = "images.png";
break;
return "images.png";
#endif
case OZONE_ENTRIES_ICONS_TEXTURE_SETTING:
icon_name = "setting.png";
break;
return "setting.png";
case OZONE_ENTRIES_ICONS_TEXTURE_SUBSETTING:
icon_name = "subsetting.png";
break;
return "subsetting.png";
case OZONE_ENTRIES_ICONS_TEXTURE_ARROW:
icon_name = "arrow.png";
break;
return "arrow.png";
case OZONE_ENTRIES_ICONS_TEXTURE_RUN:
icon_name = "run.png";
break;
return "run.png";
case OZONE_ENTRIES_ICONS_TEXTURE_CLOSE:
icon_name = "close.png";
break;
return "close.png";
case OZONE_ENTRIES_ICONS_TEXTURE_RESUME:
icon_name = "resume.png";
break;
return "resume.png";
case OZONE_ENTRIES_ICONS_TEXTURE_CLOCK:
icon_name = "clock.png";
break;
return "clock.png";
case OZONE_ENTRIES_ICONS_TEXTURE_BATTERY_FULL:
icon_name = "battery-full.png";
break;
return "battery-full.png";
case OZONE_ENTRIES_ICONS_TEXTURE_BATTERY_CHARGING:
icon_name = "battery-charging.png";
break;
return "battery-charging.png";
case OZONE_ENTRIES_ICONS_TEXTURE_POINTER:
icon_name = "pointer.png";
break;
return "pointer.png";
case OZONE_ENTRIES_ICONS_TEXTURE_SAVESTATE:
icon_name = "savestate.png";
break;
return "savestate.png";
case OZONE_ENTRIES_ICONS_TEXTURE_LOADSTATE:
icon_name = "loadstate.png";
break;
return "loadstate.png";
case OZONE_ENTRIES_ICONS_TEXTURE_UNDO:
icon_name = "undo.png";
break;
return "undo.png";
case OZONE_ENTRIES_ICONS_TEXTURE_CORE_INFO:
icon_name = "core-infos.png";
break;
return "core-infos.png";
case OZONE_ENTRIES_ICONS_TEXTURE_WIFI:
icon_name = "wifi.png";
break;
return "wifi.png";
case OZONE_ENTRIES_ICONS_TEXTURE_CORE_OPTIONS:
icon_name = "core-options.png";
break;
return "core-options.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_REMAPPING_OPTIONS:
icon_name = "core-input-remapping-options.png";
break;
return "core-input-remapping-options.png";
case OZONE_ENTRIES_ICONS_TEXTURE_CHEAT_OPTIONS:
icon_name = "core-cheat-options.png";
break;
return "core-cheat-options.png";
case OZONE_ENTRIES_ICONS_TEXTURE_DISK_OPTIONS:
icon_name = "core-disk-options.png";
break;
return "core-disk-options.png";
case OZONE_ENTRIES_ICONS_TEXTURE_SHADER_OPTIONS:
icon_name = "core-shader-options.png";
break;
return "core-shader-options.png";
case OZONE_ENTRIES_ICONS_TEXTURE_ACHIEVEMENT_LIST:
icon_name = "achievement-list.png";
break;
return "achievement-list.png";
case OZONE_ENTRIES_ICONS_TEXTURE_SCREENSHOT:
icon_name = "screenshot.png";
break;
return "screenshot.png";
case OZONE_ENTRIES_ICONS_TEXTURE_RELOAD:
icon_name = "reload.png";
break;
return "reload.png";
case OZONE_ENTRIES_ICONS_TEXTURE_RENAME:
icon_name = "rename.png";
break;
return "rename.png";
case OZONE_ENTRIES_ICONS_TEXTURE_FILE:
icon_name = "file.png";
break;
return "file.png";
case OZONE_ENTRIES_ICONS_TEXTURE_FOLDER:
icon_name = "folder.png";
break;
return "folder.png";
case OZONE_ENTRIES_ICONS_TEXTURE_ZIP:
icon_name = "zip.png";
break;
return "zip.png";
case OZONE_ENTRIES_ICONS_TEXTURE_MUSIC:
icon_name = "music.png";
break;
return "music.png";
case OZONE_ENTRIES_ICONS_TEXTURE_FAVORITE:
icon_name = "favorites-content.png";
break;
return "favorites-content.png";
case OZONE_ENTRIES_ICONS_TEXTURE_IMAGE:
icon_name = "image.png";
break;
return "image.png";
case OZONE_ENTRIES_ICONS_TEXTURE_MOVIE:
icon_name = "movie.png";
break;
return "movie.png";
case OZONE_ENTRIES_ICONS_TEXTURE_CORE:
icon_name = "core.png";
break;
return "core.png";
case OZONE_ENTRIES_ICONS_TEXTURE_RDB:
icon_name = "database.png";
break;
return "database.png";
case OZONE_ENTRIES_ICONS_TEXTURE_CURSOR:
icon_name = "cursor.png";
break;
return "cursor.png";
case OZONE_ENTRIES_ICONS_TEXTURE_SWITCH_ON:
icon_name = "on.png";
break;
return "on.png";
case OZONE_ENTRIES_ICONS_TEXTURE_SWITCH_OFF:
icon_name = "off.png";
break;
return "off.png";
case OZONE_ENTRIES_ICONS_TEXTURE_ADD:
icon_name = "add.png";
break;
return "add.png";
#ifdef HAVE_NETWORKING
case OZONE_ENTRIES_ICONS_TEXTURE_NETPLAY:
icon_name = "netplay.png";
break;
return "netplay.png";
case OZONE_ENTRIES_ICONS_TEXTURE_ROOM:
icon_name = "menu_room.png";
break;
return "menu_room.png";
case OZONE_ENTRIES_ICONS_TEXTURE_ROOM_LAN:
icon_name = "menu_room_lan.png";
break;
return "menu_room_lan.png";
case OZONE_ENTRIES_ICONS_TEXTURE_ROOM_RELAY:
icon_name = "menu_room_relay.png";
break;
return "menu_room_relay.png";
#endif
case OZONE_ENTRIES_ICONS_TEXTURE_KEY:
icon_name = "key.png";
break;
return "key.png";
case OZONE_ENTRIES_ICONS_TEXTURE_KEY_HOVER:
icon_name = "key-hover.png";
break;
return "key-hover.png";
case OZONE_ENTRIES_ICONS_TEXTURE_DIALOG_SLICE:
icon_name = "dialog-slice.png";
break;
return "dialog-slice.png";
case OZONE_ENTRIES_ICONS_TEXTURE_ACHIEVEMENTS:
icon_name = "menu_achievements.png";
break;
return "menu_achievements.png";
case OZONE_ENTRIES_ICONS_TEXTURE_AUDIO:
icon_name = "menu_audio.png";
break;
return "menu_audio.png";
case OZONE_ENTRIES_ICONS_TEXTURE_DRIVERS:
icon_name = "menu_drivers.png";
break;
return "menu_drivers.png";
case OZONE_ENTRIES_ICONS_TEXTURE_EXIT:
icon_name = "menu_exit.png";
break;
return "menu_exit.png";
case OZONE_ENTRIES_ICONS_TEXTURE_FRAMESKIP:
icon_name = "menu_frameskip.png";
break;
return "menu_frameskip.png";
case OZONE_ENTRIES_ICONS_TEXTURE_HELP:
icon_name = "menu_help.png";
break;
return "menu_help.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INFO:
icon_name = "menu_info.png";
break;
return "menu_info.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_SETTINGS:
icon_name = "Libretro - Pad.png";
break;
return "Libretro - Pad.png";
case OZONE_ENTRIES_ICONS_TEXTURE_LATENCY:
icon_name = "menu_latency.png";
break;
return "menu_latency.png";
case OZONE_ENTRIES_ICONS_TEXTURE_NETWORK:
icon_name = "menu_network.png";
break;
return "menu_network.png";
case OZONE_ENTRIES_ICONS_TEXTURE_POWER:
icon_name = "menu_power.png";
break;
return "menu_power.png";
case OZONE_ENTRIES_ICONS_TEXTURE_RECORD:
icon_name = "menu_record.png";
break;
return "menu_record.png";
case OZONE_ENTRIES_ICONS_TEXTURE_SAVING:
icon_name = "menu_saving.png";
break;
return "menu_saving.png";
case OZONE_ENTRIES_ICONS_TEXTURE_UPDATER:
icon_name = "menu_updater.png";
break;
return "menu_updater.png";
case OZONE_ENTRIES_ICONS_TEXTURE_VIDEO:
icon_name = "menu_video.png";
break;
return "menu_video.png";
case OZONE_ENTRIES_ICONS_TEXTURE_MIXER:
icon_name = "menu_mixer.png";
break;
return "menu_mixer.png";
case OZONE_ENTRIES_ICONS_TEXTURE_LOG:
icon_name = "menu_log.png";
break;
return "menu_log.png";
case OZONE_ENTRIES_ICONS_TEXTURE_OSD:
icon_name = "menu_osd.png";
break;
return "menu_osd.png";
case OZONE_ENTRIES_ICONS_TEXTURE_UI:
icon_name = "menu_ui.png";
break;
return "menu_ui.png";
case OZONE_ENTRIES_ICONS_TEXTURE_USER:
icon_name = "menu_user.png";
break;
return "menu_user.png";
case OZONE_ENTRIES_ICONS_TEXTURE_PRIVACY:
icon_name = "menu_privacy.png";
break;
return "menu_privacy.png";
case OZONE_ENTRIES_ICONS_TEXTURE_PLAYLIST:
icon_name = "menu_playlist.png";
break;
return "menu_playlist.png";
case OZONE_ENTRIES_ICONS_TEXTURE_QUICKMENU:
icon_name = "menu_quickmenu.png";
break;
return "menu_quickmenu.png";
case OZONE_ENTRIES_ICONS_TEXTURE_REWIND:
icon_name = "menu_rewind.png";
break;
return "menu_rewind.png";
case OZONE_ENTRIES_ICONS_TEXTURE_OVERLAY:
icon_name = "menu_overlay.png";
break;
return "menu_overlay.png";
case OZONE_ENTRIES_ICONS_TEXTURE_OVERRIDE:
icon_name = "menu_override.png";
break;
return "menu_override.png";
case OZONE_ENTRIES_ICONS_TEXTURE_NOTIFICATIONS:
icon_name = "menu_notifications.png";
break;
return "menu_notifications.png";
case OZONE_ENTRIES_ICONS_TEXTURE_STREAM:
icon_name = "menu_stream.png";
break;
return "menu_stream.png";
case OZONE_ENTRIES_ICONS_TEXTURE_SHUTDOWN:
icon_name = "menu_shutdown.png";
break;
return "menu_shutdown.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_DPAD_U:
icon_name = "input_DPAD-U.png";
break;
return "input_DPAD-U.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_DPAD_D:
icon_name = "input_DPAD-D.png";
break;
return "input_DPAD-D.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_DPAD_L:
icon_name = "input_DPAD-L.png";
break;
return "input_DPAD-L.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_DPAD_R:
icon_name = "input_DPAD-R.png";
break;
return "input_DPAD-R.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_STCK_U:
icon_name = "input_STCK-U.png";
break;
return "input_STCK-U.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_STCK_D:
icon_name = "input_STCK-D.png";
break;
return "input_STCK-D.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_STCK_L:
icon_name = "input_STCK-L.png";
break;
return "input_STCK-L.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_STCK_R:
icon_name = "input_STCK-R.png";
break;
return "input_STCK-R.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_STCK_P:
icon_name = "input_STCK-P.png";
break;
return "input_STCK-P.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_BTN_U:
icon_name = "input_BTN-U.png";
break;
return "input_BTN-U.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_BTN_D:
icon_name = "input_BTN-D.png";
break;
return "input_BTN-D.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_BTN_L:
icon_name = "input_BTN-L.png";
break;
return "input_BTN-L.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_BTN_R:
icon_name = "input_BTN-R.png";
break;
return "input_BTN-R.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_LB:
icon_name = "input_LB.png";
break;
return "input_LB.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_RB:
icon_name = "input_RB.png";
break;
return "input_RB.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_LT:
icon_name = "input_LT.png";
break;
return "input_LT.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_RT:
icon_name = "input_RT.png";
break;
return "input_RT.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_SELECT:
icon_name = "input_SELECT.png";
break;
return "input_SELECT.png";
case OZONE_ENTRIES_ICONS_TEXTURE_INPUT_START:
icon_name = "input_START.png";
break;
return "input_START.png";
case OZONE_ENTRIES_ICONS_TEXTURE_CHECKMARK:
icon_name = "menu_check.png";
break;
return "menu_check.png";
case OZONE_ENTRIES_ICONS_TEXTURE_MENU_ADD:
icon_name = "menu_add.png";
break;
return "menu_add.png";
case OZONE_ENTRIES_ICONS_TEXTURE_BRIGHTNESS:
icon_name = "menu_brightnes.png";
break;
return "menu_brightness.png";
case OZONE_ENTRIES_ICONS_TEXTURE_PAUSE:
icon_name = "menu_pause.png";
break;
return "menu_pause.png";
case OZONE_ENTRIES_ICONS_TEXTURE_MENU_APPLY_TOGGLE:
return "menu_apply_toggle.png";
case OZONE_ENTRIES_ICONS_TEXTURE_MENU_APPLY_COG:
return "menu_apply_cog.png";
}
fill_pathname_join(
icon_fullpath,
ozone->icons_path,
icon_name,
sizeof(icon_fullpath)
);
if (!filestream_exists(icon_fullpath))
{
return "subsetting.png";
}
else
return icon_name;
return NULL;
}
void ozone_unload_theme_textures(ozone_handle_t *ozone)
@ -838,4 +729,4 @@ bool ozone_reset_theme_textures(ozone_handle_t *ozone)
}
return result;
}
}

View File

@ -196,10 +196,12 @@ enum
OZONE_ENTRIES_ICONS_TEXTURE_MENU_ADD,
OZONE_ENTRIES_ICONS_TEXTURE_BRIGHTNESS,
OZONE_ENTRIES_ICONS_TEXTURE_PAUSE,
OZONE_ENTRIES_ICONS_TEXTURE_MENU_APPLY_TOGGLE,
OZONE_ENTRIES_ICONS_TEXTURE_MENU_APPLY_COG,
OZONE_ENTRIES_ICONS_TEXTURE_LAST
};
const char *ozone_entries_icon_texture_path(ozone_handle_t *ozone, unsigned id);
const char *ozone_entries_icon_texture_path(unsigned id);
menu_texture_item ozone_entries_icon_get_texture(ozone_handle_t *ozone,
enum msg_hash_enums enum_idx, unsigned type, bool active);
@ -207,4 +209,4 @@ menu_texture_item ozone_entries_icon_get_texture(ozone_handle_t *ozone,
bool ozone_reset_theme_textures(ozone_handle_t *ozone);
void ozone_unload_theme_textures(ozone_handle_t *ozone);
#endif
#endif

View File

@ -55,6 +55,7 @@
#include "../widgets/menu_filebrowser.h"
#include "../../verbosity.h"
#include "../../dynamic.h"
#include "../../configuration.h"
#include "../../playlist.h"
#include "../../retroarch.h"
@ -204,6 +205,10 @@ enum
XMB_TEXTURE_MENU_ADD,
XMB_TEXTURE_BRIGHTNESS,
XMB_TEXTURE_PAUSE,
XMB_TEXTURE_DEFAULT,
XMB_TEXTURE_DEFAULT_CONTENT,
XMB_TEXTURE_MENU_APPLY_TOGGLE,
XMB_TEXTURE_MENU_APPLY_COG,
XMB_TEXTURE_LAST
};
@ -233,6 +238,7 @@ typedef struct xmb_handle
{
bool mouse_show;
bool use_ps3_layout;
bool assets_missing;
uint8_t system_tab_end;
uint8_t tabs[XMB_SYSTEM_TAB_MAX_LENGTH];
@ -2449,7 +2455,10 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
return xmb->textures.list[XMB_TEXTURE_UI];
#ifdef HAVE_LAKKA_SWITCH
case MENU_ENUM_LABEL_SWITCH_GPU_PROFILE:
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
case MENU_ENUM_LABEL_SWITCH_CPU_PROFILE:
return xmb->textures.list[XMB_TEXTURE_POWER];
#endif
case MENU_ENUM_LABEL_POWER_MANAGEMENT_SETTINGS:
return xmb->textures.list[XMB_TEXTURE_POWER];
@ -2511,6 +2520,10 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
case MENU_ENUM_LABEL_CHEAT_ADD_NEW_TOP:
case MENU_ENUM_LABEL_CHEAT_ADD_NEW_BOTTOM:
return xmb->textures.list[XMB_TEXTURE_MENU_ADD];
case MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_TOGGLE:
return xmb->textures.list[XMB_TEXTURE_MENU_APPLY_TOGGLE];
case MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_LOAD:
return xmb->textures.list[XMB_TEXTURE_MENU_APPLY_COG];
default:
break;
}
@ -2570,6 +2583,7 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
return xmb->textures.list[XMB_TEXTURE_CURSOR];
case FILE_TYPE_PLAYLIST_ENTRY:
case MENU_SETTING_ACTION_RUN:
return xmb->textures.list[XMB_TEXTURE_RUN];
case MENU_SETTING_ACTION_RESUME_ACHIEVEMENTS:
return xmb->textures.list[XMB_TEXTURE_RESUME];
case MENU_SETTING_ACTION_CLOSE:
@ -2953,7 +2967,14 @@ static int xmb_draw_item(
menu_display_set_alpha(color, MIN(node->alpha, xmb->alpha));
if (color[3] != 0)
if (
(!xmb->assets_missing) &&
(color[3] != 0) &&
(
(entry->checked) ||
!((entry_type >= MENU_SETTING_DROPDOWN_ITEM) && (entry_type <= MENU_SETTING_DROPDOWN_SETTING_UINT_ITEM_SPECIAL))
)
)
{
math_matrix_4x4 mymat_tmp;
menu_display_ctx_rotate_draw_t rotate_draw;
@ -2974,31 +2995,24 @@ static int xmb_draw_item(
menu_display_rotate_z(&rotate_draw, video_info);
if (
(entry->checked) ||
!((entry_type >= MENU_SETTING_DROPDOWN_ITEM) &&
(entry_type <= MENU_SETTING_DROPDOWN_SETTING_UINT_ITEM_SPECIAL))
)
{
xmb_draw_icon(video_info,
xmb->icon_size,
&mymat_tmp,
texture,
x,
y,
width,
height,
1.0,
rotation,
scale_factor,
&color[0],
xmb->shadow_offset);
}
xmb_draw_icon(video_info,
xmb->icon_size,
&mymat_tmp,
texture,
x,
y,
width,
height,
1.0,
rotation,
scale_factor,
&color[0],
xmb->shadow_offset);
}
menu_display_set_alpha(color, MIN(node->alpha, xmb->alpha));
if (texture_switch != 0 && color[3] != 0)
if (texture_switch != 0 && color[3] != 0 && !xmb->assets_missing)
xmb_draw_icon(video_info,
xmb->icon_size,
mymat,
@ -3751,7 +3765,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
size_t x_pos = xmb->icon_size / 6;
size_t x_pos_icon = xmb->margins_title_left;
if (coord_white[3] != 0)
if (coord_white[3] != 0 && !xmb->assets_missing)
xmb_draw_icon(video_info,
xmb->icon_size,
&mymat,
@ -3780,7 +3794,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
}
}
if (video_info->timedate_enable)
if (video_info->timedate_enable && !xmb->assets_missing)
{
menu_display_ctx_datetime_t datetime;
char timedate[255];
@ -3829,7 +3843,7 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
menu_display_set_alpha(coord_white,
MIN(xmb->textures_arrow_alpha, xmb->alpha));
if (coord_white[3] != 0)
if (coord_white[3] != 0 && !xmb->assets_missing)
xmb_draw_icon(video_info,
xmb->icon_size,
&mymat,
@ -3851,52 +3865,55 @@ static void xmb_frame(void *data, video_frame_info_t *video_info)
menu_display_blend_begin(video_info);
/* Horizontal tab icons */
for (i = 0; i <= xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL)
+ xmb->system_tab_end; i++)
if (!xmb->assets_missing)
{
xmb_node_t *node = xmb_get_node(xmb, i);
if (!node)
continue;
menu_display_set_alpha(item_color, MIN(node->alpha, xmb->alpha));
if (item_color[3] != 0)
for (i = 0; i <= xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL)
+ xmb->system_tab_end; i++)
{
menu_display_ctx_rotate_draw_t rotate_draw;
math_matrix_4x4 mymat;
uintptr_t texture = node->icon;
float x = xmb->x + xmb->categories_x_pos +
xmb->margins_screen_left +
xmb->icon_spacing_horizontal
* (i + 1) - xmb->icon_size / 2.0;
float y = xmb->margins_screen_top
+ xmb->icon_size / 2.0;
float rotation = 0;
float scale_factor = node->zoom;
xmb_node_t *node = xmb_get_node(xmb, i);
rotate_draw.matrix = &mymat;
rotate_draw.rotation = rotation;
rotate_draw.scale_x = scale_factor;
rotate_draw.scale_y = scale_factor;
rotate_draw.scale_z = 1;
rotate_draw.scale_enable = true;
if (!node)
continue;
menu_display_rotate_z(&rotate_draw, video_info);
menu_display_set_alpha(item_color, MIN(node->alpha, xmb->alpha));
xmb_draw_icon(video_info,
xmb->icon_size,
&mymat,
texture,
x,
y,
width,
height,
1.0,
rotation,
scale_factor,
&item_color[0],
xmb->shadow_offset);
if (item_color[3] != 0)
{
menu_display_ctx_rotate_draw_t rotate_draw;
math_matrix_4x4 mymat;
uintptr_t texture = node->icon;
float x = xmb->x + xmb->categories_x_pos +
xmb->margins_screen_left +
xmb->icon_spacing_horizontal
* (i + 1) - xmb->icon_size / 2.0;
float y = xmb->margins_screen_top
+ xmb->icon_size / 2.0;
float rotation = 0;
float scale_factor = node->zoom;
rotate_draw.matrix = &mymat;
rotate_draw.rotation = rotation;
rotate_draw.scale_x = scale_factor;
rotate_draw.scale_y = scale_factor;
rotate_draw.scale_z = 1;
rotate_draw.scale_enable = true;
menu_display_rotate_z(&rotate_draw, video_info);
xmb_draw_icon(video_info,
xmb->icon_size,
&mymat,
texture,
x,
y,
width,
height,
1.0,
rotation,
scale_factor,
&item_color[0],
xmb->shadow_offset);
}
}
}
@ -4619,354 +4636,236 @@ static bool xmb_load_image(void *userdata, void *data, enum menu_image_type type
static const char *xmb_texture_path(unsigned id)
{
char *iconpath = (char*) malloc(PATH_MAX_LENGTH * sizeof(char));
char *icon_name = (char*) malloc(PATH_MAX_LENGTH * sizeof(char));
char *icon_fullpath = (char*) malloc(PATH_MAX_LENGTH * sizeof(char));
iconpath[0] = icon_name[0] = icon_fullpath[0] = '\0';
switch (id)
{
case XMB_TEXTURE_MAIN_MENU:
#if defined(HAVE_LAKKA)
icon_name = "lakka.png";
break;
return "lakka.png";
#else
icon_name = "retroarch.png";
break;
return "retroarch.png";
#endif
case XMB_TEXTURE_SETTINGS:
icon_name = "settings.png";
break;
return "settings.png";
case XMB_TEXTURE_HISTORY:
icon_name = "history.png";
break;
return "history.png";
case XMB_TEXTURE_FAVORITES:
icon_name = "favorites.png";
break;
return "favorites.png";
case XMB_TEXTURE_ADD_FAVORITE:
icon_name = "add-favorite.png";
break;
return "add-favorite.png";
case XMB_TEXTURE_MUSICS:
icon_name = "musics.png";
break;
return "musics.png";
#if defined(HAVE_FFMPEG) || defined(HAVE_MPV)
case XMB_TEXTURE_MOVIES:
icon_name = "movies.png";
break;
return "movies.png";
#endif
#ifdef HAVE_IMAGEVIEWER
case XMB_TEXTURE_IMAGES:
icon_name = "images.png";
break;
return "images.png";
#endif
case XMB_TEXTURE_SETTING:
icon_name = "setting.png";
break;
return "setting.png";
case XMB_TEXTURE_SUBSETTING:
icon_name = "subsetting.png";
break;
return "subsetting.png";
case XMB_TEXTURE_ARROW:
icon_name = "arrow.png";
break;
return "arrow.png";
case XMB_TEXTURE_RUN:
icon_name = "run.png";
break;
return "run.png";
case XMB_TEXTURE_CLOSE:
icon_name = "close.png";
break;
return "close.png";
case XMB_TEXTURE_RESUME:
icon_name = "resume.png";
break;
return "resume.png";
case XMB_TEXTURE_CLOCK:
icon_name = "clock.png";
break;
return "clock.png";
case XMB_TEXTURE_BATTERY_FULL:
icon_name = "battery-full.png";
break;
return "battery-full.png";
case XMB_TEXTURE_BATTERY_CHARGING:
icon_name = "battery-charging.png";
break;
return "battery-charging.png";
case XMB_TEXTURE_POINTER:
icon_name = "pointer.png";
break;
return "pointer.png";
case XMB_TEXTURE_SAVESTATE:
icon_name = "savestate.png";
break;
return "savestate.png";
case XMB_TEXTURE_LOADSTATE:
icon_name = "loadstate.png";
break;
return "loadstate.png";
case XMB_TEXTURE_UNDO:
icon_name = "undo.png";
break;
return "undo.png";
case XMB_TEXTURE_CORE_INFO:
icon_name = "core-infos.png";
break;
return "core-infos.png";
case XMB_TEXTURE_WIFI:
icon_name = "wifi.png";
break;
return "wifi.png";
case XMB_TEXTURE_CORE_OPTIONS:
icon_name = "core-options.png";
break;
return "core-options.png";
case XMB_TEXTURE_INPUT_REMAPPING_OPTIONS:
icon_name = "core-input-remapping-options.png";
break;
return "core-input-remapping-options.png";
case XMB_TEXTURE_CHEAT_OPTIONS:
icon_name = "core-cheat-options.png";
break;
return "core-cheat-options.png";
case XMB_TEXTURE_DISK_OPTIONS:
icon_name = "core-disk-options.png";
break;
return "core-disk-options.png";
case XMB_TEXTURE_SHADER_OPTIONS:
icon_name = "core-shader-options.png";
break;
return "core-shader-options.png";
case XMB_TEXTURE_ACHIEVEMENT_LIST:
icon_name = "achievement-list.png";
break;
return "achievement-list.png";
case XMB_TEXTURE_SCREENSHOT:
icon_name = "screenshot.png";
break;
return "screenshot.png";
case XMB_TEXTURE_RELOAD:
icon_name = "reload.png";
break;
return "reload.png";
case XMB_TEXTURE_RENAME:
icon_name = "rename.png";
break;
return "rename.png";
case XMB_TEXTURE_FILE:
icon_name = "file.png";
break;
return "file.png";
case XMB_TEXTURE_FOLDER:
icon_name = "folder.png";
break;
return "folder.png";
case XMB_TEXTURE_ZIP:
icon_name = "zip.png";
break;
return "zip.png";
case XMB_TEXTURE_MUSIC:
icon_name = "music.png";
break;
return "music.png";
case XMB_TEXTURE_FAVORITE:
icon_name = "favorites-content.png";
break;
return "favorites-content.png";
case XMB_TEXTURE_IMAGE:
icon_name = "image.png";
break;
return "image.png";
case XMB_TEXTURE_MOVIE:
icon_name = "movie.png";
break;
return "movie.png";
case XMB_TEXTURE_CORE:
icon_name = "core.png";
break;
return "core.png";
case XMB_TEXTURE_RDB:
icon_name = "database.png";
break;
return "database.png";
case XMB_TEXTURE_CURSOR:
icon_name = "cursor.png";
break;
return "cursor.png";
case XMB_TEXTURE_SWITCH_ON:
icon_name = "on.png";
break;
return "on.png";
case XMB_TEXTURE_SWITCH_OFF:
icon_name = "off.png";
break;
return "off.png";
case XMB_TEXTURE_ADD:
icon_name = "add.png";
break;
return "add.png";
#ifdef HAVE_NETWORKING
case XMB_TEXTURE_NETPLAY:
icon_name = "netplay.png";
break;
return "netplay.png";
case XMB_TEXTURE_ROOM:
icon_name = "menu_room.png";
break;
return "menu_room.png";
case XMB_TEXTURE_ROOM_LAN:
icon_name = "menu_room_lan.png";
break;
return "menu_room_lan.png";
case XMB_TEXTURE_ROOM_RELAY:
icon_name = "menu_room_relay.png";
break;
return "menu_room_relay.png";
#endif
case XMB_TEXTURE_KEY:
icon_name = "key.png";
break;
return "key.png";
case XMB_TEXTURE_KEY_HOVER:
icon_name = "key-hover.png";
break;
return "key-hover.png";
case XMB_TEXTURE_DIALOG_SLICE:
icon_name = "dialog-slice.png";
break;
return "dialog-slice.png";
case XMB_TEXTURE_ACHIEVEMENTS:
icon_name = "menu_achievements.png";
break;
return "menu_achievements.png";
case XMB_TEXTURE_AUDIO:
icon_name = "menu_audio.png";
break;
return "menu_audio.png";
case XMB_TEXTURE_DRIVERS:
icon_name = "menu_drivers.png";
break;
return "menu_drivers.png";
case XMB_TEXTURE_EXIT:
icon_name = "menu_exit.png";
break;
return "menu_exit.png";
case XMB_TEXTURE_FRAMESKIP:
icon_name = "menu_frameskip.png";
break;
return "menu_frameskip.png";
case XMB_TEXTURE_HELP:
icon_name = "menu_help.png";
break;
return "menu_help.png";
case XMB_TEXTURE_INFO:
icon_name = "menu_info.png";
break;
return "menu_info.png";
case XMB_TEXTURE_INPUT_SETTINGS:
icon_name = "Libretro - Pad.png";
break;
return "Libretro - Pad.png";
case XMB_TEXTURE_LATENCY:
icon_name = "menu_latency.png";
break;
return "menu_latency.png";
case XMB_TEXTURE_NETWORK:
icon_name = "menu_network.png";
break;
return "menu_network.png";
case XMB_TEXTURE_POWER:
icon_name = "menu_power.png";
break;
return "menu_power.png";
case XMB_TEXTURE_RECORD:
icon_name = "menu_record.png";
break;
return "menu_record.png";
case XMB_TEXTURE_SAVING:
icon_name = "menu_saving.png";
break;
return "menu_saving.png";
case XMB_TEXTURE_UPDATER:
icon_name = "menu_updater.png";
break;
return "menu_updater.png";
case XMB_TEXTURE_VIDEO:
icon_name = "menu_video.png";
break;
return "menu_video.png";
case XMB_TEXTURE_MIXER:
icon_name = "menu_mixer.png";
break;
return "menu_mixer.png";
case XMB_TEXTURE_LOG:
icon_name = "menu_log.png";
break;
return "menu_log.png";
case XMB_TEXTURE_OSD:
icon_name = "menu_osd.png";
break;
return "menu_osd.png";
case XMB_TEXTURE_UI:
icon_name = "menu_ui.png";
break;
return "menu_ui.png";
case XMB_TEXTURE_USER:
icon_name = "menu_user.png";
break;
return "menu_user.png";
case XMB_TEXTURE_PRIVACY:
icon_name = "menu_privacy.png";
break;
return "menu_privacy.png";
case XMB_TEXTURE_PLAYLIST:
icon_name = "menu_playlist.png";
break;
return "menu_playlist.png";
case XMB_TEXTURE_QUICKMENU:
icon_name = "menu_quickmenu.png";
break;
return "menu_quickmenu.png";
case XMB_TEXTURE_REWIND:
icon_name = "menu_rewind.png";
break;
return "menu_rewind.png";
case XMB_TEXTURE_OVERLAY:
icon_name = "menu_overlay.png";
break;
return "menu_overlay.png";
case XMB_TEXTURE_OVERRIDE:
icon_name = "menu_override.png";
break;
return "menu_override.png";
case XMB_TEXTURE_NOTIFICATIONS:
icon_name = "menu_notifications.png";
break;
return "menu_notifications.png";
case XMB_TEXTURE_STREAM:
icon_name = "menu_stream.png";
break;
return "menu_stream.png";
case XMB_TEXTURE_SHUTDOWN:
icon_name = "menu_shutdown.png";
break;
return "menu_shutdown.png";
case XMB_TEXTURE_INPUT_DPAD_U:
icon_name = "input_DPAD-U.png";
break;
return "input_DPAD-U.png";
case XMB_TEXTURE_INPUT_DPAD_D:
icon_name = "input_DPAD-D.png";
break;
return "input_DPAD-D.png";
case XMB_TEXTURE_INPUT_DPAD_L:
icon_name = "input_DPAD-L.png";
break;
return "input_DPAD-L.png";
case XMB_TEXTURE_INPUT_DPAD_R:
icon_name = "input_DPAD-R.png";
break;
return "input_DPAD-R.png";
case XMB_TEXTURE_INPUT_STCK_U:
icon_name = "input_STCK-U.png";
break;
return "input_STCK-U.png";
case XMB_TEXTURE_INPUT_STCK_D:
icon_name = "input_STCK-D.png";
break;
return "input_STCK-D.png";
case XMB_TEXTURE_INPUT_STCK_L:
icon_name = "input_STCK-L.png";
break;
return "input_STCK-L.png";
case XMB_TEXTURE_INPUT_STCK_R:
icon_name = "input_STCK-R.png";
break;
return "input_STCK-R.png";
case XMB_TEXTURE_INPUT_STCK_P:
icon_name = "input_STCK-P.png";
break;
return "input_STCK-P.png";
case XMB_TEXTURE_INPUT_BTN_U:
icon_name = "input_BTN-U.png";
break;
return "input_BTN-U.png";
case XMB_TEXTURE_INPUT_BTN_D:
icon_name = "input_BTN-D.png";
break;
return "input_BTN-D.png";
case XMB_TEXTURE_INPUT_BTN_L:
icon_name = "input_BTN-L.png";
break;
return "input_BTN-L.png";
case XMB_TEXTURE_INPUT_BTN_R:
icon_name = "input_BTN-R.png";
break;
return "input_BTN-R.png";
case XMB_TEXTURE_INPUT_LB:
icon_name = "input_LB.png";
break;
return "input_LB.png";
case XMB_TEXTURE_INPUT_RB:
icon_name = "input_RB.png";
break;
return "input_RB.png";
case XMB_TEXTURE_INPUT_LT:
icon_name = "input_LT.png";
break;
return "input_LT.png";
case XMB_TEXTURE_INPUT_RT:
icon_name = "input_RT.png";
break;
return "input_RT.png";
case XMB_TEXTURE_INPUT_SELECT:
icon_name = "input_SELECT.png";
break;
return "input_SELECT.png";
case XMB_TEXTURE_INPUT_START:
icon_name = "input_START.png";
break;
return "input_START.png";
case XMB_TEXTURE_CHECKMARK:
icon_name = "menu_check.png";
break;
return "menu_check.png";
case XMB_TEXTURE_MENU_ADD:
icon_name = "menu_add.png";
break;
return "menu_add.png";
case XMB_TEXTURE_BRIGHTNESS:
icon_name = "menu_brightness.png";
break;
return "menu_brightness.png";
case XMB_TEXTURE_PAUSE:
icon_name = "menu_pause.png";
break;
return "menu_pause.png";
case XMB_TEXTURE_DEFAULT:
return "default.png";
case XMB_TEXTURE_DEFAULT_CONTENT:
return "default-content.png";
case XMB_TEXTURE_MENU_APPLY_TOGGLE:
return "menu_apply_toggle.png";
case XMB_TEXTURE_MENU_APPLY_COG:
return "menu_apply_cog.png";
}
fill_pathname_application_special(iconpath,
PATH_MAX_LENGTH * sizeof(char),
APPLICATION_SPECIAL_DIRECTORY_ASSETS_XMB_ICONS);
icon_fullpath = iconpath;
strlcat(icon_fullpath, icon_name, PATH_MAX_LENGTH * sizeof(char));
if (!filestream_exists(icon_fullpath))
{
RARCH_WARN("[XMB] Asset missing: %s\n", icon_fullpath);
return NULL;
}
else
return icon_name;
return NULL;
}
static void xmb_context_reset_textures(
@ -4974,25 +4873,42 @@ static void xmb_context_reset_textures(
{
unsigned i;
settings_t *settings = config_get_ptr();
xmb->assets_missing = false;
for (i = 0; i < XMB_TEXTURE_LAST; i++)
{
if (xmb_texture_path(i) == NULL)
if (!menu_display_reset_textures_list(xmb_texture_path(i), iconpath, &xmb->textures.list[i], TEXTURE_FILTER_MIPMAP_LINEAR))
{
/* If the icon doesn't exist at least try to return the subsetting icon*/
if (!(i == XMB_TEXTURE_DIALOG_SLICE || i == XMB_TEXTURE_KEY_HOVER || i == XMB_TEXTURE_KEY_HOVER))
menu_display_reset_textures_list(xmb_texture_path(XMB_TEXTURE_SUBSETTING), iconpath, &xmb->textures.list[i], TEXTURE_FILTER_MIPMAP_LINEAR);
continue;
RARCH_WARN("[XMB] Asset missing: %s%s\n", iconpath, xmb_texture_path(i));
/* If the icon is missing return the subsetting (because some themes are incomplete) */
if (!(i == XMB_TEXTURE_DIALOG_SLICE || i == XMB_TEXTURE_KEY_HOVER || i == XMB_TEXTURE_KEY))
{
/* OSD Warning only if subsetting icon is missing */
if (
!menu_display_reset_textures_list(xmb_texture_path(XMB_TEXTURE_SUBSETTING), iconpath, &xmb->textures.list[i], TEXTURE_FILTER_MIPMAP_LINEAR)
&& !(settings->uints.menu_xmb_theme == XMB_ICON_THEME_CUSTOM)
)
{
runloop_msg_queue_push(msg_hash_to_str(MSG_MISSING_ASSETS), 1, 256, false);
/* Do not draw icons if subsetting is missing */
goto error;
}
/* Do not draw icons if this ones are is missing */
switch (i)
{
case XMB_TEXTURE_POINTER:
case XMB_TEXTURE_ARROW:
case XMB_TEXTURE_CLOCK:
case XMB_TEXTURE_BATTERY_CHARGING:
case XMB_TEXTURE_BATTERY_FULL:
case XMB_TEXTURE_DEFAULT:
case XMB_TEXTURE_DEFAULT_CONTENT:
goto error;
}
}
}
menu_display_reset_textures_list(xmb_texture_path(i), iconpath, &xmb->textures.list[i], TEXTURE_FILTER_MIPMAP_LINEAR);
}
/* Warn only if critical assets are missing, some themes are incomplete */
if (
((xmb_texture_path(XMB_TEXTURE_SUBSETTING) == NULL)) && !(settings->uints.menu_xmb_theme == XMB_ICON_THEME_CUSTOM)
)
runloop_msg_queue_push(msg_hash_to_str(MSG_MISSING_ASSETS), 1, 256, false);
menu_display_allocate_white_texture();
xmb->main_menu_node.icon = xmb->textures.list[XMB_TEXTURE_MAIN_MENU];
@ -5037,6 +4953,12 @@ static void xmb_context_reset_textures(
xmb->netplay_tab_node.zoom = xmb->categories_active_zoom;
#endif
return;
error:
xmb->assets_missing = true ;
RARCH_WARN("[XMB] Critical asset missing, no icons will be drawn\n");
return;
}
static void xmb_context_reset_background(const char *iconpath)
@ -5622,16 +5544,14 @@ static int xmb_list_push(void *data, void *userdata,
if (settings->bools.menu_show_load_content)
{
const struct retro_subsystem_info* subsystem = NULL;
entry.enum_idx = MENU_ENUM_LABEL_LOAD_CONTENT_LIST;
menu_displaylist_setting(&entry);
subsystem = system->subsystem.data;
if (subsystem)
if (subsystem_size > 0)
{
for (i = 0; i < (unsigned)system->subsystem.size; i++, subsystem++)
const struct retro_subsystem_info* subsystem = subsystem_data;
for (i = 0; i < subsystem_size; i++, subsystem++)
{
char s[PATH_MAX_LENGTH];
if (content_get_subsystem() == i)
@ -5714,10 +5634,12 @@ static int xmb_list_push(void *data, void *userdata,
menu_displaylist_setting(&entry);
}
#ifdef HAVE_LAKKA_SWITCH
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
entry.enum_idx = MENU_ENUM_LABEL_SWITCH_CPU_PROFILE;
menu_displaylist_setting(&entry);
#endif
#ifdef HAVE_LAKKA_SWITCH
entry.enum_idx = MENU_ENUM_LABEL_SWITCH_GPU_PROFILE;
menu_displaylist_setting(&entry);

View File

@ -51,6 +51,11 @@
#include "../../lakka.h"
#endif
#ifdef HAVE_LIBNX
#include <switch.h>
#include "../../switch_performance_profiles.h"
#endif
#if defined(__linux__) || (defined(BSD) && !defined(__MACH__))
#include "../frontend/drivers/platform_unix.h"
#endif
@ -2584,25 +2589,6 @@ static int menu_displaylist_parse_load_content_settings(
#endif
rarch_system_info_t *system = runloop_get_system_info();
#if 0
const struct retro_subsystem_info* subsystem = system ? system->subsystem.data : NULL;
if (subsystem)
{
unsigned p;
for (p = 0; p < system->subsystem.size; p++, subsystem++)
{
char s[PATH_MAX_LENGTH];
snprintf(s, sizeof(s), "%s (%s)", msg_hash_to_str(MENU_ENUM_LABEL_VALUE_LOAD_CONTENT_LIST), subsystem->desc);
menu_entries_append_enum(info->list,
s,
msg_hash_to_str(MENU_ENUM_LABEL_LOAD_CONTENT_SPECIAL),
MENU_ENUM_LABEL_LOAD_CONTENT_SPECIAL,
MENU_SETTING_ACTION, 0, 0);
}
}
#endif
menu_entries_append_enum(info->list,
msg_hash_to_str(MENU_ENUM_LABEL_VALUE_RESUME_CONTENT),
msg_hash_to_str(MENU_ENUM_LABEL_RESUME_CONTENT),
@ -2633,7 +2619,7 @@ static int menu_displaylist_parse_load_content_settings(
if (settings->bools.quick_menu_show_save_load_state
#ifdef HAVE_CHEEVOS
&& !cheevos_hardcore_active
&& !cheevos_hardcore_active
#endif
)
{
@ -4284,7 +4270,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist
switch (type)
{
#ifdef HAVE_LAKKA_SWITCH
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
case DISPLAYLIST_SWITCH_CPU_PROFILE:
{
unsigned i;
@ -4293,17 +4279,22 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist
FILE *profile = NULL;
const size_t profiles_count = sizeof(SWITCH_CPU_PROFILES)/sizeof(SWITCH_CPU_PROFILES[1]);
runloop_msg_queue_push("Warning : extented overclocking can damage the Switch", 1, 90, true);
runloop_msg_queue_push("Warning : extended overclocking can damage the Switch", 1, 90, true);
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
#ifdef HAVE_LAKKA_SWITCH
profile = popen("cpu-profile get", "r");
fgets(current_profile, PATH_MAX_LENGTH, profile);
pclose(profile);
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
snprintf(text, sizeof(text),
"Current profile : %s", current_profile);
snprintf(text, sizeof(text), "Current profile : %s", current_profile);
#else
u32 currentClock = 0;
pcvGetClockRate(PcvModule_Cpu, &currentClock);
snprintf(text, sizeof(text), "Current Clock : %i", currentClock);
#endif
menu_entries_append_enum(info->list,
text,
"",
@ -4332,6 +4323,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist
break;
}
#if defined(HAVE_LAKKA_SWITCH)
case DISPLAYLIST_SWITCH_GPU_PROFILE:
{
unsigned i;
@ -4349,7 +4341,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
snprintf(text, sizeof(text), "Current profile : %s", current_profile);
menu_entries_append_enum(info->list,
text,
"",
@ -4402,7 +4394,8 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist
break;
}
#endif
#endif // HAVE_LAKKA_SWITCH
#endif // HAVE_LAKKA_SWITCH || HAVE_LIBNX
case DISPLAYLIST_MUSIC_LIST:
{
char combined_path[PATH_MAX_LENGTH];
@ -5619,11 +5612,14 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_FPS_SHOW,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_FRAMECOUNT_SHOW,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_STATISTICS_SHOW,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_FRAMECOUNT_SHOW,
MENU_ENUM_LABEL_MEMORY_SHOW,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_VIDEO_FONT_PATH,

View File

@ -183,6 +183,8 @@ enum menu_displaylist_ctl_state
#ifdef HAVE_LAKKA_SWITCH
DISPLAYLIST_SWITCH_GPU_PROFILE,
DISPLAYLIST_SWITCH_BACKLIGHT_CONTROL,
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
DISPLAYLIST_SWITCH_CPU_PROFILE,
#endif
DISPLAYLIST_PENDING_CLEAR

View File

@ -245,6 +245,8 @@ enum menu_settings_type
#ifdef HAVE_LAKKA_SWITCH
MENU_SET_SWITCH_GPU_PROFILE,
MENU_SET_SWITCH_BRIGHTNESS,
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
MENU_SET_SWITCH_CPU_PROFILE,
#endif

View File

@ -3750,8 +3750,7 @@ static bool setting_append_list(
menu_settings_list_current_add_cmd(list, list_info, CMD_EVENT_QUIT);
#endif
#if defined(HAVE_LAKKA)
#ifdef HAVE_LAKKA_SWITCH
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
CONFIG_ACTION(
list, list_info,
MENU_ENUM_LABEL_SWITCH_CPU_PROFILE,
@ -3759,7 +3758,10 @@ static bool setting_append_list(
&group_info,
&subgroup_info,
parent_group);
#endif
#if defined(HAVE_LAKKA)
#ifdef HAVE_LAKKA_SWITCH
CONFIG_ACTION(
list, list_info,
MENU_ENUM_LABEL_SWITCH_GPU_PROFILE,
@ -5102,6 +5104,21 @@ static bool setting_append_list(
general_read_handler,
SD_FLAG_NONE);
CONFIG_BOOL(
list, list_info,
&settings->bools.video_memory_show,
MENU_ENUM_LABEL_MEMORY_SHOW,
MENU_ENUM_LABEL_VALUE_MEMORY_SHOW,
memory_show,
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.video_statistics_show,
@ -5390,13 +5407,20 @@ static bool setting_append_list(
CMD_EVENT_VIDEO_APPLY_STATE_CHANGES);
settings_data_list_current_add_flags(list, list_info, SD_FLAG_LAKKA_ADVANCED);
CONFIG_ACTION(
list, list_info,
MENU_ENUM_LABEL_SCREEN_RESOLUTION,
MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION,
&group_info,
&subgroup_info,
parent_group);
#if defined(GEKKO) || defined(__CELLOS_LV2__)
if (true)
#else
if (!string_is_equal(video_display_server_get_ident(), "null"))
#endif
{
CONFIG_ACTION(
list, list_info,
MENU_ENUM_LABEL_SCREEN_RESOLUTION,
MENU_ENUM_LABEL_VALUE_SCREEN_RESOLUTION,
&group_info,
&subgroup_info,
parent_group);
}
CONFIG_UINT(
list, list_info,

View File

@ -39,6 +39,7 @@
#include "../../core.h"
#include "../../content.h"
#include "../../verbosity.h"
#include "../../dynamic.h"
static enum filebrowser_enums filebrowser_types = FILEBROWSER_NONE;
@ -83,10 +84,9 @@ void filebrowser_parse(menu_displaylist_info_t *info, unsigned type_data)
str_list = file_archive_get_file_list(path, info->exts);
else
{
rarch_system_info_t *system = runloop_get_system_info();
const struct retro_subsystem_info *subsystem = system->subsystem.data + content_get_subsystem();
const struct retro_subsystem_info *subsystem = &subsystem_data[content_get_subsystem()];
if (subsystem)
if (subsystem_size > 0)
str_list = file_archive_get_file_list(path, subsystem->roms[content_get_subsystem_rom_id()].valid_extensions);
}
}
@ -94,11 +94,9 @@ void filebrowser_parse(menu_displaylist_info_t *info, unsigned type_data)
{
if (filebrowser_types == FILEBROWSER_SELECT_FILE_SUBSYSTEM)
{
rarch_system_info_t *system = runloop_get_system_info();
const struct retro_subsystem_info *subsystem =
system->subsystem.data + content_get_subsystem();
const struct retro_subsystem_info *subsystem = &subsystem_data[content_get_subsystem()];
if (subsystem && content_get_subsystem_rom_id() < subsystem->num_roms)
if (subsystem_size > 0 && content_get_subsystem_rom_id() < subsystem->num_roms)
str_list = dir_list_new(path,
(filter_ext && info) ? subsystem->roms[content_get_subsystem_rom_id()].valid_extensions : NULL,
true, settings->bools.show_hidden_files, true, false);

View File

@ -671,6 +671,7 @@ enum msg_hash_enums
MENU_ENUM_LABEL_VALUE_INPUT_META_SCREENSHOT,
MENU_ENUM_LABEL_VALUE_INPUT_META_MUTE,
MENU_ENUM_LABEL_VALUE_INPUT_META_OSK,
MENU_ENUM_LABEL_VALUE_INPUT_META_FPS_TOGGLE,
MENU_ENUM_LABEL_VALUE_INPUT_META_NETPLAY_GAME_WATCH,
MENU_ENUM_LABEL_VALUE_INPUT_META_ENABLE_HOTKEY,
MENU_ENUM_LABEL_VALUE_INPUT_META_VOLUME_UP,
@ -1231,6 +1232,7 @@ enum msg_hash_enums
MENU_LABEL(SHADER_PREV),
MENU_LABEL(FRAME_ADVANCE),
MENU_LABEL(FPS_SHOW),
MENU_LABEL(MEMORY_SHOW),
MENU_LABEL(STATISTICS_SHOW),
MENU_LABEL(FRAMECOUNT_SHOW),
MENU_LABEL(BSV_RECORD_TOGGLE),
@ -2170,7 +2172,8 @@ enum msg_hash_enums
MENU_ENUM_LABEL_SWITCH_BACKLIGHT_CONTROL,
MENU_ENUM_LABEL_VALUE_SWITCH_BACKLIGHT_CONTROL,
MENU_ENUM_SUBLABEL_SWITCH_BACKLIGHT_CONTROL,
#endif
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
MENU_ENUM_LABEL_SWITCH_CPU_PROFILE,
MENU_ENUM_LABEL_VALUE_SWITCH_CPU_PROFILE,
MENU_ENUM_SUBLABEL_SWITCH_CPU_PROFILE,

View File

@ -311,7 +311,7 @@ static bool path_init_subsystem(void)
/* For subsystems, we know exactly which RAM types are supported. */
info = libretro_find_subsystem_info(
system->subsystem.data,
subsystem_data,
system->subsystem.size,
path_get(RARCH_PATH_SUBSYSTEM));

View File

@ -88,6 +88,17 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
05132C6621A74D7A00379846 /* ozone_texture.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ozone_texture.c; sourceTree = "<group>"; };
05132C6721A74D7B00379846 /* ozone_theme.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ozone_theme.h; sourceTree = "<group>"; };
05132C6821A74D7B00379846 /* ozone.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ozone.h; sourceTree = "<group>"; };
05132C6921A74D7B00379846 /* ozone_entries.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ozone_entries.c; sourceTree = "<group>"; };
05132C6A21A74D7B00379846 /* ozone.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ozone.c; sourceTree = "<group>"; };
05132C6B21A74D7B00379846 /* ozone_theme.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ozone_theme.c; sourceTree = "<group>"; };
05132C6C21A74D7B00379846 /* ozone_sidebar.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ozone_sidebar.c; sourceTree = "<group>"; };
05132C6D21A74D7B00379846 /* ozone_sidebar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ozone_sidebar.h; sourceTree = "<group>"; };
05132C6E21A74D7B00379846 /* ozone_display.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ozone_display.c; sourceTree = "<group>"; };
05132C6F21A74D7B00379846 /* ozone_texture.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ozone_texture.h; sourceTree = "<group>"; };
05132C7021A74D7B00379846 /* ozone_display.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ozone_display.h; sourceTree = "<group>"; };
05269A6120ABF20500C29F1E /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; };
05366512213F8BE5007E7EA0 /* thumbnailpackdownload.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = thumbnailpackdownload.cpp; sourceTree = "<group>"; };
05366513213F8BE5007E7EA0 /* ui_qt_application.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ui_qt_application.cpp; sourceTree = "<group>"; };
@ -514,7 +525,6 @@
05D7753320A5678300646447 /* griffin_cpp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = griffin_cpp.cpp; path = ../../griffin/griffin_cpp.cpp; sourceTree = "<group>"; };
05D7753420A5678400646447 /* griffin_glslang.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = griffin_glslang.cpp; path = ../../griffin/griffin_glslang.cpp; sourceTree = "<group>"; };
05EFAFC22191D64200D27059 /* stripes.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = stripes.c; sourceTree = "<group>"; };
05EFAFC32191D64200D27059 /* ozone.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ozone.c; sourceTree = "<group>"; };
05F2872F20F2BEEA00632D47 /* task_autodetect.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = task_autodetect.c; sourceTree = "<group>"; };
05F2873020F2BEEA00632D47 /* task_netplay_find_content.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = task_netplay_find_content.c; sourceTree = "<group>"; };
05F2873120F2BEEA00632D47 /* task_netplay_nat_traversal.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = task_netplay_nat_traversal.c; sourceTree = "<group>"; };
@ -610,6 +620,24 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
05132C6521A74D5100379846 /* ozone */ = {
isa = PBXGroup;
children = (
05132C6E21A74D7B00379846 /* ozone_display.c */,
05132C7021A74D7B00379846 /* ozone_display.h */,
05132C6921A74D7B00379846 /* ozone_entries.c */,
05132C6C21A74D7B00379846 /* ozone_sidebar.c */,
05132C6D21A74D7B00379846 /* ozone_sidebar.h */,
05132C6621A74D7A00379846 /* ozone_texture.c */,
05132C6F21A74D7B00379846 /* ozone_texture.h */,
05132C6B21A74D7B00379846 /* ozone_theme.c */,
05132C6721A74D7B00379846 /* ozone_theme.h */,
05132C6A21A74D7B00379846 /* ozone.c */,
05132C6821A74D7B00379846 /* ozone.h */,
);
path = ozone;
sourceTree = "<group>";
};
05366511213F8BE5007E7EA0 /* qt */ = {
isa = PBXGroup;
children = (
@ -801,12 +829,12 @@
isa = PBXGroup;
children = (
05A8C53520DB72F000FF7857 /* nuklear */,
05132C6521A74D5100379846 /* ozone */,
05A8C54020DB72F000FF7857 /* materialui.c */,
05A8C53420DB72F000FF7857 /* menu_generic.c */,
05A8C53320DB72F000FF7857 /* menu_generic.h */,
05A8C53D20DB72F000FF7857 /* nuklear.c */,
05A8C53E20DB72F000FF7857 /* null.c */,
05EFAFC32191D64200D27059 /* ozone.c */,
05A8C53C20DB72F000FF7857 /* rgui.c */,
05EFAFC22191D64200D27059 /* stripes.c */,
05A8C53220DB72F000FF7857 /* xmb.c */,

View File

@ -482,9 +482,10 @@ else
fi
if [ "$HAVE_X11" = 'no' ]; then
HAVE_XEXT=no; HAVE_XF86VM=no; HAVE_XINERAMA=no; HAVE_XSHM=no
HAVE_XEXT=no; HAVE_XF86VM=no; HAVE_XINERAMA=no; HAVE_XSHM=no; HAVE_XRANDR=no
fi
check_lib '' XRANDR -lXrandr
check_pkgconf XINERAMA xinerama
check_val '' XINERAMA -lXinerama

View File

@ -59,6 +59,7 @@ HAVE_OPENDINGUX_FBDEV=no # Opendingux fbdev context support
HAVE_OPENGLES=no # Use GLESv2 instead of desktop GL
HAVE_OPENGLES3=no # OpenGLES3 support
HAVE_X11=auto # everything X11.
HAVE_XRANDR=auto # Xrandr support.
HAVE_OMAP=no # OMAP video support
HAVE_XINERAMA=auto # Xinerama support.
HAVE_KMS=auto # KMS context support

View File

@ -2522,6 +2522,12 @@ static enum runloop_state runloop_check_state(
bool menu_is_alive = menu_driver_is_alive();
#endif
#ifdef HAVE_LIBNX
// Should be called once per frame
if(!appletMainLoop())
return RUNLOOP_STATE_QUIT;
#endif
BIT256_CLEAR_ALL_PTR(&current_input);
#ifdef HAVE_MENU
@ -2924,6 +2930,18 @@ static enum runloop_state runloop_check_state(
old_pressed = pressed;
}
/* Check FPS toggle */
{
static bool old_pressed = false;
bool pressed = BIT256_GET(
current_input, RARCH_FPS_TOGGLE);
if (pressed && !old_pressed)
command_event(CMD_EVENT_FPS_TOGGLE, NULL);
old_pressed = pressed;
}
/* Check recording toggle */
{
static bool old_pressed = false;

View File

@ -124,6 +124,9 @@
# Display framerate.
# fps_show = false
# Display memory.
# memory_show = false
# Display total number of frames rendered. (only displays if fps_show is enabled)
# framecount_show =

View File

@ -0,0 +1,125 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2018-2018 - Natinusala
* Copyright (C) 2018-2018 - M4xw
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
* ation, either version 3 of the License, or (at your option) any later version.
*
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with RetroArch.
* If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __SWITCH_PERFORMANCE_PROFILES_H
#define __SWITCH_PERFORMANCE_PROFILES_H
#if defined(HAVE_LAKKA_SWITCH) || defined(HAVE_LIBNX)
#ifdef HAVE_LAKKA_SWITCH
static char *SWITCH_GPU_PROFILES[] = {
"docked-overclock-3",
"docked-overclock-2",
"docked-overclock-1",
"docked",
"non-docked-overclock-5",
"non-docked-overclock-4",
"non-docked-overclock-3",
"non-docked-overclock-2",
"non-docked-overclock-1",
"non-docked",
"non-docked-underclock-1",
"non-docked-underclock-2",
"non-docked-underclock-3",
};
static char *SWITCH_GPU_SPEEDS[] = {
"998 Mhz",
"921 Mhz",
"844 Mhz",
"768 Mhz",
"691 Mhz",
"614 Mhz",
"537 Mhz",
"460 Mhz",
"384 Mhz",
"307 Mhz",
"230 Mhz",
"153 Mhz",
"76 Mhz"};
static int SWITCH_BRIGHTNESS[] = {
10,
20,
30,
40,
50,
60,
70,
80,
90,
100};
#endif
static char *SWITCH_CPU_PROFILES[] = {
#ifndef HAVE_LIBNX
"overclock-4",
"overclock-3",
"overclock-2",
"overclock-1",
"default",
#else
"Maximum Performance",
"High Performance",
"Boost Performance",
"Stock Performance",
"Powersaving Mode 1",
"Powersaving Mode 2",
"Powersaving Mode 3",
#endif
};
#define SWITCH_DEFAULT_CPU_PROFILE 3 /* Stock Performance */
#define LIBNX_MAX_CPU_PROFILE 0 /* Max Performance */
static char *SWITCH_CPU_SPEEDS[] = {
#ifndef HAVE_LIBNX
"1912 MHz",
"1734 MHz",
"1530 MHz",
"1224 MHz",
"1020 MHz"
#else
"1785 MHz",
"1581 MHz",
"1224 MHz",
"1020 MHz",
"918 MHz",
"816 MHz",
"714 MHz"
#endif
};
static unsigned SWITCH_CPU_SPEEDS_VALUES[] = {
#ifndef HAVE_LIBNX
1912000000,
1734000000,
1530000000,
1224000000,
1020000000
#else
1785000000,
1581000000,
1224000000,
1020000000,
918000000,
816000000,
714000000
#endif
};
#endif
#endif

View File

@ -114,6 +114,11 @@ static bool input_autoconfigured[MAX_USERS];
static unsigned input_device_name_index[MAX_INPUT_DEVICES];
static bool input_autoconfigure_swap_override;
/* TODO/FIXME - Not thread safe to access this
* on main thread as well in its current state -
* menu_input.c - menu_event calls this function
* right now, while the underlying variable can
* be modified by a task thread. */
bool input_autoconfigure_get_swap_override(void)
{
return input_autoconfigure_swap_override;

View File

@ -1782,11 +1782,11 @@ void content_set_subsystem(unsigned idx)
{
rarch_system_info_t *system = runloop_get_system_info();
const struct retro_subsystem_info *subsystem = system ?
system->subsystem.data + idx : NULL;
subsystem_data + idx : NULL;
pending_subsystem_id = idx;
if (subsystem)
if (subsystem_size > 0)
{
strlcpy(pending_subsystem_ident,
subsystem->ident, sizeof(pending_subsystem_ident));

View File

@ -126,9 +126,12 @@ void retro_main_log_file_init(const char *path)
void retro_main_log_file_deinit(void)
{
if (log_file_fp && log_file_fp != stderr)
{
fclose(log_file_fp);
if (log_file_buf) free(log_file_buf);
log_file_fp = NULL;
log_file_fp = NULL;
}
if (log_file_buf)
free(log_file_buf);
log_file_buf = NULL;
}