// $Id: ScalerFactory.cc 5283 2006-03-26 00:42:33Z mthuurne $ #include "RenderSettings.hh" #include "EnumSetting.hh" #include "IntegerSetting.hh" #include "ScalerFactory.hh" #include "SimpleScaler.hh" #include "SaI2xScaler.hh" #include "SaI3xScaler.hh" #include "Scale2xScaler.hh" #include "Scale3xScaler.hh" #include "HQ2xScaler.hh" #include "HQ3xScaler.hh" #include "HQ2xLiteScaler.hh" #include "HQ3xLiteScaler.hh" #include "RGBTriplet3xScaler.hh" #include "Simple3xScaler.hh" #include "LowScaler.hh" #include using std::auto_ptr; namespace openmsx { template auto_ptr ScalerFactory::createScaler( const PixelOperations& pixelOps, RenderSettings& renderSettings) { switch (renderSettings.getScaleFactor().getValue()) { case 1: return auto_ptr(new LowScaler(pixelOps)); case 2: switch (renderSettings.getScaleAlgorithm().getValue()) { case RenderSettings::SCALER_SIMPLE: return auto_ptr( new SimpleScaler(pixelOps, renderSettings) ); case RenderSettings::SCALER_SAI: return auto_ptr(new SaI2xScaler(pixelOps)); case RenderSettings::SCALER_SCALE: return auto_ptr(new Scale2xScaler(pixelOps)); case RenderSettings::SCALER_HQ: return auto_ptr(new HQ2xScaler(pixelOps)); case RenderSettings::SCALER_HQLITE: return auto_ptr(new HQ2xLiteScaler(pixelOps)); case RenderSettings::SCALER_RGBTRIPLET: case RenderSettings::SCALER_TV: // fallback return auto_ptr( new SimpleScaler(pixelOps, renderSettings) ); default: assert(false); } case 3: case 4: // fallback switch (renderSettings.getScaleAlgorithm().getValue()) { case RenderSettings::SCALER_SIMPLE: return auto_ptr( new Simple3xScaler(pixelOps, renderSettings) ); case RenderSettings::SCALER_SAI: return auto_ptr(new SaI3xScaler(pixelOps)); case RenderSettings::SCALER_SCALE: return auto_ptr(new Scale3xScaler(pixelOps)); case RenderSettings::SCALER_HQ: return auto_ptr(new HQ3xScaler(pixelOps)); case RenderSettings::SCALER_HQLITE: return auto_ptr(new HQ3xLiteScaler(pixelOps)); case RenderSettings::SCALER_RGBTRIPLET: case RenderSettings::SCALER_TV: // fallback return auto_ptr( new RGBTriplet3xScaler(pixelOps, renderSettings) ); default: assert(false); } default: assert(false); } return auto_ptr(); // avoid warning } // Force template instantiation. template class ScalerFactory; template class ScalerFactory; } // namespace openmsx