Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 367718

Summary: Hangs on render graphics under Mac OS X
Product: z_Archived Reporter: Miles Parker <milesparker>
Component: Gef3dAssignee: Project Inbox <gef3d.draw3d-inbox>
Status: RESOLVED FIXED QA Contact:
Severity: major    
Priority: P3 CC: developer
Version: unspecified   
Target Milestone: ---   
Hardware: Macintosh   
OS: Mac OS X - Carbon (unsup.)   
Whiteboard:
Bug Depends on:    
Bug Blocks: 367721    

Description Miles Parker CLA 2012-01-02 15:29:56 EST
I'm not sure what the immediate cause of this is, but I haven't been able to get recent versions of Eclipse and the current GEF to run on Mac.

This is what I'm seeing. I'm pretty sure the LWJGL renderer itself is loading.

Jan 2, 2012 12:29:23 PM org.eclipse.draw3d.graphics3d.lwjgl.Graphics3DLwjgl <init>
INFO: Graphics3DLwjgl constructor called
2012-01-02 12:29:23.941 java[10666:903] [Java CocoaComponent compatibility mode]: Enabled
2012-01-02 12:29:23.942 java[10666:903] [Java CocoaComponent compatibility mode]: Setting timeout for SWT to 0.100000
2012-01-02 12:29:24.318 java[10666:24603] *** -[NSConditionLock unlock]: lock (<NSConditionLock: 0x100145500> '(null)') unlocked when not locked
2012-01-02 12:29:24.318 java[10666:24603] *** Break on _NSLockError() to debug.
Comment 1 Miles Parker CLA 2012-01-02 15:34:37 EST
Hmm... I'm now thinking that this might be a LWJGL library / snow leopard issue or something. Because it isn't working with my older version of AMP either.
Comment 2 Miles Parker CLA 2012-01-02 20:43:09 EST
OK, this appears to be in the LWJGL plugin itself. When I simply install the LWJGL plugin and follow the directions here: http://wiki.eclipse.org/LWJGL_Plugin I get the same issue. There seems to be a lot of traffic about this issue WRT to java libraries going back many years but it's pretty opaque to me.

I'm going to post on the LWJGL forum as well.
Comment 3 Miles Parker CLA 2012-01-02 20:59:03 EST
OK, see also: http://lwjgl.org/forum/index.php/topic,4375.msg23588.html#msg23588

I hate to cross-post a bug, but I think folks should be able to see both.

As I mentioned there:

One odd thing is that the LWJGL Test View actually works, but the LWJGL INfo View breaks.

So I'm not sure what the heck is going on here. It's frustrating because I can actually see a 3D render, but not for my stuff. ;)
Comment 4 Miles Parker CLA 2012-01-02 21:48:08 EST
OK, I have a *possible* candidate explanation.

In MacOSXFrame, we have:

	public void resize(int x, int y, int width, int height) {
		Insets insets = getInsets();
		setBounds(x, y, width + insets.left + insets.right, height + insets.top + insets.bottom);
	} 

Here: java.awt.Insets[top=22,left=0,bottom=0,right=0]

This gives e.g. a frame size of 1920x1222 for a display of 1920x1200! 

This now calls Mac internals, so it's not clear if this is what is getting barfed on or not.

I'd love to test this, but that would mean installing SVN.. :P
Comment 5 Miles Parker CLA 2012-01-02 23:29:47 EST
Gotcha!! I had to take the pain and install SVN...

This bit is not actually causing the hang:

2012-01-02 20:16:50.667 java[30052:1f603] *** -[NSConditionLock unlock]: lock (<NSConditionLock: 0x100684e30> '(null)') unlocked when not locked
2012-01-02 20:16:50.667 java[30052:1f603] *** Break on _NSLockError() to debug.

This is what seems to really be blowing things up:

org.lwjgl.opengl.Display
	public static void destroy() {...}

A subsequent call buried in MacOSXFrame seems to be that actual croak. See the full stack trace below.

By commenting out:

LWJGLInfoView
Line 120:
		//Display.destroy();

The info window shows up. Unfortunately, the display window also hangs around. Don't know if there is a better way to hide that or not.

In my code for AMP 3D, the issue occurs when Graphics3DLwjgl#check calls destroy. Line: 418. Commenting that out gets rid of the issue but again causes the window to remain. That's something I can live with, but we'll need to figure out how to get some sort of fix into GEF3D.

Oh yeah, that's right, I have GEF3D commit privileges.. <Evil Grin/>


Daemon Thread [Thread-1] (Suspended)	
	Object.wait(long) line: not available [native method]	
	EventQueue$1AWTInvocationLock(Object).wait() line: 485	
	EventQueue.invokeAndWait(Runnable) line: 1073	
	MacOSXFrame(Window).doDispose() line: 1030	
	MacOSXFrame(Window).dispose() line: 973	
	MacOSXDisplay.destroyWindow() line: 139	
	Display.destroyWindow() line: 351	
	Display.access$400() line: 62	
	Display$5.destroy() line: 860	
	Display.destroy() line: 1111	
	LWJGLInfoView.gatherInformation() line: 120	
	LWJGLInfoView.createPartControl(Composite) line: 60	
	ViewReference.createPartHelper() line: 375	
	ViewReference.createPart() line: 229	
	ViewReference(WorkbenchPartReference).getPart(boolean) line: 595	
	Perspective.showView(String, String) line: 2245	
	WorkbenchPage.busyShowView(String, String, int) line: 1145	
	WorkbenchPage$20.run() line: 3921	
	BusyIndicator.showWhile(Display, Runnable) line: 70	
	WorkbenchPage.showView(String, String, int) line: 3918	
	ShowViewHandler.openView(String, String, IWorkbenchWindow) line: 162	
	ShowViewHandler.openOther(IWorkbenchWindow) line: 105	
	ShowViewHandler.execute(ExecutionEvent) line: 73	
	HandlerProxy.execute(ExecutionEvent) line: 293	
	Command.executeWithChecks(ExecutionEvent) line: 476	
	ParameterizedCommand.executeWithChecks(Object, Object) line: 508	
	HandlerService.executeCommand(ParameterizedCommand, Event) line: 169	
	SlaveHandlerService.executeCommand(ParameterizedCommand, Event) line: 241	
	ShowViewMenu$3.run() line: 187	
	ShowViewMenu$3(Action).runWithEvent(Event) line: 498	
	ActionContributionItem.handleWidgetSelection(Event, boolean) line: 584	
	ActionContributionItem.access$2(ActionContributionItem, Event, boolean) line: 501	
	ActionContributionItem$5.handleEvent(Event) line: 411	
	EventTable.sendEvent(Event) line: 84	
	Display.sendEvent(EventTable, Event) line: 4128	
	MenuItem(Widget).sendEvent(Event) line: 1457	
	MenuItem(Widget).sendEvent(int, Event, boolean) line: 1480	
	MenuItem(Widget).sendEvent(int, Event) line: 1465	
	MenuItem(Widget).notifyListeners(int, Event) line: 1270	
	Display.runDeferredEvents() line: 3974	
	Display.readAndDispatch() line: 3613	
	Workbench.runEventLoop(Window$IExceptionHandler, Display) line: 2696	
	Workbench.runUI() line: 2660	
	Workbench.access$4(Workbench) line: 2494	
	Workbench$7.run() line: 674	
	Realm.runWithDefault(Realm, Runnable) line: 332	
	Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 667	
	PlatformUI.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 149	
	IDEApplication.start(IApplicationContext) line: 123	
	EclipseAppHandle.run(Object) line: 196	
	EclipseAppLauncher.runApplication(Object) line: 110	
	EclipseAppLauncher.start(Object) line: 79	
	EclipseStarter.run(Object) line: 344	
	EclipseStarter.run(String[], Runnable) line: 179	
	NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]	
	NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39	
	DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25	
	Method.invoke(Object, Object...) line: 597	
	Main.invokeFramework(String[], URL[]) line: 622	
	Main.basicRun(String[]) line: 577	
	Main.run(String[]) line: 1410	
	Main.main(String[]) line: 1386
Comment 6 Jens Von Pilgrim CLA 2012-01-03 13:46:34 EST
Miles,

this is odd, as it works on my system (Snow Leopard as well). Which LWJGL version are you using (this info may be useful for the LWJGL guys as well...). You could try my "personal" LWJGL update site which provides the latest LWJGL 2.8.2 version (the 2.8.2 version currently provided at lwgjgl.org/update is broken): http://jevopi.de/updatesite/org.lwjgl.updatesite 

Which graphics card do you have? 

I'm not sure but, but I figure it might be a problem with some OpenGL extensions. The test view does not use any extension, but GEF3D does. And these extensions are queried when initializing the info view.

Cheers,
Jens
Comment 7 Miles Parker CLA 2012-01-14 19:24:06 EST
That's exactly the version I have installed, so unless there is an issue with the LWJGL build that's probably not it. I have a Radeon 3870. I'm going to chek to see if it is an issue on my (discrete graphics) MacBook Pro as well.
Comment 8 Jens Von Pilgrim CLA 2012-04-26 13:50:50 EDT
The bug was initially caused by closing a display, temporarily opened in order to retrieve OpenGL capabilities. Actually, it is possible to retrieve these capabilities without opening a display, which I implemented now. This fixes this bug. However, the problem may still remain in other cases, such as the LWJGL info view (I will have to fix this issue there, too).
Comment 9 Miles Parker CLA 2012-04-26 14:14:11 EDT
Awesome. Will test it on AMP as soon as I get a chance.