aboutsummaryrefslogtreecommitdiff
path: root/backends/sdl
diff options
context:
space:
mode:
authorPaweł Kołodziejski2003-03-18 13:31:37 +0000
committerPaweł Kołodziejski2003-03-18 13:31:37 +0000
commite1d591921f1349d14f3313b3bbeff42bf99c8de9 (patch)
tree89b481e5aa623f6b4e608f80b13f07432c6fa636 /backends/sdl
parent5985310d64045cfea39998dda6ad45577d966392 (diff)
downloadscummvm-rg350-e1d591921f1349d14f3313b3bbeff42bf99c8de9.tar.gz
scummvm-rg350-e1d591921f1349d14f3313b3bbeff42bf99c8de9.tar.bz2
scummvm-rg350-e1d591921f1349d14f3313b3bbeff42bf99c8de9.zip
it omit one blit for scaler Normal1X in SDL backend
svn-id: r6831
Diffstat (limited to 'backends/sdl')
-rw-r--r--backends/sdl/sdl.cpp69
1 files changed, 41 insertions, 28 deletions
diff --git a/backends/sdl/sdl.cpp b/backends/sdl/sdl.cpp
index a9fdab53ae..874ac9b013 100644
--- a/backends/sdl/sdl.cpp
+++ b/backends/sdl/sdl.cpp
@@ -273,45 +273,58 @@ void OSystem_SDL::update_screen() {
SDL_Rect *last_rect = _dirty_rect_list + _num_dirty_rects;
// Convert appropriate parts of the 8bpp image into 16bpp
+ SDL_Rect dst;
if (!_overlayVisible) {
- SDL_Rect dst;
for(r = _dirty_rect_list; r != last_rect; ++r) {
dst = *r;
dst.x++; // Shift rect by one since 2xSai needs to acces the data around
dst.y++; // any pixel to scale it, and we want to avoid mem access crashes.
- if (SDL_BlitSurface(_screen, r, _tmpscreen, &dst) != 0)
+ if (_scaler_proc == Normal1x) {
+ if (SDL_BlitSurface(_screen, r, _hwscreen, &dst) != 0)
+ error("SDL_BlitSurface failed: %s", SDL_GetError());
+ } else {
+ if (SDL_BlitSurface(_screen, r, _tmpscreen, &dst) != 0)
+ error("SDL_BlitSurface failed: %s", SDL_GetError());
+ }
+ }
+ } else {
+ for(r = _dirty_rect_list; r != last_rect; ++r) {
+ dst = *r;
+ if (SDL_BlitSurface(_tmpscreen, r, _hwscreen, &dst) != 0)
error("SDL_BlitSurface failed: %s", SDL_GetError());
}
}
- SDL_LockSurface(_tmpscreen);
- SDL_LockSurface(_hwscreen);
-
- srcPitch = _tmpscreen->pitch;
- dstPitch = _hwscreen->pitch;
-
- for(r = _dirty_rect_list; r != last_rect; ++r) {
- register int dst_y = r->y + _currentShakePos;
- register int dst_h = 0;
- if (dst_y < _screenHeight) {
- dst_h = r->h;
- if (dst_h > _screenHeight - dst_y)
- dst_h = _screenHeight - dst_y;
-
- dst_y *= _scaleFactor;
-
- _scaler_proc((byte *)_tmpscreen->pixels + (r->x * 2 + 2) + (r->y + 1) * srcPitch, srcPitch, NULL,
- (byte *)_hwscreen->pixels + r->x * 2 * _scaleFactor + dst_y * dstPitch, dstPitch, r->w, dst_h);
- }
+ if (_scaler_proc != Normal1x) {
+ SDL_LockSurface(_tmpscreen);
+ SDL_LockSurface(_hwscreen);
+
+ srcPitch = _tmpscreen->pitch;
+ dstPitch = _hwscreen->pitch;
+
+ for(r = _dirty_rect_list; r != last_rect; ++r) {
+ register int dst_y = r->y + _currentShakePos;
+ register int dst_h = 0;
+ if (dst_y < _screenHeight) {
+ dst_h = r->h;
+ if (dst_h > _screenHeight - dst_y)
+ dst_h = _screenHeight - dst_y;
+
+ dst_y *= _scaleFactor;
+
+ _scaler_proc((byte *)_tmpscreen->pixels + (r->x * 2 + 2) + (r->y + 1) * srcPitch, srcPitch, NULL,
+ (byte *)_hwscreen->pixels + r->x * 2 * _scaleFactor + dst_y * dstPitch, dstPitch, r->w, dst_h);
+ }
- r->x *= _scaleFactor;
- r->y = dst_y;
- r->w *= _scaleFactor;
- r->h = dst_h * _scaleFactor;
+ r->x *= _scaleFactor;
+ r->y = dst_y;
+ r->w *= _scaleFactor;
+ r->h = dst_h * _scaleFactor;
+ }
+
+ SDL_UnlockSurface(_tmpscreen);
+ SDL_UnlockSurface(_hwscreen);
}
-
- SDL_UnlockSurface(_tmpscreen);
- SDL_UnlockSurface(_hwscreen);
// Readjust the dirty rect list in case we are doing a full update.
// This is necessary if shaking is active.