Full screen resolutions

Discussion and announcements regarding the Mac port… er, original version of Oolite.

Moderators: winston, another_commander

User avatar
Eric Walch
Slightly Grand Rear Admiral
Slightly Grand Rear Admiral
Posts: 5536
Joined: Sat Jun 16, 2007 3:48 pm
Location: Netherlands

Re: Full screen resolutions

Post by Eric Walch »

Confirmed on a 10.6 and a 10.5 machine after just making a new build. Both OS work as advertised in above messages with the known current limitations.

The 10.5 machine had still the problem that it did not see the path to the saved files and did not offer the option to load a new commander. Actually it must have known the path, as when I choose to load a file from the F2 screen, it immediately presented the right folder to my files which are not in the default place. Once having loaded a file, I got the offer to load a game on the next restart. So the problem was only initial. Strange still, as this is the computer I have full of Oolite version that never gave such a problem.
User avatar
JensAyton
Grand Admiral Emeritus
Grand Admiral Emeritus
Posts: 6657
Joined: Sat Apr 02, 2005 2:43 pm
Location: Sweden
Contact:

Re: Full screen resolutions

Post by JensAyton »

As of r5192, full screen mode is once again partly supported in the 64-bit build. There is no full screen resolution setting; it will always run at the current system setting.

Features:
  • Can access menu bar and dock in full-screen mode.
  • Can command-tab out, use Spaces/Mission Control, etc. (Full-screen window hides when not frontmost application.)
  • Can show JavaScript console, inspectors, help window etc. over game in full-screen mode.
  • On multi-monitor systems, full screen mode will use the screen containing the largest portion of the non-full-screen window. (This can probably be back-ported to the 32-bit implementation quite easily.)
Missing:
  • Mouse control. The mouse cursor is also visible at all times. My plan is to hide it in flight views and make it visible in other screens (and while paused) so you can get at menus, inspectors etc.
  • Changing screen resolutions or adding/removing screens while in full screen mode is not handled gracefully yet. Switching out of full screen mode and back again will fix things.
  • Some controls and behaviours may not work right because they expect the old full screen mode. Please report any oddities not listed here!
User avatar
Eric Walch
Slightly Grand Rear Admiral
Slightly Grand Rear Admiral
Posts: 5536
Joined: Sat Jun 16, 2007 3:48 pm
Location: Netherlands

Re: Full screen resolutions

Post by Eric Walch »

Great having the console and inspectors visible in full screen mode. :) Menu and doc also works on snow leopard.

I found one bug with mouse control when loading a game. I am pleased that the very invisible cross hair has changed into a proper pointer. But I can no longer select a file by clicking on a specific file. It always selects the same file no matter where I click.

Than I got an error during compile:

Code: Select all

/Users/ericwalch/Oolite/trunk/src/Core/../Cocoa/OOMacSnowLeopardFullScreenController.m:241:10: error: property 'opaque' not found on object of type 'OOFullScreenWindow *'
                 window.opaque = YES;
                        ^
/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h:494:1: note: or because setter is declared here, but no getter method 'opaque' is found
The same error also for window.movable. When I interpret this error correct, than these properties should be defined in the MacOSX10.7.sdk library. Is it possible that there are different versions of that library?

Now I just commenter out those 2 lines. (4 actually).
User avatar
JensAyton
Grand Admiral Emeritus
Grand Admiral Emeritus
Posts: 6657
Joined: Sat Apr 02, 2005 2:43 pm
Location: Sweden
Contact:

Re: Full screen resolutions

Post by JensAyton »

Eric Walch wrote:
I found one bug with mouse control when loading a game. I am pleased that the very invisible cross hair has changed into a proper pointer. But I can no longer select a file by clicking on a specific file. It always selects the same file no matter where I click.
OK, that’s not very surprising (and the mouse doesn’t work in other UI screens either). I actually intend to use standard open/save panels in 64-bit full screen, but obviously the underlying issue needs to be fixed anyway.
Eric Walch wrote:
Than I got an error during compile:

Code: Select all

/Users/ericwalch/Oolite/trunk/src/Core/../Cocoa/OOMacSnowLeopardFullScreenController.m:241:10: error: property 'opaque' not found on object of type 'OOFullScreenWindow *'
                 window.opaque = YES;
                        ^
/Developer/SDKs/MacOSX10.7.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSWindow.h:494:1: note: or because setter is declared here, but no getter method 'opaque' is found
The same error also for window.movable. When I interpret this error correct, than these properties should be defined in the MacOSX10.7.sdk library. Is it possible that there are different versions of that library?
Ah… this is because you’re using an older compiler which isn’t as clever about identifying implicit properties. It will recognise a method pair -(T)foo and -(void)setFoo:(T)foo as equivalent to a property @property T foo, but not the special case that -(BOOL)isBar and -(void)setBar:(BOOL)bar are equivalent to @property (getter=isBar) BOOL bar. I’ll switch to old syntax for those cases.
User avatar
JensAyton
Grand Admiral Emeritus
Grand Admiral Emeritus
Posts: 6657
Joined: Sat Apr 02, 2005 2:43 pm
Location: Sweden
Contact:

Re: Full screen resolutions

Post by JensAyton »

As of r5200, mouse interaction now works (but mouse control doesn’t work well), and screen reconfigurations are handled gracefully.
User avatar
JensAyton
Grand Admiral Emeritus
Grand Admiral Emeritus
Posts: 6657
Joined: Sat Apr 02, 2005 2:43 pm
Location: Sweden
Contact:

Re: Full screen resolutions

Post by JensAyton »

In r5211, changing full screen resolution while in full screen (32-bit only) works again. I’ve decided to keep 32-bit mode main-screen-only, because the way configuration is handled assumes there’s a single, static list of possible resolutions.

In other words, after a week and a half of tinkering, it works exactly like before for a small subset of users and is still half-broken for everyone else. See aforementioned lolcat. :-)
User avatar
Eric Walch
Slightly Grand Rear Admiral
Slightly Grand Rear Admiral
Posts: 5536
Joined: Sat Jun 16, 2007 3:48 pm
Location: Netherlands

Re: Full screen resolutions

Post by Eric Walch »

Not completely exact. In 32-bit mode on the Snow Leopard there must be a bug somewhere. On switching resolutions, Oolite crashed now 5 times out of 6 tries with my full oxp set installed. One time everything worked though. I got 2 completely different backtraces:
This one 2x

Code: Select all

Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   org.aegidian.oolite           	0x0011b703 CheckOpenGLErrors + 37 (OOOpenGL.m:47)
1   org.aegidian.oolite           	0x000366f3 -[Universe drawUniverse] + 655 (Universe.m:3628)
2   org.aegidian.oolite           	0x0004ec84 -[MyOpenGLView drawRect:] + 246 (MyOpenGLView.m:277)
3   org.aegidian.oolite           	0x0004eb88 -[MyOpenGLView updateScreen] + 128 (MyOpenGLView.m:263)
4   org.aegidian.oolite           	0x0000f9d0 -[GameController windowDidResize:] + 30 (GameController.m:796)
5   com.apple.Foundation          	0x92605db3 _nsnote_callback + 176
6   com.apple.CoreFoundation      	0x930ca763 __CFXNotificationPost + 947
7   com.apple.CoreFoundation      	0x930ca16a _CFXNotificationPostNotification + 186
8   com.apple.Foundation          	0x925fac50 -[NSNotificationCenter postNotificationName:object:userInfo:] + 128
9   com.apple.Foundation          	0x9260805d -[NSNotificationCenter postNotificationName:object:] + 56
10  com.apple.AppKit              	0x99bf9b09 -[NSWindow _setFrameCommon:display:stashSize:] + 2039
11  com.apple.AppKit              	0x99bf930b -[NSWindow setFrame:display:] + 78
12  com.apple.AppKit              	0x99c114e4 -[NSWindow _reallyDoOrderWindow:relativeTo:findKey:forCounter:force:isModal:] + 802
13  com.apple.AppKit              	0x99c11161 -[NSWindow orderWindow:relativeTo:] + 105
14  com.apple.AppKit              	0x99c0e90f -[NSWindow makeKeyAndOrderFront:] + 73
15  com.apple.AppKit              	0x99c4a184 -[NSApplication _sendFinishLaunchingNotification] + 168
16  com.apple.AppKit              	0x99da1339 -[NSApplication(NSAppleEventHandling) _handleAEOpen:] + 274
17  com.apple.AppKit              	0x99da0f59 -[NSApplication(NSAppleEventHandling) _handleCoreEvent:withReplyEvent:] + 101
this one 3x

Code: Select all

Thread 0 Crashed:  Dispatch queue: com.apple.main-thread
0   org.aegidian.oolite           	0x0010d712 -[OOShaderProgram dealloc] + 15 (OOShaderProgram.m:152)
1   org.aegidian.oolite           	0x0010b80a -[OOShaderMaterial dealloc] + 55 (OOShaderMaterial.m:275)
2   org.aegidian.oolite           	0x00114618 -[OOMesh dealloc] + 149 (OOMesh.m:293)
3   com.apple.CoreFoundation      	0x9307beb8 CFRelease + 152
4   com.apple.CoreFoundation      	0x930a8bcd _CFAutoreleasePoolPop + 253
5   com.apple.Foundation          	0x925f3976 NSPopAutoreleasePool + 76
6   com.apple.Foundation          	0x925f47d2 -[NSAutoreleasePool release] + 130
7   org.aegidian.oolite           	0x0000e8b5 -[GameController applicationDidFinishLaunching:] + 842 (GameController.m:263)
8   com.apple.Foundation          	0x92605db3 _nsnote_callback + 176
9   com.apple.CoreFoundation      	0x930ca763 __CFXNotificationPost + 947
10  com.apple.CoreFoundation      	0x930ca16a _CFXNotificationPostNotification + 186
11  com.apple.Foundation          	0x925fac50 -[NSNotificationCenter postNotificationName:object:userInfo:] + 128
12  com.apple.Foundation          	0x9260805d -[NSNotificationCenter postNotificationName:object:] + 56
13  com.apple.AppKit              	0x99c4a216 -[NSApplication _postDidFinishNotification] + 125
14  com.apple.AppKit              	0x99c4a126 -[NSApplication _sendFinishLaunchingNotification] + 74
15  com.apple.AppKit              	0x99da1339 -[NSApplication(NSAppleEventHandling) _handleAEOpen:] + 274
16  com.apple.AppKit              	0x99da0f59 -[NSApplication(NSAppleEventHandling) _handleCoreEvent:withReplyEvent:] + 101
I see no clear relation with screen orientated stuff.
EDIT: And now I got the exact 1st backtrace again on switching from full screen to windowed mode.
Last edited by Eric Walch on Sun Aug 19, 2012 8:40 pm, edited 1 time in total.
User avatar
JensAyton
Grand Admiral Emeritus
Grand Admiral Emeritus
Posts: 6657
Joined: Sat Apr 02, 2005 2:43 pm
Location: Sweden
Contact:

Re: Full screen resolutions

Post by JensAyton »

I’m going to guess the current GL context isn’t set properly at some point. :-/
User avatar
JensAyton
Grand Admiral Emeritus
Grand Admiral Emeritus
Posts: 6657
Joined: Sat Apr 02, 2005 2:43 pm
Location: Sweden
Contact:

Re: Full screen resolutions

Post by JensAyton »

I haven’t forgotten the 32-bit issue, but I have ignored it to finish the next thing I was working on: the system-standard full screen mode is now supported in 10.7 or later, including the standard full screen button on the right end of the title bar.

On OS X 10.7 only, the slightly less fancy 10.6 mode is used if multiple monitors are in use (as determined when the game starts). This is because standard full screen mode always uses the main screen – the one with the menu bar – in 10.7. In 10.8, it uses whichever screen the window is on, just like in our 10.6 mode.
User avatar
Eric Walch
Slightly Grand Rear Admiral
Slightly Grand Rear Admiral
Posts: 5536
Joined: Sat Jun 16, 2007 3:48 pm
Location: Netherlands

Re: Full screen resolutions

Post by Eric Walch »

In the new file you added ("OOMacSystemStandardFullScreenController.m"), my compiler has 4 complaints:

Code: Select all

/Users/ericwalch/Oolite/trunk/src/Core/../Cocoa/OOMacSystemStandardFullScreenController.m:46:30: error: use of undeclared identifier 'NSAppKitVersionNumber10_7'
         if (NSAppKitVersionNumber < NSAppKitVersionNumber10_7)
                                     ^
/Users/ericwalch/Oolite/trunk/src/Core/../Cocoa/OOMacSystemStandardFullScreenController.m:53:38: error: expected identifier
         NSString *override = [NSUserDefaults.standardUserDefaults stringForKey:@"full-screen-mode-override"];
                                             ^
/Users/ericwalch/Oolite/trunk/src/Core/../Cocoa/OOMacSystemStandardFullScreenController.m:60:37: error: use of undeclared identifier 'NSAppKitVersionNumber10_7'
         if (floor(NSAppKitVersionNumber) > NSAppKitVersionNumber10_7)
                                            ^
/Users/ericwalch/Oolite/trunk/src/Core/../Cocoa/OOMacSystemStandardFullScreenController.m:92:9: error: unexpected '@' in program
         return @[@{ kOODisplayWidth: @(size.width), kOODisplayWidth: @(size.height) }];
                ^
4 errors generated.
nr 1 and 3 are identical
nr 2 fixes when replacing 'NSUserDefaults.standardUserDefaults' by '[NSUserDefaults standardUserDefaults]'
User avatar
JensAyton
Grand Admiral Emeritus
Grand Admiral Emeritus
Posts: 6657
Joined: Sat Apr 02, 2005 2:43 pm
Location: Sweden
Contact:

Re: Full screen resolutions

Post by JensAyton »

I’m surprised it isn’t more than that. Aren’t you building with the 10.6 SDK? OO_MAC_SUPPORT_SYSTEM_STANDARD_FULL_SCREEN is supposed to exclude that class completely when you build it, see the header.
User avatar
Eric Walch
Slightly Grand Rear Admiral
Slightly Grand Rear Admiral
Posts: 5536
Joined: Sat Jun 16, 2007 3:48 pm
Location: Netherlands

Re: Full screen resolutions

Post by Eric Walch »

Ahruman wrote:
Aren’t you building with the 10.6 SDK?
Every time the project file file is updated, any old private settings are gone. It did show 'base SDK = Mac OS X 10.7'. But, even when I switch it back to 'base SDK = Mac OS X 10.6' and select 'Build active Architecture Only' I get the same 4 errors.
User avatar
JensAyton
Grand Admiral Emeritus
Grand Admiral Emeritus
Posts: 6657
Joined: Sat Apr 02, 2005 2:43 pm
Location: Sweden
Contact:

Re: Full screen resolutions

Post by JensAyton »

In OOMacSystemStandardFullScreenController.h, change the bit that defines OO_MAC_SUPPORT_SYSTEM_STANDARD_FULL_SCREEN as follows. Which warnings show up?

Code: Select all

#if OOLITE_MAC_OS_X
    #warning OOLITE_MAC_OS_X is true (as expected)
    #if OOLITE_64_BIT
        #warning OOLITE_MAC_OS_X is true (as expected)
        #ifdef MAC_OS_X_VERSION_10_7
            #warning OOLITE_MAC_OS_X is defined (NOT EXPECTED)
            #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7
                #warning MAC_OS_X_VERSION_MAX_ALLOWED >= 10.7 (NOT EXPECTED)
                #define OO_MAC_SUPPORT_SYSTEM_STANDARD_FULL_SCREEN 1
            #endif
        #endif
    #endif
#endif
User avatar
Eric Walch
Slightly Grand Rear Admiral
Slightly Grand Rear Admiral
Posts: 5536
Joined: Sat Jun 16, 2007 3:48 pm
Location: Netherlands

Re: Full screen resolutions

Post by Eric Walch »

Ahruman wrote:
In OOMacSystemStandardFullScreenController.h, change the bit that defines OO_MAC_SUPPORT_SYSTEM_STANDARD_FULL_SCREEN as follows. Which warnings show up?
I get with above change:

Code: Select all

In file included from /Users/ericwalch/Oolite/trunk/src/Core/../Cocoa/OOMacSystemStandardFullScreenController.m:26:
/Users/ericwalch/Oolite/trunk/src/Core/../Cocoa/OOMacSystemStandardFullScreenController.h:39:2: error: #warning OOLITE_MAC_OS_X is true (as expected) [-W#warnings]
 #warning OOLITE_MAC_OS_X is true (as expected)
  ^
/Users/ericwalch/Oolite/trunk/src/Core/../Cocoa/OOMacSystemStandardFullScreenController.h:41:2: error: #warning OOLITE_MAC_OS_X is true (as expected) [-W#warnings]
 #warning OOLITE_MAC_OS_X is true (as expected)
  ^
/Users/ericwalch/Oolite/trunk/src/Core/../Cocoa/OOMacSystemStandardFullScreenController.h:43:2: error: #warning OOLITE_MAC_OS_X is defined (NOT EXPECTED) [-W#warnings]
 #warning OOLITE_MAC_OS_X is defined (NOT EXPECTED)
  ^
/Users/ericwalch/Oolite/trunk/src/Core/../Cocoa/OOMacSystemStandardFullScreenController.h:45:2: error: #warning MAC_OS_X_VERSION_MAX_ALLOWED >= 10.7 (NOT EXPECTED) [-W#warnings]
 #warning MAC_OS_X_VERSION_MAX_ALLOWED >= 10.7 (NOT EXPECTED)
  ^
After a bit of searching, the MAC_OS_X_VERSION_10_7 is defined in availabilityMacros.h and that file I find sitting in the MacOSX10.7.sdk folder.
So you are right that I am currently using those libraries. No idea were that is set.
User avatar
JensAyton
Grand Admiral Emeritus
Grand Admiral Emeritus
Posts: 6657
Joined: Sat Apr 02, 2005 2:43 pm
Location: Sweden
Contact:

Re: Full screen resolutions

Post by JensAyton »

Try r5252.
Post Reply