oldSrcScale() is now unified with scale(). Use enableSource(bool enable) to switch functionality. Partial screen updates are also posible because of this. initialize() had its prototype changes although it is functionally the same. setSource() no longer has a type parameter, removing support for multiple source surfaces. They weren't useful anyway. useOldSrc() was renamed to useOldSource() to conform to the names of other functions.
67 lines
2.1 KiB
C++
67 lines
2.1 KiB
C++
/* ScummVM - Graphic Adventure Engine
|
|
*
|
|
* ScummVM is the legal property of its developers, whose names
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
* file distributed with this source distribution.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include "graphics/scalerplugin.h"
|
|
|
|
SourceScaler::SourceScaler() : _oldSrc(NULL), _enable(false) {
|
|
}
|
|
|
|
SourceScaler::~SourceScaler() {
|
|
if (_oldSrc != NULL)
|
|
delete[] _oldSrc;
|
|
}
|
|
|
|
void SourceScaler::setSource(const byte *src, uint pitch, int width, int height, int padding) {
|
|
if (_oldSrc != NULL)
|
|
delete[] _oldSrc;
|
|
|
|
_padding = padding;
|
|
// Give _oldSrc same pitch
|
|
int size = (height + padding * 2) * pitch;
|
|
_oldSrc = new byte[size];
|
|
memset(_oldSrc, 0, size);
|
|
}
|
|
|
|
void SourceScaler::scale(const uint8 *srcPtr, uint32 srcPitch, uint8 *dstPtr,
|
|
uint32 dstPitch, int width, int height, int x, int y) {
|
|
if (!_enable) {
|
|
// Do not pass _oldSrc, do not update _oldSrc
|
|
internScale(srcPtr, srcPitch,
|
|
dstPtr, dstPitch,
|
|
NULL, 0,
|
|
width, height);
|
|
return;
|
|
}
|
|
int offset = (_padding + x) * _format.bytesPerPixel + (_padding + y) * srcPitch;
|
|
// Call user defined scale function
|
|
internScale(srcPtr, srcPitch,
|
|
dstPtr, dstPitch,
|
|
_oldSrc + offset, srcPitch,
|
|
width, height);
|
|
// Update old src
|
|
byte *oldSrc = _oldSrc + offset;
|
|
while (height--) {
|
|
memcpy(oldSrc, srcPtr, width * _format.bytesPerPixel);
|
|
oldSrc += srcPitch;
|
|
srcPtr += srcPitch;
|
|
}
|
|
}
|
|
|