| Summary: | Hangs on render graphics under Mac OS X | ||
|---|---|---|---|
| Product: | z_Archived | Reporter: | Miles Parker <milesparker> |
| Component: | Gef3d | Assignee: | 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
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. 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. 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. ;) 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
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
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 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. 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). Awesome. Will test it on AMP as soon as I get a chance. |