diff --git a/docs/index.html b/docs/index.html
index 9a3e65f5e..af3b061e5 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -1429,7 +1429,7 @@
Control + F |
- Toggle display interpolation |
+ Toggle display interpolation (not available for Software renderer) |
Control + I |
Control + I |
@@ -2845,7 +2845,7 @@
-tia.inter <1|0> |
Use interpolation for the TIA image (results in blending/smoothing
- of the image). |
+ of the image, not available for Software renderer).
@@ -3707,7 +3707,7 @@
Item | Brief description | For more information, see Command Line |
Renderer | Use specified rendering mode. | -video |
- Interpolation | Enable interpolation of the TIA image. | -tia.inter |
+ Interpolation | Enable interpolation of the TIA image (not available for Software renderer). | -tia.inter |
Zoom | Adjust the zoom level of the TIA image | -tia.zoom |
Fullscreen | Self-explanatory - Note that colors may slightly change.
This depends on the OS and renderer used. | -fullscreen |
diff --git a/src/emucore/Console.cxx b/src/emucore/Console.cxx
index 9cbe63da0..5939b1751 100644
--- a/src/emucore/Console.cxx
+++ b/src/emucore/Console.cxx
@@ -514,19 +514,25 @@ void Console::enableColorLoss(bool state)
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Console::toggleInter(bool toggle)
{
- bool enabled = myOSystem.settings().getBool("tia.inter");
+ if(myOSystem.settings().getString("video") != "software")
+ {
+ bool enabled = myOSystem.settings().getBool("tia.inter");
- if(toggle)
- enabled = !enabled;
+ if(toggle)
+ enabled = !enabled;
- myOSystem.settings().setValue("tia.inter", enabled);
+ myOSystem.settings().setValue("tia.inter", enabled);
- // ... and apply potential setting changes to the TIA surface
- myOSystem.frameBuffer().tiaSurface().updateSurfaceSettings();
- ostringstream ss;
+ // ... and apply potential setting changes to the TIA surface
+ myOSystem.frameBuffer().tiaSurface().updateSurfaceSettings();
+ ostringstream ss;
- ss << "Interpolation " << (enabled ? "enabled" : "disabled");
- myOSystem.frameBuffer().showTextMessage(ss.str());
+ ss << "Interpolation " << (enabled ? "enabled" : "disabled");
+ myOSystem.frameBuffer().showTextMessage(ss.str());
+ }
+ else
+ myOSystem.frameBuffer().showTextMessage(
+ "Interpolation not available for Software renderer");
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/src/emucore/EventHandler.cxx b/src/emucore/EventHandler.cxx
index 7a5b34295..aa0ad1bce 100644
--- a/src/emucore/EventHandler.cxx
+++ b/src/emucore/EventHandler.cxx
@@ -420,6 +420,8 @@ bool EventHandler::skipAVSetting() const
myOSystem.settings().getString("palette") == PaletteHandler::SETTING_CUSTOM;
const bool isCustomFilter =
myOSystem.settings().getInt("tv.filter") == int(NTSCFilter::Preset::CUSTOM);
+ const bool isSoftwareRenderer =
+ myOSystem.settings().getString("video") == "software";
return (myAdjustSetting == AdjustSetting::OVERSCAN && !isFullScreen)
#ifdef ADAPTABLE_REFRESH_SUPPORT
@@ -430,7 +432,8 @@ bool EventHandler::skipAVSetting() const
&& !isCustomPalette)
|| (myAdjustSetting >= AdjustSetting::NTSC_SHARPNESS
&& myAdjustSetting <= AdjustSetting::NTSC_BLEEDING
- && !isCustomFilter);
+ && !isCustomFilter)
+ || (myAdjustSetting == AdjustSetting::INTERPOLATION && isSoftwareRenderer);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/src/gui/VideoAudioDialog.cxx b/src/gui/VideoAudioDialog.cxx
index f1ebade27..f6f540b61 100644
--- a/src/gui/VideoAudioDialog.cxx
+++ b/src/gui/VideoAudioDialog.cxx
@@ -121,7 +121,7 @@ void VideoAudioDialog::addDisplayTab()
// Video renderer
myRenderer = new PopUpWidget(myTab, _font, xpos, ypos, pwidth, lineHeight,
instance().frameBuffer().supportedRenderers(),
- "Renderer ", lwidth);
+ "Renderer ", lwidth, kRendererChanged);
myRenderer->setToolTip("Select renderer used for displaying screen.");
wid.push_back(myRenderer);
const int swidth = myRenderer->getWidth() - lwidth;
@@ -544,6 +544,7 @@ void VideoAudioDialog::loadConfig()
// Display tab
// Renderer settings
myRenderer->setSelected(settings.getString("video"), "default");
+ handleRendererChanged();
// TIA interpolation
myTIAInterpolate->setState(settings.getBool("tia.inter"));
@@ -945,6 +946,13 @@ void VideoAudioDialog::loadTVAdjustables(NTSCFilter::Preset preset)
myTVBleed->setValue(adj.bleed);
}
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+void VideoAudioDialog::handleRendererChanged()
+{
+ bool enable = myRenderer->getSelectedTag().toString() != "software";
+ myTIAInterpolate->setEnabled(enable);
+}
+
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void VideoAudioDialog::handlePaletteChange()
{
@@ -1093,6 +1101,10 @@ void VideoAudioDialog::handleCommand(CommandSender* sender, int cmd,
handleShiftChanged(myTVBlueShift);
break;
+ case kRendererChanged:
+ handleRendererChanged();
+ break;
+
case kVSizeChanged:
{
int adjust = myVSizeAdjust->getValue();
diff --git a/src/gui/VideoAudioDialog.hxx b/src/gui/VideoAudioDialog.hxx
index b8cfd5c5f..66990a2d3 100644
--- a/src/gui/VideoAudioDialog.hxx
+++ b/src/gui/VideoAudioDialog.hxx
@@ -52,6 +52,7 @@ class VideoAudioDialog : public Dialog
void addAudioTab();
void handleTVModeChange(NTSCFilter::Preset);
void loadTVAdjustables(NTSCFilter::Preset preset);
+ void handleRendererChanged();
void handlePaletteChange();
void handleShiftChanged(SliderWidget* widget);
void handlePaletteUpdate();
@@ -136,6 +137,7 @@ class VideoAudioDialog : public Dialog
PaletteHandler::Adjustable myPaletteAdj;
enum {
+ kRendererChanged = 'VDRe',
kZoomChanged = 'VDZo',
kVSizeChanged = 'VDVs',
kFullScreenChanged = 'VDFs',