[Scummvm-cvs-logs] scummvm master -> 949b30dc36efd4c25822f83c6869179ea0f36dd2

lordhoto lordhoto at gmail.com
Wed Nov 9 18:58:43 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:
949b30dc36 OPENGL: Always set the unpack alignment when refreshing the textures.


Commit: 949b30dc36efd4c25822f83c6869179ea0f36dd2
    https://github.com/scummvm/scummvm/commit/949b30dc36efd4c25822f83c6869179ea0f36dd2
Author: Johannes Schickel (lordhoto at scummvm.org)
Date: 2011-11-09T09:57:13-08:00

Commit Message:
OPENGL: Always set the unpack alignment when refreshing the textures.

This should hopefully make sure we are always having the correct alignment set
up. This might fix bug #3435655 "OpenGL display corruption with various Sierra
games Daily B.".

Changed paths:
    backends/graphics/opengl/gltexture.h
    backends/graphics/opengl/opengl-graphics.cpp



diff --git a/backends/graphics/opengl/gltexture.h b/backends/graphics/opengl/gltexture.h
index 71f1eeb..d8c42ee 100644
--- a/backends/graphics/opengl/gltexture.h
+++ b/backends/graphics/opengl/gltexture.h
@@ -103,6 +103,11 @@ public:
 	GLuint getHeight() const { return _realHeight; }
 
 	/**
+	 * Get the bytes per pixel.
+	 */
+	uint getBytesPerPixel() const { return _bytesPerPixel; }
+
+	/**
 	 * Set the texture filter.
 	 * @filter the filter type, GL_NEAREST or GL_LINEAR
 	 */
diff --git a/backends/graphics/opengl/opengl-graphics.cpp b/backends/graphics/opengl/opengl-graphics.cpp
index 8e01e76..5b1f7b4 100644
--- a/backends/graphics/opengl/opengl-graphics.cpp
+++ b/backends/graphics/opengl/opengl-graphics.cpp
@@ -1115,8 +1115,6 @@ void OpenGLGraphicsManager::loadTextures() {
 	}
 #endif
 
-	uint gameScreenBPP = 0;
-
 	if (!_gameTexture) {
 		byte bpp;
 		GLenum intformat;
@@ -1127,7 +1125,6 @@ void OpenGLGraphicsManager::loadTextures() {
 #else
 		getGLPixelFormat(Graphics::PixelFormat::createFormatCLUT8(), bpp, intformat, format, type);
 #endif
-		gameScreenBPP = bpp;
 		_gameTexture = new GLTexture(bpp, intformat, format, type);
 	} else
 		_gameTexture->refresh();
@@ -1186,10 +1183,11 @@ void OpenGLGraphicsManager::loadTextures() {
 	// We need to setup a proper unpack alignment value here, else we will
 	// get problems with the texture updates, in case the surface data is
 	// not properly aligned.
-	// For now we use the gcd of the game screen format and 2, since 2 is
-	// the BPP value for the overlay and the OSD.
-	if (gameScreenBPP)
-		glPixelStorei(GL_UNPACK_ALIGNMENT, Common::gcd<uint>(gameScreenBPP, 2));
+	// It is noteworthy this assumes the OSD uses the same BPP as the overlay
+	// and that the cursor works with any alignment setting.
+	int newAlignment = Common::gcd(_gameTexture->getBytesPerPixel(), _overlayTexture->getBytesPerPixel());
+	assert(newAlignment == 1 || newAlignment == 2 || newAlignment == 4);
+	glPixelStorei(GL_UNPACK_ALIGNMENT, newAlignment);
 
 	// We use a "pack" alignment (when reading from textures) to 4 here,
 	// since the only place where we really use it is the BMP screenshot






More information about the Scummvm-git-logs mailing list