diff --git a/desmume/src/cocoa/DefaultUserPrefs.plist b/desmume/src/cocoa/DefaultUserPrefs.plist
index 6b32facf2..5c2538845 100644
Binary files a/desmume/src/cocoa/DefaultUserPrefs.plist and b/desmume/src/cocoa/DefaultUserPrefs.plist differ
diff --git a/desmume/src/cocoa/cocoa_globals.h b/desmume/src/cocoa/cocoa_globals.h
index 34c339186..05f0ebf09 100644
--- a/desmume/src/cocoa/cocoa_globals.h
+++ b/desmume/src/cocoa/cocoa_globals.h
@@ -371,6 +371,7 @@ enum
MESSAGE_SET_RENDER3D_DEPTH_COMPARISON_THRESHOLD,
MESSAGE_SET_RENDER3D_THREADS,
MESSAGE_SET_RENDER3D_LINE_HACK,
+ MESSAGE_SET_RENDER3D_MULTISAMPLE,
MESSAGE_SET_VIEW_TO_BLACK,
MESSAGE_SET_VIEW_TO_WHITE,
diff --git a/desmume/src/cocoa/cocoa_output.h b/desmume/src/cocoa/cocoa_output.h
index 841b1cfca..e685e6115 100644
--- a/desmume/src/cocoa/cocoa_output.h
+++ b/desmume/src/cocoa/cocoa_output.h
@@ -159,6 +159,7 @@ typedef struct
OSSpinLock spinlockRender3DDepthComparisonThreshold;
OSSpinLock spinlockRender3DThreads;
OSSpinLock spinlockRender3DLineHack;
+ OSSpinLock spinlockRender3DMultisample;
}
@property (assign) UInt32 gpuStateFlags;
@@ -183,6 +184,8 @@ typedef struct
- (NSUInteger) render3DThreads;
- (void) setRender3DLineHack:(BOOL)state;
- (BOOL) render3DLineHack;
+- (void) setRender3DMultisample:(BOOL)state;
+- (BOOL) render3DMultisample;
- (void) handleChangeGpuStateFlags:(NSData *)flagsData;
- (void) handleChangeDisplayMode:(NSData *)displayModeData;
@@ -194,6 +197,7 @@ typedef struct
- (void) handleSetRender3DDepthComparisonThreshold:(NSData *)thresholdData;
- (void) handleSetRender3DThreads:(NSData *)numberThreadsData;
- (void) handleSetRender3DLineHack:(NSData *)stateData;
+- (void) handleSetRender3DMultisample:(NSData *)stateData;
- (void) handleSetViewToBlack;
- (void) handleSetViewToWhite;
- (void) handleRequestScreenshot:(NSData *)fileURLStringData fileTypeData:(NSData *)fileTypeData;
diff --git a/desmume/src/cocoa/cocoa_output.mm b/desmume/src/cocoa/cocoa_output.mm
index b3e29f1b4..cd04a7bb3 100644
--- a/desmume/src/cocoa/cocoa_output.mm
+++ b/desmume/src/cocoa/cocoa_output.mm
@@ -465,6 +465,7 @@ GPU3DInterface *core3DList[] = {
spinlockRender3DDepthComparisonThreshold = OS_SPINLOCK_INIT;
spinlockRender3DThreads = OS_SPINLOCK_INIT;
spinlockRender3DLineHack = OS_SPINLOCK_INIT;
+ spinlockRender3DMultisample = OS_SPINLOCK_INIT;
delegate = nil;
displayMode = DS_DISPLAY_TYPE_COMBO;
@@ -505,6 +506,7 @@ GPU3DInterface *core3DList[] = {
[property setValue:[NSNumber numberWithInteger:0] forKey:@"render3DDepthComparisonThreshold"];
[property setValue:[NSNumber numberWithInteger:0] forKey:@"render3DThreads"];
[property setValue:[NSNumber numberWithBool:YES] forKey:@"render3DLineHack"];
+ [property setValue:[NSNumber numberWithBool:NO] forKey:@"render3DMultisample"];
return self;
}
@@ -975,6 +977,32 @@ GPU3DInterface *core3DList[] = {
return state;
}
+- (void) setRender3DMultisample:(BOOL)state
+{
+ OSSpinLockLock(&spinlockRender3DMultisample);
+ [property setValue:[NSNumber numberWithBool:state] forKey:@"render3DMultisample"];
+ OSSpinLockUnlock(&spinlockRender3DMultisample);
+
+ bool cState = false;
+ if (state)
+ {
+ cState = true;
+ }
+
+ pthread_mutex_lock(self.mutexProducer);
+ CommonSettings.GFX3D_Renderer_Multisample = cState;
+ pthread_mutex_unlock(self.mutexProducer);
+}
+
+- (BOOL) render3DMultisample
+{
+ OSSpinLockLock(&spinlockRender3DMultisample);
+ BOOL state = [(NSNumber *)[property valueForKey:@"render3DMultisample"] boolValue];
+ OSSpinLockUnlock(&spinlockRender3DMultisample);
+
+ return state;
+}
+
- (void) doCoreEmuFrame
{
NSData *gpuData = nil;
@@ -1061,6 +1089,10 @@ GPU3DInterface *core3DList[] = {
[self handleSetRender3DLineHack:[messageComponents objectAtIndex:0]];
break;
+ case MESSAGE_SET_RENDER3D_MULTISAMPLE:
+ [self handleSetRender3DMultisample:[messageComponents objectAtIndex:0]];
+ break;
+
case MESSAGE_SET_VIEW_TO_BLACK:
[self handleSetViewToBlack];
break;
@@ -1155,6 +1187,12 @@ GPU3DInterface *core3DList[] = {
[self setRender3DLineHack:theState];
}
+- (void) handleSetRender3DMultisample:(NSData *)stateData
+{
+ const BOOL theState = *(BOOL *)[stateData bytes];
+ [self setRender3DMultisample:theState];
+}
+
- (void) handleSetViewToBlack
{
[self fillVideoFrameWithColor:0x8000];
diff --git a/desmume/src/cocoa/translations/English.lproj/MainMenu.strings b/desmume/src/cocoa/translations/English.lproj/MainMenu.strings
index 107cd56bf..0836a15c0 100644
Binary files a/desmume/src/cocoa/translations/English.lproj/MainMenu.strings and b/desmume/src/cocoa/translations/English.lproj/MainMenu.strings differ
diff --git a/desmume/src/cocoa/translations/English.lproj/MainMenu.xib b/desmume/src/cocoa/translations/English.lproj/MainMenu.xib
index fdfd41c1e..172884789 100644
--- a/desmume/src/cocoa/translations/English.lproj/MainMenu.xib
+++ b/desmume/src/cocoa/translations/English.lproj/MainMenu.xib
@@ -7046,7 +7046,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
InputPrefsView
- {{74, 81}, {295, 124}}
+ {{74, 110}, {295, 124}}
{0, 0}
@@ -8589,7 +8608,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
6616
+
+
+ value: selection.render3DMultisample
+
+
+
+
+
+ value: selection.render3DMultisample
+ value
+ selection.render3DMultisample
+ 2
+
+
+ 6621
+
+
+
+ value: values.Render3D_Multisample
+
+
+
+
+
+ value: values.Render3D_Multisample
+ value
+ values.Render3D_Multisample
+ 2
+
+
+ 6625
+
+
+
+ change3DRenderMultisample:
+
+
+
+ 6626
+
@@ -35623,12 +35822,13 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
YES
-
+
+
@@ -35790,9 +35990,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
YES
-
-
+
+
+
@@ -42043,6 +42244,52 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
+
+ 6617
+
+
+ YES
+
+
+
+
+
+ 6618
+
+
+ YES
+
+
+
+
+
+ 6619
+
+
+
+
+ 6622
+
+
+ YES
+
+
+
+
+
+ 6623
+
+
+ YES
+
+
+
+
+
+ 6624
+
+
+
@@ -44147,6 +44394,16 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
6611.IBPluginDependency
6611.IBViewBoundsToFrameTransform
6612.IBPluginDependency
+ 6617.IBPluginDependency
+ 6618.IBAttributePlaceholdersKey
+ 6618.IBPluginDependency
+ 6618.IBViewBoundsToFrameTransform
+ 6619.IBPluginDependency
+ 6622.IBPluginDependency
+ 6622.IBViewBoundsToFrameTransform
+ 6623.IBAttributePlaceholdersKey
+ 6623.IBPluginDependency
+ 6624.IBPluginDependency
714.IBEditorWindowLastContentRect
714.IBPluginDependency
714.IBViewBoundsToFrameTransform
@@ -44898,7 +45155,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
- {{1040, 623}, {489, 425}}
+ {{1000, 634}, {489, 425}}
com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
@@ -45925,7 +46182,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
com.apple.InterfaceBuilder.CocoaPlugin
- P4AAAL+AAABBcAAAwpIAAA
+ P4AAAL+AAABBcAAAwlQAAA
com.apple.InterfaceBuilder.CocoaPlugin
@@ -45971,9 +46228,9 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
AUGIAABDIwAAA
com.apple.InterfaceBuilder.CocoaPlugin
- {{1219, 241}, {284, 482}}
+ {{1300, 177}, {284, 540}}
com.apple.InterfaceBuilder.CocoaPlugin
- {{1219, 241}, {284, 482}}
+ {{1300, 177}, {284, 540}}
com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
@@ -45983,7 +46240,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
- AUKUAABCwAAAA
+ AUKUAABC3AAAA
com.apple.InterfaceBuilder.CocoaPlugin
@@ -46080,7 +46337,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
ToolTip
- DeSmuME's internal software 3D rendering engine. Very high CPU usage. Recommended setting.
+ DeSmuME's internal software 3D rendering engine. Has the best 3D emulation accuracy. Very high CPU usage. Recommended setting.
com.apple.InterfaceBuilder.CocoaPlugin
@@ -46098,7 +46355,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
P4AAAL+AAABDXAAAw5qAAA
com.apple.InterfaceBuilder.CocoaPlugin
- {{1269, 906}, {152, 63}}
+ {{1229, 938}, {152, 63}}
com.apple.InterfaceBuilder.CocoaPlugin
ToolTip
@@ -46114,7 +46371,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
ToolTip
- DeSmuME's internal software 3D rendering engine. Very high CPU usage. Recommended setting.
+ DeSmuME's internal software 3D rendering engine. Has the best 3D emulation accuracy. Very high CPU usage. Recommended setting.
com.apple.InterfaceBuilder.CocoaPlugin
@@ -46188,7 +46445,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
ToolTip
- Sets the default number of processing threads that SoftRasterizer will use for 3D rendering. This is an option for advanced users. For most cases, it's best to keep this set to Automatic.
+ Sets the default number of processing threads that DeSmuME will use for 3D rendering. This is an option for advanced users. For most cases, it's best to keep this set to Automatic.
com.apple.InterfaceBuilder.CocoaPlugin
@@ -46241,7 +46498,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
- AUKUAABDXQAAA
+ AUKUAABDUQAAA
ToolTip
@@ -48129,7 +48386,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
ToolTip
- OpenGL-based 3D rendering engine. Some 3D objects may have better looking texturing, but the geometry may be less accurate. Extremely high CPU usage.
+ OpenGL-based 3D rendering engine. Some 3D objects may have better looking texturing, but 3D emulation is less accurate overall. Low CPU usage. However, it requires the usage of your GPU.
com.apple.InterfaceBuilder.CocoaPlugin
@@ -48138,7 +48395,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
ToolTip
- OpenGL-based 3D rendering engine. Some 3D objects may have better looking texturing, but the geometry may be less accurate. Extremely high CPU usage.
+ OpenGL-based 3D rendering engine. Some 3D objects may have better looking texturing, but 3D emulation is less accurate overall. Low CPU usage. However, it requires the usage of your GPU.
com.apple.InterfaceBuilder.CocoaPlugin
@@ -48418,6 +48675,34 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
P4AAAL+AAABDqwAAwpQAAA
com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ ToolTip
+
+ ToolTip
+
+ Smooths the edges of 3D objects using multisample antialiasing (MSAA). No CPU usage. However, it requires additional VRAM from your GPU.
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ P4AAAL+AAABBgAAAwrAAAA
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ AUKUAABCUAAAA
+
+
+ ToolTip
+
+ ToolTip
+
+ Smooths the edges of 3D objects using multisample antialiasing (MSAA) by default. No CPU usage. However, it requires additional VRAM from your GPU.
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
{{1191, 651}, {328, 434}}
com.apple.InterfaceBuilder.CocoaPlugin
@@ -48767,7 +49052,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
- 6616
+ 6626
@@ -49293,6 +49578,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
change3DRenderHighPrecisionColorInterpolation:
change3DRenderLineHack:
change3DRenderMethod:
+ change3DRenderMultisample:
change3DRenderTextures:
change3DRenderThreads:
changeAudioEngine:
@@ -49323,9 +49609,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
hudDisable:
importRomSave:
loadEmuSaveStateSlot:
- loadLastRom:
- loadReplay:
- loadRomToggle:
openEmuSaveState:
openRom:
resetCore:
@@ -49338,16 +49621,12 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
selectScreenshotFileFormat:
speedLimitDisable:
toggleAutoFrameSkip:
- toggleDisplayLayoutSettingsDrawer:
toggleGPUState:
toggleKeepMinDisplaySizeAtNormal:
toggleStatusBar:
- toggleVideoOutputSettingsDrawer:
writeDefaults3DRenderingSettings:
- writeDefaultsComboDisplayLayoutSettings:
writeDefaultsDisplayRotation:
writeDefaultsEmulationSettings:
- writeDefaultsGeneralDisplayLayoutSettings:
writeDefaultsHUDSettings:
writeDefaultsSoundSettings:
writeDefaultsVideoOutputSettings:
@@ -49412,12 +49691,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
id
id
id
- id
- id
- id
- id
- id
- id
@@ -49430,6 +49703,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
change3DRenderHighPrecisionColorInterpolation:
change3DRenderLineHack:
change3DRenderMethod:
+ change3DRenderMultisample:
change3DRenderTextures:
change3DRenderThreads:
changeAudioEngine:
@@ -49460,9 +49734,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
hudDisable:
importRomSave:
loadEmuSaveStateSlot:
- loadLastRom:
- loadReplay:
- loadRomToggle:
openEmuSaveState:
openRom:
resetCore:
@@ -49475,16 +49746,12 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
selectScreenshotFileFormat:
speedLimitDisable:
toggleAutoFrameSkip:
- toggleDisplayLayoutSettingsDrawer:
toggleGPUState:
toggleKeepMinDisplaySizeAtNormal:
toggleStatusBar:
- toggleVideoOutputSettingsDrawer:
writeDefaults3DRenderingSettings:
- writeDefaultsComboDisplayLayoutSettings:
writeDefaultsDisplayRotation:
writeDefaultsEmulationSettings:
- writeDefaultsGeneralDisplayLayoutSettings:
writeDefaultsHUDSettings:
writeDefaultsSoundSettings:
writeDefaultsVideoOutputSettings:
@@ -49515,6 +49782,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
change3DRenderMethod:
id
+
+ change3DRenderMultisample:
+ id
+
change3DRenderTextures:
id
@@ -49635,18 +49906,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
loadEmuSaveStateSlot:
id
-
- loadLastRom:
- id
-
-
- loadReplay:
- id
-
-
- loadRomToggle:
- id
-
openEmuSaveState:
id
@@ -49695,10 +49954,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
toggleAutoFrameSkip:
id
-
- toggleDisplayLayoutSettingsDrawer:
- id
-
toggleGPUState:
id
@@ -49711,18 +49966,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
toggleStatusBar:
id
-
- toggleVideoOutputSettingsDrawer:
- id
-
writeDefaults3DRenderingSettings:
id
-
- writeDefaultsComboDisplayLayoutSettings:
- id
-
writeDefaultsDisplayRotation:
id
@@ -49731,10 +49978,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
writeDefaultsEmulationSettings:
id
-
- writeDefaultsGeneralDisplayLayoutSettings:
- id
-
writeDefaultsHUDSettings:
id
@@ -49760,7 +50003,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
cheatListController
cheatWindowController
cheatWindowDelegate
- displayLayoutSettingsDrawer
displayView
emuWindowController
exportRomSavePanelAccessoryView
@@ -49769,7 +50011,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
saveFileMigrationSheet
saveScreenshotPanelAccessoryView
saveStatePrecloseSheet
- videoOutputSettingsDrawer
window
@@ -49781,7 +50022,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
NSArrayController
NSObjectController
CheatWindowDelegate
- NSDrawer
NSView
NSObjectController
NSView
@@ -49790,7 +50030,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
NSWindow
NSView
NSWindow
- NSDrawer
NSWindow
@@ -49805,7 +50044,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
cheatListController
cheatWindowController
cheatWindowDelegate
- displayLayoutSettingsDrawer
displayView
emuWindowController
exportRomSavePanelAccessoryView
@@ -49814,7 +50052,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
saveFileMigrationSheet
saveScreenshotPanelAccessoryView
saveStatePrecloseSheet
- videoOutputSettingsDrawer
window
@@ -49847,10 +50084,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
cheatWindowDelegate
CheatWindowDelegate
-
- displayLayoutSettingsDrawer
- NSDrawer
-
displayView
NSView
@@ -49883,10 +50116,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
saveStatePrecloseSheet
NSWindow
-
- videoOutputSettingsDrawer
- NSDrawer
-
window
NSWindow
@@ -51160,6 +51389,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA
com.apple.InterfaceBuilder.CocoaPlugin.macosx
+
+ com.apple.InterfaceBuilder.CocoaPlugin.macosx
+
+
com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3
diff --git a/desmume/src/cocoa/userinterface/displayView.h b/desmume/src/cocoa/userinterface/displayView.h
index be537c6c5..41ef63f33 100644
--- a/desmume/src/cocoa/userinterface/displayView.h
+++ b/desmume/src/cocoa/userinterface/displayView.h
@@ -95,6 +95,7 @@
- (void) setRender3DDepthComparisonThreshold:(NSUInteger)threshold;
- (void) setRender3DThreads:(NSUInteger)numberThreads;
- (void) setRender3DLineHack:(BOOL)state;
+- (void) setRender3DMultisample:(BOOL)state;
- (void) setViewToBlack;
- (void) setViewToWhite;
- (void) requestScreenshot:(NSURL *)fileURL fileType:(NSBitmapImageFileType)fileType;
diff --git a/desmume/src/cocoa/userinterface/displayView.mm b/desmume/src/cocoa/userinterface/displayView.mm
index 404ea8c28..b8d2010e2 100644
--- a/desmume/src/cocoa/userinterface/displayView.mm
+++ b/desmume/src/cocoa/userinterface/displayView.mm
@@ -171,6 +171,7 @@ CGLContextObj OSXOpenGLRendererContext = NULL;
[bindings setValue:[NSNumber numberWithInteger:0] forKey:@"render3DDepthComparisonThreshold"];
[bindings setValue:[NSNumber numberWithInteger:0] forKey:@"render3DThreads"];
[bindings setValue:[NSNumber numberWithBool:YES] forKey:@"render3DLineHack"];
+ [bindings setValue:[NSNumber numberWithBool:NO] forKey:@"render3DMultisample"];
return self;
}
@@ -471,6 +472,12 @@ CGLContextObj OSXOpenGLRendererContext = NULL;
[CocoaDSUtil messageSendOneWayWithBool:self.sendPortDisplay msgID:MESSAGE_SET_RENDER3D_LINE_HACK boolValue:state];
}
+- (void) setRender3DMultisample:(BOOL)state
+{
+ [bindings setValue:[NSNumber numberWithBool:state] forKey:@"render3DMultisample"];
+ [CocoaDSUtil messageSendOneWayWithBool:self.sendPortDisplay msgID:MESSAGE_SET_RENDER3D_MULTISAMPLE boolValue:state];
+}
+
- (void) setViewToBlack
{
[CocoaDSUtil messageSendOneWay:self.sendPortDisplay msgID:MESSAGE_SET_VIEW_TO_BLACK];
diff --git a/desmume/src/cocoa/userinterface/emuWindowDelegate.h b/desmume/src/cocoa/userinterface/emuWindowDelegate.h
index 7ec3754a1..60766d985 100644
--- a/desmume/src/cocoa/userinterface/emuWindowDelegate.h
+++ b/desmume/src/cocoa/userinterface/emuWindowDelegate.h
@@ -200,6 +200,7 @@
- (IBAction) change3DRenderDepthComparisonThreshold:(id)sender;
- (IBAction) change3DRenderThreads:(id)sender;
- (IBAction) change3DRenderLineHack:(id)sender;
+- (IBAction) change3DRenderMultisample:(id)sender;
- (void) setShowStatusBar:(BOOL)showStatusBar;
diff --git a/desmume/src/cocoa/userinterface/emuWindowDelegate.mm b/desmume/src/cocoa/userinterface/emuWindowDelegate.mm
index c0e157c67..c334efeb3 100644
--- a/desmume/src/cocoa/userinterface/emuWindowDelegate.mm
+++ b/desmume/src/cocoa/userinterface/emuWindowDelegate.mm
@@ -984,6 +984,11 @@
[dispViewDelegate setRender3DLineHack:[CocoaDSUtil getIBActionSenderButtonStateBool:sender]];
}
+- (IBAction) change3DRenderMultisample:(id)sender
+{
+ [dispViewDelegate setRender3DMultisample:[CocoaDSUtil getIBActionSenderButtonStateBool:sender]];
+}
+
- (IBAction) hudDisable:(id)sender
{
if ([dispViewDelegate isHudEnabled])
@@ -2075,6 +2080,7 @@
[[self dispViewDelegate] setRender3DTextures:[[NSUserDefaults standardUserDefaults] boolForKey:@"Render3D_Textures"]];
[[self dispViewDelegate] setRender3DDepthComparisonThreshold:(NSUInteger)[[NSUserDefaults standardUserDefaults] integerForKey:@"Render3D_DepthComparisonThreshold"]];
[[self dispViewDelegate] setRender3DLineHack:[[NSUserDefaults standardUserDefaults] boolForKey:@"Render3D_LineHack"]];
+ [[self dispViewDelegate] setRender3DMultisample:[[NSUserDefaults standardUserDefaults] boolForKey:@"Render3D_Multisample"]];
}
- (IBAction) writeDefaultsDisplayRotation:(id)sender
@@ -2113,6 +2119,7 @@
[[NSUserDefaults standardUserDefaults] setInteger:[[dispViewBindings valueForKey:@"render3DDepthComparisonThreshold"] integerValue] forKey:@"Render3D_DepthComparisonThreshold"];
[[NSUserDefaults standardUserDefaults] setInteger:[[dispViewBindings valueForKey:@"render3DThreads"] integerValue] forKey:@"Render3D_Threads"];
[[NSUserDefaults standardUserDefaults] setBool:[[dispViewBindings valueForKey:@"render3DLineHack"] boolValue] forKey:@"Render3D_LineHack"];
+ [[NSUserDefaults standardUserDefaults] setBool:[[dispViewBindings valueForKey:@"render3DMultisample"] boolValue] forKey:@"Render3D_Multisample"];
}
- (IBAction) writeDefaultsEmulationSettings:(id)sender