GRAPHICS: Ensure that _bufferedOutput is resized when the scale factor changes

This commit is contained in:
Cameron Cawley 2020-07-01 16:24:52 +01:00 committed by Filippos Karapetis
parent 99acdb00f9
commit b68dbf9eec
6 changed files with 27 additions and 11 deletions

View file

@ -3604,13 +3604,13 @@ void EdgePlugin::internScale(const uint8 *srcPtr, uint32 srcPitch,
uint EdgePlugin::increaseFactor() {
if (_factor == 2)
++_factor;
setFactor(_factor + 1);
return _factor;
}
uint EdgePlugin::decreaseFactor() {
if (_factor == 3)
--_factor;
setFactor(_factor - 1);
return _factor;
}

View file

@ -5067,13 +5067,13 @@ void HQPlugin::scaleIntern(const uint8 *srcPtr, uint32 srcPitch,
uint HQPlugin::increaseFactor() {
if (_factor < 3)
++_factor;
setFactor(_factor + 1);
return _factor;
}
uint HQPlugin::decreaseFactor() {
if (_factor > 2)
--_factor;
setFactor(_factor - 1);
return _factor;
}

View file

@ -205,7 +205,7 @@ void NormalPlugin::scaleIntern(const uint8 *srcPtr, uint32 srcPitch,
uint NormalPlugin::increaseFactor() {
#ifdef USE_SCALERS
if (_factor < 4)
++_factor;
setFactor(_factor + 1);
#endif
return _factor;
}
@ -213,7 +213,7 @@ uint NormalPlugin::increaseFactor() {
uint NormalPlugin::decreaseFactor() {
#ifdef USE_SCALERS
if (_factor > 1)
--_factor;
setFactor(_factor - 1);
#endif
return _factor;
}

View file

@ -369,13 +369,13 @@ void AdvMamePlugin::scaleIntern(const uint8 *srcPtr, uint32 srcPitch,
uint AdvMamePlugin::increaseFactor() {
if (_factor < 4)
++_factor;
setFactor(_factor + 1);
return _factor;
}
uint AdvMamePlugin::decreaseFactor() {
if (_factor > 2)
--_factor;
setFactor(_factor - 1);
return _factor;
}

View file

@ -60,7 +60,7 @@ void ScalerPluginObject::scale(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstP
}
}
SourceScaler::SourceScaler() : _oldSrc(NULL), _enable(false) {
SourceScaler::SourceScaler() : _width(0), _height(0), _oldSrc(NULL), _enable(false) {
}
SourceScaler::~SourceScaler() {
@ -77,13 +77,27 @@ void SourceScaler::setSource(const byte *src, uint pitch, int width, int height,
if (_oldSrc != NULL)
delete[] _oldSrc;
_width = width;
_height = height;
_padding = padding;
// Give _oldSrc same pitch
int size = (height + padding * 2) * pitch;
_oldSrc = new byte[size];
memset(_oldSrc, 0, size);
_bufferedOutput.create(width * _factor, height * _factor, _format);
_bufferedOutput.create(_width * _factor, _height * _factor, _format);
}
uint SourceScaler::setFactor(uint factor) {
uint oldFactor = _factor;
_factor = factor;
if (factor != oldFactor && _width != 0 && _height != 0) {
_bufferedOutput.create(_width * _factor, _height * _factor, _format);
}
return oldFactor;
}
void SourceScaler::scaleIntern(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr,

View file

@ -167,6 +167,8 @@ public:
virtual void enableSource(bool enable) final { _enable = enable; }
virtual uint setFactor(uint factor) final;
protected:
virtual void scaleIntern(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr,
@ -186,7 +188,7 @@ protected:
private:
int _padding;
int _width, _height, _padding;
bool _enable;
byte *_oldSrc;
Graphics::Surface _bufferedOutput;