changeset 9884:c7d1c11e632b draft

(svn r14032) -Fix (r13584): [OSX] changed the condition for selecting 8 or 32 bpp blitter by default Now we will pick 32 bpp if no 8 bpp fullscreen resolutions are available on the main display (the one with the dock)
author bjarni <bjarni@openttd.org>
date Sat, 09 Aug 2008 17:56:31 +0000
parents 369c99a0b939
children 3b8cd6da6920
files src/blitter/factory.hpp src/video/cocoa/fullscreen.mm
diffstat 2 files changed, 20 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/blitter/factory.hpp
+++ b/src/blitter/factory.hpp
@@ -10,6 +10,10 @@
 #include "../string_func.h"
 #include <map>
 
+#if defined(WITH_COCOA)
+bool QZ_CanDisplay8bpp();
+#endif /* defined(WITH_COCOA) */
+
 /**
  * The base factory, keeping track of all blitters.
  */
@@ -77,13 +81,15 @@
 	{
 		const char *default_blitter = "8bpp-optimized";
 
-#if defined(__APPLE__)
-		/* MacOS X 10.5 removed 8bpp fullscreen support.
-		 * Because of this we will pick 32bpp by default */
-		if (MacOSVersionIsAtLeast(10, 5, 0)) {
+#if defined(WITH_COCOA)
+		/* Some people reported lack of fullscreen support in 8 bpp mode.
+		 * While we prefer 8 bpp since it's faster, we will still have to test for support. */
+		if (!QZ_CanDisplay8bpp()) {
+			/* The main display can't go to 8 bpp fullscreen mode.
+			 * We will have to switch to 32 bpp by default. */
 			default_blitter = "32bpp-anim";
 		}
-#endif /* defined(__APPLE__) */
+#endif /* defined(WITH_COCOA) */
 		if (GetBlitters().size() == 0) return NULL;
 		const char *bname = (StrEmpty(name)) ? default_blitter : name;
 
--- a/src/video/cocoa/fullscreen.mm
+++ b/src/video/cocoa/fullscreen.mm
@@ -155,6 +155,15 @@
 	return count;
 }
 
+/* Small function to test if the main display can display 8 bpp in fullscreen */
+bool QZ_CanDisplay8bpp()
+{
+	OTTD_Point p;
+
+	/* We want to know if 8 bpp is possible in fullscreen and not anything about resolutions.
+	 * Because of this we want to fill a list of 1 resolution of 8 bpp on display 0 (main) and return if we found one. */
+	return QZ_ListModes(&p, 1, 0, 8);
+}
 
 class FullscreenSubdriver: public CocoaSubdriver {
 	int                display_width;