Fix rare race condition issue causing white screens

This commit is contained in:
TuxSH 2023-07-18 00:47:57 +02:00
parent 497e1904d5
commit a03988b05d
4 changed files with 17 additions and 5 deletions

View File

@ -261,6 +261,7 @@ int main(void)
Draw_Init(); Draw_Init();
Cheat_SeedRng(svcGetSystemTick()); Cheat_SeedRng(svcGetSystemTick());
ScreenFiltersMenu_LoadConfig();
MyThread *menuThread = menuCreateThread(); MyThread *menuThread = menuCreateThread();
MyThread *taskRunnerThread = taskRunnerCreateThread(); MyThread *taskRunnerThread = taskRunnerCreateThread();

View File

@ -270,7 +270,6 @@ void menuThreadMain(void)
while (!isServiceUsable("ac:u") || !isServiceUsable("hid:USER") || !isServiceUsable("gsp::Gpu") || !isServiceUsable("cdc:CHK")) while (!isServiceUsable("ac:u") || !isServiceUsable("hid:USER") || !isServiceUsable("gsp::Gpu") || !isServiceUsable("cdc:CHK"))
svcSleepThread(250 * 1000 * 1000LL); svcSleepThread(250 * 1000 * 1000LL);
ScreenFiltersMenu_LoadConfig();
handleShellOpened(); handleShellOpened();
hidInit(); // assume this doesn't fail hidInit(); // assume this doesn't fail

View File

@ -45,12 +45,21 @@ typedef union {
ScreenFilter topScreenFilter; ScreenFilter topScreenFilter;
ScreenFilter bottomScreenFilter; ScreenFilter bottomScreenFilter;
static inline bool ScreenFiltersMenu_IsDefaultSettingsFilter(const ScreenFilter *filter)
{
bool ok = true;
ok = ok && filter->cct == 6500;
ok = ok && !filter->invert;
ok = ok && filter->gamma == 1.0f;
ok = ok && filter->contrast == 1.0f;
ok = ok && filter->brightness == 0.0f;
return ok;
}
static inline bool ScreenFiltersMenu_IsDefaultSettings(void) static inline bool ScreenFiltersMenu_IsDefaultSettings(void)
{ {
static const ScreenFilter defaultFilter = { 6500, false, 1.0f, 1.0f, 0.0f }; return ScreenFiltersMenu_IsDefaultSettingsFilter(&topScreenFilter) && ScreenFiltersMenu_IsDefaultSettingsFilter(&bottomScreenFilter);
bool ok1 = memcmp(&topScreenFilter, &defaultFilter, sizeof(defaultFilter)) == 0;
bool ok2 = memcmp(&bottomScreenFilter, &defaultFilter, sizeof(defaultFilter)) == 0;
return ok1 && ok2;
} }
static inline u8 ScreenFiltersMenu_GetColorLevel(int inLevel, float wp, float a, float b, float g) static inline u8 ScreenFiltersMenu_GetColorLevel(int inLevel, float wp, float a, float b, float g)

View File

@ -78,6 +78,9 @@ static void forceAudioOutput(u32 forceOp)
void handleShellOpened(void) void handleShellOpened(void)
{ {
// Somtimes this is called before Rosalina thread main executes,
// sometimes not... how fun :))
s64 out = 0; s64 out = 0;
svcGetSystemInfo(&out, 0x10000, 4); svcGetSystemInfo(&out, 0x10000, 4);
u32 multiConfig = (u32)out; u32 multiConfig = (u32)out;