RectangularClusterTracker openGL error with jAER1.5
Brought to you by:
llongi,
tobidelbruck
Since jAER 1.5 release the RectangularClusterTracker can not be used, due to a openGL related bug. The error message is attached below.
The relevant lines of code in the filter are:
GLU glu = new GLU(); GLUquadric clusterRadiusQuad = glu.gluNewQuadric();
I think this should be easy as it should be just related to the JOGL2 update.
However I dont know how to fix it.
When the filter is selected the following error appears:
May 19, 2014 10:10:38 AM net.sf.jaer.eventprocessing.FilterChain contructPreferredFilters WARNING: couldn't construct filter net.sf.jaer.eventprocessing.tracking.RectangularClusterTracker for chip ch.unizh.ini.jaer.chip.retina.DVS128 : java.lang.reflect.InvocationTargetException will remove this filter from Preferences javax.media.opengl.GLException: No OpenGL context current on this thread at javax.media.opengl.glu.GLU.getCurrentGL(GLU.java:177) at javax.media.opengl.glu.GLU.gluNewQuadric(GLU.java:1303) at javax.media.opengl.glu.GLU.gluNewQuadric(GLU.java:1291) at net.sf.jaer.eventprocessing.tracking.RectangularClusterTracker.<init>(RectangularClusterTracker.java:179) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at net.sf.jaer.eventprocessing.FilterChain.contructPreferredFilters(FilterChain.java:377) at net.sf.jaer.eventprocessing.FilterFrame.renewContents(FilterFrame.java:516) at net.sf.jaer.eventprocessing.FilterChain.customize(FilterChain.java:420) at net.sf.jaer.eventprocessing.FilterFrame.jbuttonSelectFiltActionPerformed(FilterFrame.java:681) at net.sf.jaer.eventprocessing.FilterFrame.access$600(FilterFrame.java:42) at net.sf.jaer.eventprocessing.FilterFrame$6.actionPerformed(FilterFrame.java:249) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:289) at java.awt.Component.processMouseEvent(Component.java:6505) at javax.swing.JComponent.processMouseEvent(JComponent.java:3320) at java.awt.Component.processEvent(Component.java:6270) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4861) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Window.dispatchEventImpl(Window.java:2719) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735) at java.awt.EventQueue.access$200(EventQueue.java:103) at java.awt.EventQueue$3.run(EventQueue.java:694) at java.awt.EventQueue$3.run(EventQueue.java:692) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:708) at java.awt.EventQueue$4.run(EventQueue.java:706) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:705) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Fixed in revision 4680.
JOGL 2.0 requires OpenGL resources to be created inside valid OpenGL contexts, which means in our case mostly inside the draw() method. The easy and working fix here is to just set the instance variables to null, and then perform a quick if (glu == null) check and do the initialization inside the actual draw() method, right at the start.