diff --git a/desmume/src/cocoa/cocoa_globals.h b/desmume/src/cocoa/cocoa_globals.h index 30b628e04..e5f566255 100644 --- a/desmume/src/cocoa/cocoa_globals.h +++ b/desmume/src/cocoa/cocoa_globals.h @@ -417,6 +417,7 @@ enum MESSAGE_RESIZE_VIEW, MESSAGE_TRANSFORM_VIEW, MESSAGE_REDRAW_VIEW, + MESSAGE_RELOAD_AND_REDRAW, MESSAGE_REPROCESS_AND_REDRAW, MESSAGE_SET_GPU_STATE_FLAGS, MESSAGE_CHANGE_DISPLAY_TYPE, diff --git a/desmume/src/cocoa/cocoa_output.h b/desmume/src/cocoa/cocoa_output.h index 22ee2f475..0b8539dc9 100644 --- a/desmume/src/cocoa/cocoa_output.h +++ b/desmume/src/cocoa/cocoa_output.h @@ -181,6 +181,7 @@ typedef struct - (void) handleResizeView:(NSData *)rectData; - (void) handleTransformView:(NSData *)transformData; - (void) handleRedrawView; +- (void) handleReloadAndRedraw; - (void) handleReprocessAndRedraw; - (void) handleChangeDisplayOrientation:(NSData *)displayOrientationIdData; - (void) handleChangeDisplayOrder:(NSData *)displayOrderIdData; diff --git a/desmume/src/cocoa/cocoa_output.mm b/desmume/src/cocoa/cocoa_output.mm index 2baf58bba..8d423f04a 100644 --- a/desmume/src/cocoa/cocoa_output.mm +++ b/desmume/src/cocoa/cocoa_output.mm @@ -797,6 +797,10 @@ switch (message) { + case MESSAGE_RELOAD_AND_REDRAW: + [self handleReloadAndRedraw]; + break; + case MESSAGE_REPROCESS_AND_REDRAW: [self handleReprocessAndRedraw]; break; @@ -920,6 +924,12 @@ [(id)delegate doRedraw]; } +- (void) handleReloadAndRedraw +{ + [self handleReceiveGPUFrame]; + [self handleEmuFrameProcessed]; +} + - (void) handleReprocessAndRedraw { [self handleEmuFrameProcessed]; diff --git a/desmume/src/cocoa/userinterface/DisplayWindowController.mm b/desmume/src/cocoa/userinterface/DisplayWindowController.mm index 0727e8ab0..64c1ee3bf 100644 --- a/desmume/src/cocoa/userinterface/DisplayWindowController.mm +++ b/desmume/src/cocoa/userinterface/DisplayWindowController.mm @@ -343,7 +343,7 @@ static std::unordered_map _screenMap; // - (void) setVideoFiltersPreferGPU:(BOOL)theState { [[self view] setVideoFiltersPreferGPU:theState]; - [CocoaDSUtil messageSendOneWay:[[self cdsVideoOutput] receivePort] msgID:MESSAGE_REPROCESS_AND_REDRAW]; + [CocoaDSUtil messageSendOneWay:[[self cdsVideoOutput] receivePort] msgID:MESSAGE_RELOAD_AND_REDRAW]; } - (BOOL) videoFiltersPreferGPU @@ -354,7 +354,7 @@ static std::unordered_map _screenMap; // - (void) setVideoSourceDeposterize:(BOOL)theState { [[self view] setSourceDeposterize:theState]; - [CocoaDSUtil messageSendOneWay:[[self cdsVideoOutput] receivePort] msgID:MESSAGE_REPROCESS_AND_REDRAW]; + [CocoaDSUtil messageSendOneWay:[[self cdsVideoOutput] receivePort] msgID:MESSAGE_RELOAD_AND_REDRAW]; } - (BOOL) videoSourceDeposterize @@ -376,7 +376,7 @@ static std::unordered_map _screenMap; // - (void) setVideoPixelScaler:(NSInteger)filterID { [[self view] setPixelScaler:filterID]; - [CocoaDSUtil messageSendOneWay:[[self cdsVideoOutput] receivePort] msgID:MESSAGE_REPROCESS_AND_REDRAW]; + [CocoaDSUtil messageSendOneWay:[[self cdsVideoOutput] receivePort] msgID:MESSAGE_RELOAD_AND_REDRAW]; } - (NSInteger) videoPixelScaler @@ -926,11 +926,13 @@ static std::unordered_map _screenMap; // - (IBAction) writeDefaultsDisplayRotation:(id)sender { [[NSUserDefaults standardUserDefaults] setDouble:[self displayRotation] forKey:@"DisplayView_Rotation"]; + [[NSUserDefaults standardUserDefaults] synchronize]; } - (IBAction) writeDefaultsDisplayGap:(id)sender { [[NSUserDefaults standardUserDefaults] setDouble:([self displayGap] * 100.0) forKey:@"DisplayViewCombo_Gap"]; + [[NSUserDefaults standardUserDefaults] synchronize]; } - (IBAction) writeDefaultsHUDSettings:(id)sender @@ -944,6 +946,8 @@ static std::unordered_map _screenMap; // [[NSUserDefaults standardUserDefaults] setBool:[[self view] isHUDRealTimeClockVisible] forKey:@"HUD_ShowRTC"]; // TODO: Show HUD Input. //[[NSUserDefaults standardUserDefaults] setBool:[[self view] isHUDInputVisible] forKey:@"HUD_ShowInput"]; + + [[NSUserDefaults standardUserDefaults] synchronize]; } - (IBAction) writeDefaultsDisplayVideoSettings:(id)sender @@ -953,6 +957,8 @@ static std::unordered_map _screenMap; // [[NSUserDefaults standardUserDefaults] setInteger:[self videoOutputFilter] forKey:@"DisplayView_OutputFilter"]; [[NSUserDefaults standardUserDefaults] setInteger:[self videoPixelScaler] forKey:@"DisplayView_VideoFilter"]; [[NSUserDefaults standardUserDefaults] setBool:[[self view] useVerticalSync] forKey:@"DisplayView_UseVerticalSync"]; + + [[NSUserDefaults standardUserDefaults] synchronize]; } #pragma mark NSUserInterfaceValidations Protocol diff --git a/desmume/src/cocoa/userinterface/EmuControllerDelegate.mm b/desmume/src/cocoa/userinterface/EmuControllerDelegate.mm index 1a105aa2f..6397de580 100644 --- a/desmume/src/cocoa/userinterface/EmuControllerDelegate.mm +++ b/desmume/src/cocoa/userinterface/EmuControllerDelegate.mm @@ -348,7 +348,7 @@ { DisplayWindowController *newWindowController = [[DisplayWindowController alloc] initWithWindowNibName:@"DisplayWindow" emuControlDelegate:self]; - [CocoaDSUtil messageSendOneWay:[[newWindowController cdsVideoOutput] receivePort] msgID:MESSAGE_REPROCESS_AND_REDRAW]; + [CocoaDSUtil messageSendOneWay:[[newWindowController cdsVideoOutput] receivePort] msgID:MESSAGE_RELOAD_AND_REDRAW]; [[newWindowController window] makeKeyAndOrderFront:self]; [[newWindowController window] makeMainWindow]; @@ -954,6 +954,8 @@ [[NSUserDefaults standardUserDefaults] setBool:[[cdsCore cdsGPU] render3DMultisample] forKey:@"Render3D_Multisample"]; [[NSUserDefaults standardUserDefaults] setBool:[[cdsCore cdsGPU] render3DFragmentSamplingHack] forKey:@"Render3D_FragmentSamplingHack"]; [[NSUserDefaults standardUserDefaults] setInteger:[[cdsCore cdsGPU] gpuScale] forKey:@"Render3D_ScalingFactor"]; + + [[NSUserDefaults standardUserDefaults] synchronize]; } - (IBAction) writeDefaultsEmulationSettings:(id)sender @@ -981,6 +983,8 @@ [[NSUserDefaults standardUserDefaults] setObject:[firmwareDict valueForKey:@"FavoriteColor"] forKey:@"FirmwareConfig_FavoriteColor"]; [[NSUserDefaults standardUserDefaults] setObject:[firmwareDict valueForKey:@"Birthday"] forKey:@"FirmwareConfig_Birthday"]; [[NSUserDefaults standardUserDefaults] setObject:[firmwareDict valueForKey:@"Language"] forKey:@"FirmwareConfig_Language"]; + + [[NSUserDefaults standardUserDefaults] synchronize]; } - (IBAction) writeDefaultsSlot1Settings:(id)sender @@ -989,6 +993,8 @@ [[NSUserDefaults standardUserDefaults] setInteger:[cdsCore slot1DeviceType] forKey:@"EmulationSlot1_DeviceType"]; [[NSUserDefaults standardUserDefaults] setObject:[[cdsCore slot1R4URL] path] forKey:@"EmulationSlot1_R4StoragePath"]; + + [[NSUserDefaults standardUserDefaults] synchronize]; } - (IBAction) writeDefaultsSoundSettings:(id)sender @@ -1001,6 +1007,8 @@ [[NSUserDefaults standardUserDefaults] setInteger:[[speakerBindings valueForKey:@"spuInterpolationMode"] integerValue] forKey:@"SPU_InterpolationMode"]; [[NSUserDefaults standardUserDefaults] setInteger:[[speakerBindings valueForKey:@"spuSyncMode"] integerValue] forKey:@"SPU_SyncMode"]; [[NSUserDefaults standardUserDefaults] setInteger:[[speakerBindings valueForKey:@"spuSyncMethod"] integerValue] forKey:@"SPU_SyncMethod"]; + + [[NSUserDefaults standardUserDefaults] synchronize]; } - (IBAction) writeDefaultsStylusSettings:(id)sender @@ -1010,6 +1018,8 @@ [[NSUserDefaults standardUserDefaults] setInteger:[cdsController stylusPressure] forKey:@"Emulation_StylusPressure"]; [[NSUserDefaults standardUserDefaults] setBool:[cdsController stylusEnableJitter] forKey:@"Emulation_StylusEnableJitter"]; + + [[NSUserDefaults standardUserDefaults] synchronize]; } - (IBAction) closeSheet:(id)sender @@ -1497,7 +1507,7 @@ for (DisplayWindowController *windowController in windowList) { - [CocoaDSUtil messageSendOneWay:[[windowController cdsVideoOutput] receivePort] msgID:MESSAGE_REPROCESS_AND_REDRAW]; + [CocoaDSUtil messageSendOneWay:[[windowController cdsVideoOutput] receivePort] msgID:MESSAGE_RELOAD_AND_REDRAW]; } [self setStatusText:NSSTRING_STATUS_EMULATOR_RESET]; @@ -1800,7 +1810,7 @@ for (DisplayWindowController *windowController in windowList) { - [CocoaDSUtil messageSendOneWay:[[windowController cdsVideoOutput] receivePort] msgID:MESSAGE_REPROCESS_AND_REDRAW]; + [CocoaDSUtil messageSendOneWay:[[windowController cdsVideoOutput] receivePort] msgID:MESSAGE_RELOAD_AND_REDRAW]; } [self setStatusText:NSSTRING_STATUS_ROM_LOADED]; @@ -1879,7 +1889,7 @@ [[cdsCore cdsGPU] clearWithColor:0x8000]; for (DisplayWindowController *windowController in windowList) { - [CocoaDSUtil messageSendOneWay:[[windowController cdsVideoOutput] receivePort] msgID:MESSAGE_REPROCESS_AND_REDRAW]; + [CocoaDSUtil messageSendOneWay:[[windowController cdsVideoOutput] receivePort] msgID:MESSAGE_RELOAD_AND_REDRAW]; } [self setStatusText:NSSTRING_STATUS_ROM_UNLOADED]; diff --git a/desmume/src/cocoa/userinterface/InputManager.mm b/desmume/src/cocoa/userinterface/InputManager.mm index fd5b858d5..babf90586 100644 --- a/desmume/src/cocoa/userinterface/InputManager.mm +++ b/desmume/src/cocoa/userinterface/InputManager.mm @@ -373,7 +373,9 @@ static NSDictionary *hidUsageTable = nil; NSMutableDictionary *newInputDeviceDict = [NSMutableDictionary dictionaryWithDictionary:savedInputDeviceDict]; [newInputDeviceDict setObject:[self propertiesDictionary] forKey:[self identifier]]; + [[NSUserDefaults standardUserDefaults] setObject:newInputDeviceDict forKey:@"Input_SavedDeviceProperties"]; + [[NSUserDefaults standardUserDefaults] synchronize]; } - (void) start @@ -1593,6 +1595,7 @@ static std::unordered_map keyboardNameTable; // Key - (void) writeDefaultsInputMappings { [[NSUserDefaults standardUserDefaults] setObject:[self inputMappings] forKey:@"Input_ControllerMappings"]; + [[NSUserDefaults standardUserDefaults] synchronize]; } - (NSString *) commandTagFromInputList:(NSArray *)inputList diff --git a/desmume/src/cocoa/userinterface/RomInfoPanel.mm b/desmume/src/cocoa/userinterface/RomInfoPanel.mm index 113c28f25..4d7268ec7 100644 --- a/desmume/src/cocoa/userinterface/RomInfoPanel.mm +++ b/desmume/src/cocoa/userinterface/RomInfoPanel.mm @@ -217,6 +217,7 @@ } [[NSUserDefaults standardUserDefaults] setObject:viewStatesDict forKey:@"RomInfoPanel_SectionViewState"]; + [[NSUserDefaults standardUserDefaults] synchronize]; } #pragma mark NSPanel Methods diff --git a/desmume/src/cocoa/userinterface/appDelegate.mm b/desmume/src/cocoa/userinterface/appDelegate.mm index 0128b26a5..43da8aa52 100644 --- a/desmume/src/cocoa/userinterface/appDelegate.mm +++ b/desmume/src/cocoa/userinterface/appDelegate.mm @@ -690,7 +690,7 @@ } // Draw the display view now so that we guarantee that its drawn at least once. - [CocoaDSUtil messageSendOneWay:[[windowController cdsVideoOutput] receivePort] msgID:MESSAGE_REPROCESS_AND_REDRAW]; + [CocoaDSUtil messageSendOneWay:[[windowController cdsVideoOutput] receivePort] msgID:MESSAGE_RELOAD_AND_REDRAW]; // If this window is set to full screen mode, its associated screen index must // exist. If not, this window will not enter full screen mode. This is necessary,