[vtkusers] VTK6 + Java7 on Mac: offscreen rendering?
Marco Sambin
m.sambin at gmail.com
Wed Sep 11 10:34:44 EDT 2013
Hi Seb,
thanks for your feedback.
I've just tested on Mac (Mac OS X 10.8.4, Java 7u25, Macbook Pro i5), and
here is what happens:
- I am able to correctly display the 3D scene with the 3
vtkImagePlaneWidgets (for the first time on VTK + Mac OS X + Java 7, and
that's good! :-)).
- I am able to interact with the 3D scene (i.e., move/rotate the camera)
when dragging my mouse on the 3D scene OUTSIDE the vtkImagePlaneWidgets.
- If I press or drag with the mouse INSIDE the vtkImagePlaneWidgets, then
the JVM crashes. Here is a relevant (I hope) fragment of the JVM crash dump:
=================
[...]
Stack: [0x000000013d09c000,0x000000013d19c000], sp=0x000000013d197fa0,
free space=1007k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native
code)
C [libvtkRenderingOpenGL-6.1.1.dylib+0x857b7]
_ZN11vtkUpload3DIhE6UploadEPvPhPjiPxiPi+0xd5
C [libvtkRenderingOpenGL-6.1.1.dylib+0x81834]
_ZN20vtkPixelBufferObject8Upload3DEiPvPjiPxiPi+0x9a8
C [libvtkRenderingOpenGL-6.1.1.dylib+0x7a085]
_ZN16vtkOpenGLTexture4LoadEP11vtkRenderer+0x1a7d
C [libvtkRenderingFreeType-6.1.1.dylib+0x1b8c6]
_ZN12vtkTextActor13RenderOverlayEP11vtkViewport+0x5a
C [libvtkRenderingCore-6.1.1.dylib+0x7bd38]
_ZN11vtkRenderer14UpdateGeometryEv+0x114
C [libvtkRenderingOpenGL-6.1.1.dylib+0x6a3aa]
_ZN17vtkOpenGLRenderer12DeviceRenderEv+0xea
C [libvtkRenderingCore-6.1.1.dylib+0x7b5c1]
_ZN11vtkRenderer6RenderEv+0x26f
C [libvtkRenderingCore-6.1.1.dylib+0x7aacc]
_ZN21vtkRendererCollection6RenderEv+0x5a
C [libvtkRenderingCore-6.1.1.dylib+0x824c3]
_ZN15vtkRenderWindow14DoStereoRenderEv+0x83
C [libvtkRenderingCore-6.1.1.dylib+0x8241b]
_ZN15vtkRenderWindow10DoFDRenderEv+0x38d
C [libvtkRenderingCore-6.1.1.dylib+0x8206a]
_ZN15vtkRenderWindow10DoAARenderEv+0x43a
C [libvtkRenderingCore-6.1.1.dylib+0x81905]
_ZN15vtkRenderWindow6RenderEv+0x149
C [libvtkRenderingCore-6.1.1.dylib+0x85673]
_ZN25vtkRenderWindowInteractor6RenderEv+0x27
C [libvtkCommonCore-6.1.1.dylib+0x59561]
_ZN18vtkCallbackCommand7ExecuteEP9vtkObjectmPv+0x21
C [libvtkCommonCore-6.1.1.dylib+0xb60bc]
_ZN16vtkSubjectHelper11InvokeEventEmPvP9vtkObject+0x39a
j vtk.vtkRenderWindowInteractor.LeftButtonPressEvent_109()V+0
j vtk.vtkRenderWindowInteractor.LeftButtonPressEvent()V+1
j
vtk.rendering.vtkInteractorForwarder.mousePressed(Ljava/awt/event/MouseEvent;)V+227
j java.awt.Component.processMouseEvent(Ljava/awt/event/MouseEvent;)V+54
j java.awt.Component.processEvent(Ljava/awt/AWTEvent;)V+81
j java.awt.Component.dispatchEventImpl(Ljava/awt/AWTEvent;)V+581
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j vtk.vtkRenderWindowInteractor.LeftButtonPressEvent_109()V+0
j vtk.vtkRenderWindowInteractor.LeftButtonPressEvent()V+1
j
vtk.rendering.vtkInteractorForwarder.mousePressed(Ljava/awt/event/MouseEvent;)V+227
j java.awt.Component.processMouseEvent(Ljava/awt/event/MouseEvent;)V+54
j java.awt.Component.processEvent(Ljava/awt/AWTEvent;)V+81
j java.awt.Component.dispatchEventImpl(Ljava/awt/AWTEvent;)V+581
J
java.awt.EventQueue.access$200(Ljava/awt/EventQueue;Ljava/awt/AWTEvent;Ljava/lang/Object;)V
J java.awt.EventQueue$3.run()Ljava/lang/Object;
v ~StubRoutines::call_stub
J
java.security.AccessController.doPrivileged(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;
J
java.security.ProtectionDomain$1.doIntersectionPrivilege(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;)Ljava/lang/Object;
j
java.security.ProtectionDomain$1.doIntersectionPrivilege(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;+6
j java.awt.EventQueue$4.run()Ljava/lang/Void;+11
j java.awt.EventQueue$4.run()Ljava/lang/Object;+1
v ~StubRoutines::call_stub
J
java.security.AccessController.doPrivileged(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object;
J
java.security.ProtectionDomain$1.doIntersectionPrivilege(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;Ljava/security/AccessControlContext;)Ljava/lang/Object;
j java.awt.EventQueue.dispatchEvent(Ljava/awt/AWTEvent;)V+73
j java.awt.EventDispatchThread.pumpOneEventForFilters(I)V+245
j
java.awt.EventDispatchThread.pumpEventsForFilter(ILjava/awt/Conditional;Ljava/awt/EventFilter;)V+35
j
java.awt.EventDispatchThread.pumpEventsForHierarchy(ILjava/awt/Conditional;Ljava/awt/Component;)V+11
j java.awt.EventDispatchThread.pumpEvents(ILjava/awt/Conditional;)V+4
j java.awt.EventDispatchThread.pumpEvents(Ljava/awt/Conditional;)V+3
j java.awt.EventDispatchThread.run()V+9
v ~StubRoutines::call_stub
[...]
=================
Please let me know if this tells you something useful, and if I can be of
further help.
I will now make some tests on Linux as well, and will report back to you.
Thanks and best regards,
Marco Sambin
On Wed, Sep 11, 2013 at 6:10 AM, Sebastien Jourdain <
sebastien.jourdain at kitware.com> wrote:
> Hi Marco,
>
> You may have found an issue that I missed on Windows. For some reason the
> event forwarding to the interactor was freezing the application. Therefore,
> I took the same route as the old vtkPanel by using a direct camera
> manipulation (as an option for windows app).
> Unfortunately 3d widget do expect interactor events. Therefore, to
> properly work, we will have to figure out how to properly solve the issue
> that you discovered.
>
> Do you mind testing that on Mac and letting me know if the issue exist?
>
> Moreover, I should make a proper announcement to the mailing list but I've
> merged into master a couple days ago a branch that let CMake do a proper
> packaging of VTK for Java if the proper options are provided.
>
> Seb
>
>
>
>
> On Tue, Sep 10, 2013 at 1:06 PM, Marco Sambin <m.sambin at gmail.com> wrote:
>
>> Hi Seb,
>>
>> thanks for your feedback.
>>
>> The example was indeed useful: I am now using vtkJoglCanvasComponent (got
>> current VTK 6.1 from GIT) as my rendering component, and now I am rendering
>> my 3D view through JOGL, after loading a bunch of JARs and native libs.
>>
>> Rendering seems to work quite fine on Windows (I am testing on this OS
>> first of all, then I will move to Mac later), and I can see my 3
>> vtkImagePlaneWidgets in the 3D view. Also, if I programmatically
>> change vtkImagePlaneWidgets' plane positions or orientations, and then call
>> Render() on my vtkJoglCanvasComponent, the 3D view is updating fine.
>>
>> On the other side, if I try to interact with the widgets in the 3D view
>> through the mouse, my Java application immediately and completely freezes,
>> and the CPU goes up to 25%.
>>
>> Can you guess what is causing this behavior? Is interaction with widgets
>> supposed to work when using JOGL?
>>
>> I have not tested this, but I have the impression that the application
>> freezes when the widget's native code calls "this->Interactor->Render();".
>> Will this call be somehow "intercepted" by JOGL, and become equivalent to
>> calling Render() on the vtkJoglCanvasComponent (which, on the other side,
>> seems to work fine)?
>>
>> Thanks again for your feedback: this path seems really promising, and may
>> open a whole new world with using VTK from Java.
>>
>> Regards,
>>
>> Marco
>>
>>
>>
>> On Mon, Sep 9, 2013 at 5:33 PM, Sebastien Jourdain <
>> sebastien.jourdain at kitware.com> wrote:
>>
>>> Hi Marco,
>>>
>>> you will have to use another class. But you will have the same
>>> integration capability.
>>>
>>> Look
>>> at src/VTK/Wrapping/Java/vtk/sample/rendering/JoglConeRendering.java for
>>> more details.
>>>
>>> Seb
>>>
>>>
>>> On Mon, Sep 9, 2013 at 10:37 AM, Marco Sambin <m.sambin at gmail.com>wrote:
>>>
>>>> Hi Seb,
>>>>
>>>> this is great news, and I will give it a try!
>>>> One question: will I be able to keep using vtkCanvas as a Java panel
>>>> class, or rather shall I move to something different?
>>>> Thanks again for your feedback.
>>>>
>>>> Best regards,
>>>>
>>>> Marco Sambin
>>>>
>>>>
>>>>
>>>> On Mon, Sep 9, 2013 at 2:45 PM, Sebastien Jourdain <
>>>> sebastien.jourdain at kitware.com> wrote:
>>>>
>>>>> Hi Marco,
>>>>>
>>>>> you won't be able to rely on offscreen rendering on Mac to properly
>>>>> handle the issue you are trying to overcome.
>>>>>
>>>>> Although, a couple of weeks ago, I've pushed a new set of classes that
>>>>> works on Mac OS X and Java7 (and on the other of the platforms).
>>>>> Those classes rely on JOGL to do the rendering. So if adding JOGL as a
>>>>> dependency is not an issue, you can directly use those.
>>>>>
>>>>> For that you will need to get VTK/master from git and when you build
>>>>> VTK, you will have to turn ON that component. Moreover if you already
>>>>> download JOGL/GLUGEN using maven, CMake should find the appropriate jars
>>>>> for you.
>>>>> Otherwise you will need to specify their paths.
>>>>>
>>>>> Here is the dependency for Maven.
>>>>>
>>>>> + <dependency>
>>>>> + <groupId>org.jogamp.jogl</groupId>
>>>>> + <artifactId>jogl-all-main</artifactId>
>>>>> + <version>2.0.2</version>
>>>>> + </dependency>
>>>>> + <dependency>
>>>>> + <groupId>org.jogamp.gluegen</groupId>
>>>>> + <artifactId>gluegen-rt-main</artifactId>
>>>>> + <version>2.0.2</version>
>>>>> + </dependency>
>>>>>
>>>>> Hope that could help you,
>>>>>
>>>>> Seb
>>>>>
>>>>>
>>>>>
>>>>> On Mon, Sep 9, 2013 at 7:22 AM, Marco Sambin <m.sambin at gmail.com>wrote:
>>>>>
>>>>>> Dear VTKers,
>>>>>>
>>>>>> I am developing a VTK 6-based Java application, and I am making some
>>>>>> efforts to make it compatible with Mac OS X as well.
>>>>>>
>>>>>> I know that the jawt embedding currently supported by Java 7 on Mac
>>>>>> (which is CALayer-based) does not work with VTK 6 (nor with previous VTK
>>>>>> versions), but there are several portions of my application which do not
>>>>>> use direct drawing by VTK classes to Java panels (i.e., do not use jawt),
>>>>>> hence will work fine on Mac + Java 7 as well.
>>>>>>
>>>>>> Now, for the portions of my application where VTK classes need to
>>>>>> actually "draw", my question is: will offscreen rendering work on Mac? The
>>>>>> basic idea would be to grab the output of the offscreen rendering, convert
>>>>>> it to a Java-compatible image, and draw it to a Java panel. I know this
>>>>>> will be a significant performance penalty, but my requirements in this
>>>>>> moment are not so strict or demanding under this point of view.
>>>>>>
>>>>>> In particular, I have a vtkCanvas-derived panel, where I display some
>>>>>> planes in 3D (actually, they are vtkImagePlaneWidgets, but I am mainly
>>>>>> interested in the "display" functionality, not in the interactivity of the
>>>>>> widget with the user). Will it be sufficient to call
>>>>>> myVtkCanvas.GetRenderWindow().SetOffScreenRendering(1) to obtain offscreen
>>>>>> rendering on my Mac? Or it is more complicated than that?
>>>>>>
>>>>>> Currently, calling just
>>>>>> myVtkCanvas.GetRenderWindow().SetOffScreenRendering(1), I am obtaining a
>>>>>> crash in the OpenGL library when running my application on the Mac.
>>>>>>
>>>>>> Thanks in advance for your feedback.
>>>>>>
>>>>>> Best regards,
>>>>>>
>>>>>> Marco
>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Powered by www.kitware.com
>>>>>>
>>>>>> Visit other Kitware open-source projects at
>>>>>> http://www.kitware.com/opensource/opensource.html
>>>>>>
>>>>>> Please keep messages on-topic and check the VTK FAQ at:
>>>>>> http://www.vtk.org/Wiki/VTK_FAQ
>>>>>>
>>>>>> Follow this link to subscribe/unsubscribe:
>>>>>> http://www.vtk.org/mailman/listinfo/vtkusers
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20130911/c8ec5a95/attachment.htm>
More information about the vtkusers
mailing list