[Scummvm-cvs-logs] scummvm master -> e04d983f683871d455394fcbf50e2f964aaad365

lordhoto lordhoto at gmail.com
Thu Feb 24 04:52:07 CET 2011


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
e04d983f68 SDL: Use the SDL_Surface's pitch in copyRectToScreen.


Commit: e04d983f683871d455394fcbf50e2f964aaad365
    https://github.com/scummvm/scummvm/commit/e04d983f683871d455394fcbf50e2f964aaad365
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2011-02-23T19:24:58-08:00

Commit Message:
SDL: Use the SDL_Surface's pitch in copyRectToScreen.

This fixes messed up graphics, when SDL decides to add padding bytes to the
lines of an SDL_Surface. Formerly the code always calculated the pitch via
w*bpp, which of course does not work in all cases.

Changed paths:
    backends/graphics/sdl/sdl-graphics.cpp



diff --git a/backends/graphics/sdl/sdl-graphics.cpp b/backends/graphics/sdl/sdl-graphics.cpp
index 15d896c..d8b686e 100644
--- a/backends/graphics/sdl/sdl-graphics.cpp
+++ b/backends/graphics/sdl/sdl-graphics.cpp
@@ -1166,25 +1166,25 @@ void SdlGraphicsManager::copyRectToScreen(const byte *src, int pitch, int x, int
 		error("SDL_LockSurface failed: %s", SDL_GetError());
 
 #ifdef USE_RGB_COLOR
-	byte *dst = (byte *)_screen->pixels + y * _videoMode.screenWidth * _screenFormat.bytesPerPixel + x * _screenFormat.bytesPerPixel;
-	if (_videoMode.screenWidth == w && pitch == w * _screenFormat.bytesPerPixel) {
-		memcpy(dst, src, h*w*_screenFormat.bytesPerPixel);
+	byte *dst = (byte *)_screen->pixels + y * _screen->pitch + x * _screenFormat.bytesPerPixel;
+	if (_videoMode.screenWidth == w && pitch == _screen->pitch) {
+		memcpy(dst, src, h*pitch);
 	} else {
 		do {
 			memcpy(dst, src, w * _screenFormat.bytesPerPixel);
 			src += pitch;
-			dst += _videoMode.screenWidth * _screenFormat.bytesPerPixel;
+			dst += _screen->pitch;
 		} while (--h);
 	}
 #else
-	byte *dst = (byte *)_screen->pixels + y * _videoMode.screenWidth + x;
-	if (_videoMode.screenWidth == pitch && pitch == w) {
+	byte *dst = (byte *)_screen->pixels + y * _screen->pitch + x;
+	if (_screen->pitch == pitch && pitch == w) {
 		memcpy(dst, src, h*w);
 	} else {
 		do {
 			memcpy(dst, src, w);
 			src += pitch;
-			dst += _videoMode.screenWidth;
+			dst += _screen->pitch;
 		} while (--h);
 	}
 #endif






More information about the Scummvm-git-logs mailing list