[Scummvm-cvs-logs] SF.net SVN: scummvm:[52138] scummvm/trunk/backends/platform/psp

bluddy at users.sourceforge.net bluddy at users.sourceforge.net
Tue Aug 17 11:45:14 CEST 2010


Revision: 52138
          http://scummvm.svn.sourceforge.net/scummvm/?rev=52138&view=rev
Author:   bluddy
Date:     2010-08-17 09:45:14 +0000 (Tue, 17 Aug 2010)

Log Message:
-----------
PSP: changed display options to Full Screen, Keep Aspect Ratio and Original Resolution

This greatly simplifies the display options and makes them more practical. Original resolution will try to fit the game to the screen pixel-to-pixel, and will revert to full screen if it fails. Keep AR maximizes height and adjusts the width accordingly. This works very well with 320x200 games (AR of 1.6) which is close to the PSP's 1.7, but not so well with 320x240/640x480 (AR of 1.3). Full Screen is still default.

Modified Paths:
--------------
    scummvm/trunk/backends/platform/psp/display_manager.cpp
    scummvm/trunk/backends/platform/psp/display_manager.h

Modified: scummvm/trunk/backends/platform/psp/display_manager.cpp
===================================================================
--- scummvm/trunk/backends/platform/psp/display_manager.cpp	2010-08-17 09:28:20 UTC (rev 52137)
+++ scummvm/trunk/backends/platform/psp/display_manager.cpp	2010-08-17 09:45:14 UTC (rev 52138)
@@ -53,10 +53,9 @@
 uint32 __attribute__((aligned(16))) MasterGuRenderer::_displayList[2048];
 
 const OSystem::GraphicsMode DisplayManager::_supportedModes[] = {
-	{ "320x200 (centered)", "320x200 16-bit centered", CENTERED_320X200 },
-	{ "435x272 (best-fit, centered)", "435x272 16-bit centered", CENTERED_435X272 },
-	{ "480x272 (full screen)", "480x272 16-bit stretched", STRETCHED_480X272 },
-	{ "362x272 (4:3, centered)", "362x272 16-bit centered", CENTERED_362X272 },
+	{ "Original Resolution", "Original Resolution", ORIGINAL_RESOLUTION },
+	{ "Keep Aspect Ratio", "Keep Aspect Ratio", KEEP_ASPECT_RATIO },
+	{ "Full Screen", "Full Screen", STRETCHED_FULL_SCREEN },
 	{0, 0, 0}
 };
 
@@ -263,40 +262,52 @@
 
 	_graphicsMode = mode;
 
+	calculateScaleParams();
+
+	return true;
+}
+
+void DisplayManager::calculateScaleParams() {
+
+	if (!_displayParams.screenSource.width || !_displayParams.screenSource.height)
+		return; // we can't calculate anything without these
+
 	switch (_graphicsMode) {
-	case CENTERED_320X200:
-		_displayParams.screenOutput.width = 320;
-		_displayParams.screenOutput.height = 200;
+	case ORIGINAL_RESOLUTION:
+		// check if we can fit the original resolution inside the screen
+		if ((_displayParams.screenSource.width < PSP_SCREEN_WIDTH) &&
+			(_displayParams.screenSource.height < PSP_SCREEN_HEIGHT)) {
+			_displayParams.screenOutput.width =  _displayParams.screenSource.width;
+			_displayParams.screenOutput.height =  _displayParams.screenSource.height;
+		} else { // revert to stretch to fit
+			_displayParams.screenOutput.width = PSP_SCREEN_WIDTH;
+			_displayParams.screenOutput.height = PSP_SCREEN_HEIGHT;
+		}
 		break;
-	case CENTERED_435X272:
-		_displayParams.screenOutput.width = 435;
-		_displayParams.screenOutput.height = 272;
+	case KEEP_ASPECT_RATIO:	{ // maximize the height while keeping aspect ratio
+			float aspectRatio = (float)_displayParams.screenSource.width / (float)_displayParams.screenSource.height;
+			
+			_displayParams.screenOutput.height = PSP_SCREEN_HEIGHT;	// always full height
+			_displayParams.screenOutput.width = (uint32)(PSP_SCREEN_HEIGHT * aspectRatio);
+			
+			if (_displayParams.screenOutput.width > PSP_SCREEN_WIDTH) // we can't have wider than the screen
+				_displayParams.screenOutput.width = PSP_SCREEN_WIDTH;
+		}
 		break;
-	case STRETCHED_480X272:
-		_displayParams.screenOutput.width = 480;
-		_displayParams.screenOutput.height = 272;
+	case STRETCHED_FULL_SCREEN:	// we simply stretch to the whole screen
+		_displayParams.screenOutput.width = PSP_SCREEN_WIDTH;
+		_displayParams.screenOutput.height = PSP_SCREEN_HEIGHT;
 		break;
-	case CENTERED_362X272:
-		_displayParams.screenOutput.width = 362;
-		_displayParams.screenOutput.height = 272;
-		break;
 	default:
 		PSP_ERROR("Unsupported graphics mode[%d].\n", _graphicsMode);
 	}
+	
+	// calculate scale factors for X and Y
+	_displayParams.scaleX = ((float)_displayParams.screenOutput.width) / _displayParams.screenSource.width;
+	_displayParams.scaleY = ((float)_displayParams.screenOutput.height) / _displayParams.screenSource.height;
 
-	calculateScaleParams();
-
-	return true;
 }
 
-void DisplayManager::calculateScaleParams() {
-	if (_displayParams.screenOutput.width && _displayParams.screenSource.width &&
-	        _displayParams.screenOutput.height && _displayParams.screenSource.height) {
-		_displayParams.scaleX = ((float)_displayParams.screenOutput.width) / _displayParams.screenSource.width;
-		_displayParams.scaleY = ((float)_displayParams.screenOutput.height) / _displayParams.screenSource.height;
-	}
-}
-
 // return true if we really rendered or no dirty. False otherwise
 bool DisplayManager::renderAll() {
 	DEBUG_ENTER_FUNC();

Modified: scummvm/trunk/backends/platform/psp/display_manager.h
===================================================================
--- scummvm/trunk/backends/platform/psp/display_manager.h	2010-08-17 09:28:20 UTC (rev 52137)
+++ scummvm/trunk/backends/platform/psp/display_manager.h	2010-08-17 09:45:14 UTC (rev 52138)
@@ -61,10 +61,9 @@
 class DisplayManager {
 public:
 	enum GraphicsModeID {			///> Possible output formats onscreen
-		CENTERED_320X200,
-		CENTERED_435X272,
-		STRETCHED_480X272,
-		CENTERED_362X272
+		ORIGINAL_RESOLUTION,
+		KEEP_ASPECT_RATIO,
+		STRETCHED_FULL_SCREEN
 	};
 	DisplayManager() : _screen(0), _cursor(0), _overlay(0), _keyboard(0), _lastUpdateTime(0), _graphicsMode(0) {}
 	~DisplayManager();
@@ -74,7 +73,7 @@
 	bool setGraphicsMode(int mode);
 	bool setGraphicsMode(const char *name);
 	int getGraphicsMode() const { return _graphicsMode; }
-	uint32 getDefaultGraphicsMode() const { return STRETCHED_480X272; }
+	uint32 getDefaultGraphicsMode() const { return STRETCHED_FULL_SCREEN; }
 	const OSystem::GraphicsMode* getSupportedGraphicsModes() const { return _supportedModes; }
 
 	// Setters


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list