[Scummvm-cvs-logs] SF.net SVN: scummvm:[51674] scummvm/branches/gsoc2010-opengl/backends/ graphics/openglsdl

vgvgf at users.sourceforge.net vgvgf at users.sourceforge.net
Tue Aug 3 04:10:55 CEST 2010


Revision: 51674
          http://scummvm.svn.sourceforge.net/scummvm/?rev=51674&view=rev
Author:   vgvgf
Date:     2010-08-03 02:10:55 +0000 (Tue, 03 Aug 2010)

Log Message:
-----------
OPENGL: Prioritize desktop resolution as default fullscreen mode.

Modified Paths:
--------------
    scummvm/branches/gsoc2010-opengl/backends/graphics/openglsdl/openglsdl-graphics.cpp
    scummvm/branches/gsoc2010-opengl/backends/graphics/openglsdl/openglsdl-graphics.h

Modified: scummvm/branches/gsoc2010-opengl/backends/graphics/openglsdl/openglsdl-graphics.cpp
===================================================================
--- scummvm/branches/gsoc2010-opengl/backends/graphics/openglsdl/openglsdl-graphics.cpp	2010-08-03 01:10:36 UTC (rev 51673)
+++ scummvm/branches/gsoc2010-opengl/backends/graphics/openglsdl/openglsdl-graphics.cpp	2010-08-03 02:10:55 UTC (rev 51674)
@@ -35,6 +35,8 @@
 	_screenResized(false),
 	_lastFullscreenModeWidth(0),
 	_lastFullscreenModeHeight(0),
+	_desktopWidth(0),
+	_desktopHeight(0),
 	_desktopAspectRatio(0) {
 
 	// Initialize SDL video subsystem
@@ -47,8 +49,11 @@
 
 	// Get desktop resolution
 	const SDL_VideoInfo *videoInfo = SDL_GetVideoInfo();
-	if (videoInfo->current_w > 0 && videoInfo->current_h > 0)
+	if (videoInfo->current_w > 0 && videoInfo->current_h > 0) {
+		_desktopWidth = videoInfo->current_w;
+		_desktopHeight = videoInfo->current_h;
 		_desktopAspectRatio = videoInfo->current_w * 10000 / videoInfo->current_h;
+	}
 
 	if (ConfMan.hasKey("last_fullscreen_mode_width") && ConfMan.hasKey("last_fullscreen_mode_height")) {
 		_lastFullscreenModeWidth = ConfMan.getInt("last_fullscreen_mode_width");
@@ -229,7 +234,16 @@
 	SDL_Rect const* const*availableModes = SDL_ListModes(NULL, SDL_FULLSCREEN | SDL_OPENGL);
 
 	// If -1, autodetect the fullscreen mode
+	// The first one to select will be the last used fullscreen mode
+	// The second one the desktop resolution.
+	// In the rare case that there is no fullscreen mode with same desktop resolution,
+	// or when the desktop data could not be obtained, the smallest one with the same
+	// aspect ratio as desktop will be selected.
+	// Finaly, if all other fail, the one with smallest metric will be selected.
 	if (_videoMode.activeFullscreenMode == -1) {
+		// Desktop resolution
+		int desktopModeIndex = -1;
+
 		// Best metric mode
 		const SDL_Rect *bestMode = availableModes[0];
 		int bestModeIndex = 0;
@@ -250,6 +264,9 @@
 				return true;
 			}
 
+			if (mode->w == _desktopWidth && mode->h == _desktopHeight)
+				desktopModeIndex = i;
+
 			if (mode->w < _videoMode.overlayWidth)
 				continue;
 			if (mode->h < _videoMode.overlayHeight)
@@ -268,15 +285,19 @@
 			}
 		}
 
-		if (bestASRMode) {
-			// Prefer modes that have the same aspect ratio as the native resolution
+		if (desktopModeIndex >= 0) {
+			_videoMode.hardwareWidth = _desktopWidth;
+			_videoMode.hardwareHeight = _desktopHeight;
+
+			_videoMode.activeFullscreenMode = desktopModeIndex;
+			return true;
+		} else if (bestASRMode) {
 			_videoMode.hardwareWidth = bestASRMode->w;
 			_videoMode.hardwareHeight = bestASRMode->h;
 
 			_videoMode.activeFullscreenMode = bestASRModeIndex;
 			return true;
 		} else if (bestMode) {
-			// If there is a suiting mode, use it
 			_videoMode.hardwareWidth = bestMode->w;
 			_videoMode.hardwareHeight = bestMode->h;
 
@@ -294,6 +315,7 @@
 		}
 	}
 
+	// Could not find any suiting fullscreen mode, return false.
 	return false;
 }
 

Modified: scummvm/branches/gsoc2010-opengl/backends/graphics/openglsdl/openglsdl-graphics.h
===================================================================
--- scummvm/branches/gsoc2010-opengl/backends/graphics/openglsdl/openglsdl-graphics.h	2010-08-03 01:10:36 UTC (rev 51673)
+++ scummvm/branches/gsoc2010-opengl/backends/graphics/openglsdl/openglsdl-graphics.h	2010-08-03 02:10:55 UTC (rev 51674)
@@ -88,6 +88,8 @@
 
 	int _lastFullscreenModeWidth;
 	int _lastFullscreenModeHeight;
+	int _desktopWidth;
+	int _desktopHeight;
 	uint _desktopAspectRatio;
 
 	// Hardware screen


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