1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
auto VideoSettings::construct() -> void {
setCollapsible();
setVisible(false);
colorAdjustmentLabel.setText("Color Adjustment").setFont(Font().setBold());
colorAdjustmentLayout.setSize({3, 3}).setPadding(12_sx, 0);
colorAdjustmentLayout.column(0).setAlignment(1.0);
luminanceLabel.setText("Luminance:");
luminanceValue.setAlignment(0.5);
luminanceSlider.setLength(101).setPosition(settings.video.luminance * 100.0).onChange([&] {
settings.video.luminance = luminanceSlider.position() / 100.0;
luminanceValue.setText({luminanceSlider.position(), "%"});
program.paletteUpdate();
}).doChange();
saturationLabel.setText("Saturation:");
saturationValue.setAlignment(0.5);
saturationSlider.setLength(201).setPosition(settings.video.saturation * 100.0).onChange([&] {
settings.video.saturation = saturationSlider.position() / 100.0;
saturationValue.setText({saturationSlider.position(), "%"});
program.paletteUpdate();
}).doChange();
gammaLabel.setText("Gamma:");
gammaValue.setAlignment(0.5);
gammaSlider.setLength(101).setPosition((settings.video.gamma - 1.0) * 100.0).onChange([&] {
settings.video.gamma = 1.0 + gammaSlider.position() / 100.0;
gammaValue.setText({100 + gammaSlider.position(), "%"});
program.paletteUpdate();
}).doChange();
emulatorSettingsLabel.setText("Emulator Settings").setFont(Font().setBold());
colorBleedOption.setText("Color Bleed").setChecked(settings.video.colorBleed).onToggle([&] {
settings.video.colorBleed = colorBleedOption.checked();
if(emulator) emulator->setColorBleed(settings.video.colorBleed);
});
colorBleedLayout.setAlignment(1).setPadding(12_sx, 0);
colorBleedHint.setText("Blurs adjacent pixels for translucency effects").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel);
colorEmulationOption.setText("Color Emulation").setChecked(settings.video.colorEmulation).onToggle([&] {
settings.video.colorEmulation = colorEmulationOption.checked();
if(emulator) emulator->setBoolean("Color Emulation", settings.video.colorEmulation);
});
colorEmulationLayout.setAlignment(1).setPadding(12_sx, 0);
colorEmulationHint.setText("Matches colors to how they look on real hardware").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel);
deepBlackBoostOption.setText("Deep Black Boost").setChecked(settings.video.deepBlackBoost).onToggle([&] {
settings.video.deepBlackBoost = deepBlackBoostOption.checked();
if(emulator) emulator->setBoolean("Deep Black Boost", settings.video.deepBlackBoost);
});
deepBlackBoostLayout.setAlignment(1).setPadding(12_sx, 0);
deepBlackBoostHint.setText("Applies a gamma ramp to crush black levels (SNES/SFC)").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel);
interframeBlendingOption.setText("Interframe Blending").setChecked(settings.video.interframeBlending).onToggle([&] {
settings.video.interframeBlending = interframeBlendingOption.checked();
if(emulator) emulator->setBoolean("Interframe Blending", settings.video.interframeBlending);
});
interframeBlendingLayout.setAlignment(1).setPadding(12_sx, 0);
interframeBlendingHint.setText("Emulates LCD translucency effects, but increases motion blur").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel);
overscanOption.setText("Overscan").setChecked(settings.video.overscan).onToggle([&] {
settings.video.overscan = overscanOption.checked();
if(emulator) emulator->setOverscan(settings.video.overscan);
});
overscanLayout.setAlignment(1).setPadding(12_sx, 0);
overscanHint.setText("Shows extended PAL CRT lines, but these are usually blank in most games").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel);
pixelAccuracyOption.setText("Pixel Accuracy Mode").setChecked(settings.video.pixelAccuracy).onToggle([&] {
settings.video.pixelAccuracy = pixelAccuracyOption.checked();
if(emulator) emulator->setBoolean("Pixel Accuracy", settings.video.pixelAccuracy);
});
pixelAccuracyLayout.setAlignment(1).setPadding(12_sx, 0);
pixelAccuracyHint.setText("Use pixel-accurate emulation where available").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel);
renderSettingsLabel.setText("N64 Render Settings").setFont(Font().setBold());
renderQualityLayout.setPadding(12_sx, 0);
disableVideoInterfaceProcessingOption.setText("Disable Video Interface Processing").setChecked(settings.video.disableVideoInterfaceProcessing).onToggle([&] {
settings.video.disableVideoInterfaceProcessing = disableVideoInterfaceProcessingOption.checked();
if(emulator) emulator->setBoolean("Disable Video Interface Processing", settings.video.disableVideoInterfaceProcessing);
});
disableVideoInterfaceProcessingLayout.setAlignment(1).setPadding(12_sx, 0);
disableVideoInterfaceProcessingHint.setText("Disables Video Interface post processing to render image from VRAM directly").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel);
weaveDeinterlacingOption.setText("Weave Deinterlacing").setChecked(settings.video.weaveDeinterlacing).onToggle([&] {
settings.video.weaveDeinterlacing = weaveDeinterlacingOption.checked();
if(emulator) emulator->setBoolean("(Experimental) Double the perceived vertical resolution; disabled when supersampling is used", settings.video.weaveDeinterlacing);
if(weaveDeinterlacingOption.checked() == true) {
renderSupersamplingOption.setChecked(false).setEnabled(false);
settings.video.supersampling = false;
} else {
if(settings.video.quality != "SD") renderSupersamplingOption.setEnabled(true);
}
});
weaveDeinterlacingLayout.setAlignment(1).setPadding(12_sx, 0);
weaveDeinterlacingHint.setText("Doubles the perceived vertical resolution; incompatible with supersampling").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel);
renderQualitySD.setText("SD Quality").onActivate([&] {
settings.video.quality = "SD";
renderSupersamplingOption.setChecked(false).setEnabled(false);
settings.video.supersampling = false;
weaveDeinterlacingOption.setEnabled(true);
});
renderQualityHD.setText("HD Quality").onActivate([&] {
settings.video.quality = "HD";
if(weaveDeinterlacingOption.checked() == false) renderSupersamplingOption.setChecked(settings.video.supersampling).setEnabled(true);
});
renderQualityUHD.setText("UHD Quality").onActivate([&] {
settings.video.quality = "UHD";
if(weaveDeinterlacingOption.checked() == false) renderSupersamplingOption.setChecked(settings.video.supersampling).setEnabled(true);
});
if(settings.video.quality == "SD") renderQualitySD.setChecked();
if(settings.video.quality == "HD") renderQualityHD.setChecked();
if(settings.video.quality == "UHD") renderQualityUHD.setChecked();
renderSupersamplingOption.setText("Supersampling").setChecked(settings.video.supersampling && settings.video.quality != "SD").setEnabled(settings.video.quality != "SD").onToggle([&] {
settings.video.supersampling = renderSupersamplingOption.checked();
if(renderSupersamplingOption.checked() == true) {
weaveDeinterlacingOption.setEnabled(false).setChecked(false);
settings.video.weaveDeinterlacing = false;
} else {
weaveDeinterlacingOption.setEnabled(true);
}
});
renderSupersamplingLayout.setAlignment(1).setPadding(12_sx, 0);
renderSupersamplingHint.setText("Scales HD and UHD resolutions back down to SD").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel);
renderSettingsLayout.setPadding(12_sx, 0);
renderSettingsHint.setText("Note: render settings changes require a game reload to take effect").setFont(Font().setSize(7.0)).setForegroundColor(SystemColor::Sublabel);
#if !defined(VULKAN)
//hide Vulkan-specific options if Vulkan is not available
renderSettingsLabel.setCollapsible(true).setVisible(false);
renderQualityLayout.setCollapsible(true).setVisible(false);
renderSupersamplingLayout.setCollapsible(true).setVisible(false);
renderSettingsHint.setCollapsible(true).setVisible(false);
disableVideoInterfaceProcessingLayout.setCollapsible(true).setVisible(false);
weaveDeinterlacingLayout.setCollapsible(true).setVisible(false);
#endif
}
|