[vtkusers] Offscreen Rendering

Michael Hoffer info at michaelhoffer.de
Tue May 29 05:46:10 EDT 2012


While the implementation works great on OS X I am getting this error on
Linux:

java: xcb_io.c:140: dequeue_pending_request: Assertion `req ==
dpy->xcb->pending_requests' failed.

It seems to be related to the setVisible(boolean) method. If I don't change
visibility everything seems to work. Any ideas?

2012/5/28 Michael Hoffer <info at michaelhoffer.de>

> Hi Sebastien,
>
> thanks for your answer. I have checked vtkPanel. But it seems to be a
> heavyweight AWT component. Java 7 is currently no option for me and I need
> real transparency etc. There is no easy way to access the pixel data from
> Java and it seems like vtkPanel only works if it is atached to a JFrame. Is
> that correct?
>
> I chose to create an alternative implementation. I uploaded it to GitHub:
> http://miho.github.com/JVTK/
>
> The project contains a pure lightweight Swing panel that uses a vtkPanel
> internally. The panel converts the native pixel data to an AWT image that
> is used to paint the Swing panel. I implemented basic fullscreen support.
> In fullscreen mode the internal vtkPanel is used. This allows full render
> performance.
>
> The project contains a sample application that demonstrates its features.
>
> It would be nice if you could check my implementation. Maybe there is a
> better way to convert pixeldata...
>
> Regards,
> Michael
>
> 2012/5/28 Sebastien Jourdain <sebastien.jourdain at kitware.com>
>
>> I think you have a better solution on your end since you are using Java.
>> The idea is to use a vtkPanel or vtkCanvas directly without inserting
>> it in a graphical component. Somehow, it will be offscreen and you
>> will keep the GPU acceleration.
>>
>> Let me know how it goes.
>>
>> Seb
>>
>> On Sun, May 27, 2012 at 3:48 PM, Michael Hoffer <info at michaelhoffer.de>
>> wrote:
>> > Hello,
>> >
>> > i am totally new to VTK. First of all, I was really surprised how easy
>> it is
>> > to setup VTK with Java. I compiled it on Linux and OS X. Well done!
>> >
>> > Now my question: as I am interested in offscreen rendering I tried the
>> > example below. It worked but unfortunately an empty window was shown. I
>> > didn't expect a window. Do I really have to completely switch hardware
>> > acceleration off by using VTK_OPENGL_HAS_OSMESA? Couldn't I just hide
>> the
>> > window? If it is possible, how do I do that?
>> >
>> > My intention is to write a pure Swing component that uses offscreen
>> > rendering. I know that this will slow down everything. But my views
>> will be
>> > relatively small in size (e.g. 300x200 pixel). Thus, the performance
>> should
>> > be ok as long as getting the native memory isn't too time consuming. I
>> have
>> > seen that there are some approaches that also tried that. But all code
>> > samples I have seen looped over the vtk array to copy it to an
>> image. This
>> > is definitely too slow. But using WritableRaster, DataBuffer etc. should
>> > help.
>> >
>> > Thanks for your help!
>> >
>> > Regards,
>> > Michael
>> >
>> > //
>> > // code originally
>> > from
>> http://www.vtk.org/Wiki/VTK/Examples/Cxx/Utilities/OffScreenRendering
>> > //
>> > import vtk.*;
>> >
>> > /**
>> >  *
>> >  * @author Michael Hoffer info at michaelhoffer.de
>> >  */
>> > public class VTKOffscreenSample {
>> >
>> >     public static void main(String[] args) {
>> >
>> >         loadLibraries();
>> >
>> >         // Setup offscreen rendering
>> >         vtkGraphicsFactory graphics_factory = new vtkGraphicsFactory();
>> >         graphics_factory.SetOffScreenOnlyMode(1);
>> >         graphics_factory.SetUseMesaClasses(1);
>> >
>> >         vtkImagingFactory imaging_factory = new vtkImagingFactory();
>> >         imaging_factory.SetUseMesaClasses(1);
>> >
>> >         // Create a sphere
>> >         vtkSphereSource sphereSource = new vtkSphereSource();
>> >
>> >         // Create a mapper and actor
>> >         vtkPolyDataMapper mapper = new vtkPolyDataMapper();
>> >         mapper.SetInputConnection(sphereSource.GetOutputPort());
>> >
>> >         vtkActor actor = new vtkActor();
>> >         actor.SetMapper(mapper);
>> >
>> >         // A renderer and render window
>> >         vtkRenderer renderer = new vtkRenderer();
>> >         vtkRenderWindow renderWindow = new vtkRenderWindow();
>> >         renderWindow.SetOffScreenRendering(1);
>> >         renderWindow.AddRenderer(renderer);
>> >
>> >         // Add the actors to the scene
>> >         renderer.AddActor(actor);
>> >         renderer.SetBackground(1, 1, 1); // Background color white
>> >
>> >         renderWindow.Render();
>> >
>> >         vtkWindowToImageFilter windowToImageFilter = new
>> > vtkWindowToImageFilter();
>> >         windowToImageFilter.SetInput(renderWindow);
>> >         windowToImageFilter.Update();
>> >
>> >         vtkPNGWriter writer = new vtkPNGWriter();
>> >         writer.SetFileName("screenshot.png");
>> >         writer.SetInputConnection(windowToImageFilter.GetOutputPort());
>> >         writer.Write();
>> >     }
>> >
>> >     private static void loadLibraries() {
>> >
>> >         if (!vtkNativeLibrary.LoadAllNativeLibraries()) {
>> >             for (vtkNativeLibrary lib : vtkNativeLibrary.values()) {
>> >                 if (!lib.IsLoaded()) {
>> >                     System.out.println(lib.GetLibraryName() + " not
>> > loaded");
>> >                 }
>> >             }
>> >
>> >             System.out.println("Make sure the search path is correct:
>> ");
>> >             System.out.println(System.getProperty("java.library.path"));
>> >         }
>> >
>> >         vtkNativeLibrary.DisableOutputWindow(null);
>> >     }
>> > }
>> >
>> >
>> > _______________________________________________
>> > 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
>> >
>>
>
>
>
> --
> Dipl.-Math. Michael Hoffer
>
> Goethe-Zentrum für Wissenschaftliches Rechnen (G-CSC)
> Goethe-Universität
> Kettenhofweg 139
> 60325 Frankfurt am Main
> Tel.: +49 69 798 25254
> michael.hoffer at gcsc.uni-frankfurt.de
>



-- 
Dipl.-Math. Michael Hoffer

Goethe-Zentrum für Wissenschaftliches Rechnen (G-CSC)
Goethe-Universität
Kettenhofweg 139
60325 Frankfurt am Main
Tel.: +49 69 798 25254
michael.hoffer at gcsc.uni-frankfurt.de
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20120529/53d7b002/attachment.htm>


More information about the vtkusers mailing list