// $Id: Simple3xScaler.hh 5733 2006-10-02 13:16:39Z m9710797 $ #ifndef SIMPLE3XSCALER_HH #define SIMPLE3XSCALER_HH #include "Scaler3.hh" #include "PixelOperations.hh" #include "Scanline.hh" #include "noncopyable.hh" #include namespace openmsx { class RenderSettings; template class Blur_1on3; template class Simple3xScaler : public Scaler3, private noncopyable { public: Simple3xScaler(const PixelOperations& pixelOps, const RenderSettings& renderSettings); virtual void scaleBlank1to3( FrameSource& src, unsigned srcStartY, unsigned srcEndY, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY); virtual void scaleBlank2to3( FrameSource& src, unsigned srcStartY, unsigned srcEndY, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY); virtual void scale2x1to9x3(FrameSource& src, unsigned srcstarty, unsigned srcendy, unsigned srcwidth, OutputSurface& dst, unsigned dststarty, unsigned dstendy); virtual void scale2x2to9x3(FrameSource& src, unsigned srcstarty, unsigned srcendy, unsigned srcwidth, OutputSurface& dst, unsigned dststarty, unsigned dstendy); virtual void scale1x1to3x3(FrameSource& src, unsigned srcStartY, unsigned srcEndY, unsigned srcWidth, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY); virtual void scale1x2to3x3(FrameSource& src, unsigned srcStartY, unsigned srcEndY, unsigned srcWidth, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY); virtual void scale4x1to9x3(FrameSource& src, unsigned srcStartY, unsigned srcEndY, unsigned srcWidth, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY); virtual void scale4x2to9x3(FrameSource& src, unsigned srcStartY, unsigned srcEndY, unsigned srcWidth, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY); virtual void scale2x1to3x3(FrameSource& src, unsigned srcStartY, unsigned srcEndY, unsigned srcWidth, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY); virtual void scale2x2to3x3(FrameSource& src, unsigned srcStartY, unsigned srcEndY, unsigned srcWidth, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY); virtual void scale8x1to9x3(FrameSource& src, unsigned srcStartY, unsigned srcEndY, unsigned srcWidth, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY); virtual void scale8x2to9x3(FrameSource& src, unsigned srcStartY, unsigned srcEndY, unsigned srcWidth, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY); virtual void scale4x1to3x3(FrameSource& src, unsigned srcStartY, unsigned srcEndY, unsigned srcWidth, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY); virtual void scale4x2to3x3(FrameSource& src, unsigned srcStartY, unsigned srcEndY, unsigned srcWidth, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY); private: template void doScale1(FrameSource& src, unsigned srcStartY, unsigned srcEndY, unsigned srcWidth, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY, ScaleOp scale); template void doScale2(FrameSource& src, unsigned srcStartY, unsigned srcEndY, unsigned srcWidth, OutputSurface& dst, unsigned dstStartY, unsigned dstEndY, ScaleOp scale); PixelOperations pixelOps; Scanline scanline; // in 16bpp calculation of LUTs can be expensive, so keep as member std::auto_ptr > blur_1on3; const RenderSettings& settings; }; } // namespace openmsx #endif