[vtkusers] Offscreen GPU Volume Rendering Mac OS X generates black images

Aashish Chaudhary aashish.chaudhary at kitware.com
Wed Oct 1 14:10:15 EDT 2014


Hi Chris,

I got carried away by new volume rendering code but now I am back to your
issue. I will report back.

thanks


On Tue, Sep 30, 2014 at 5:04 PM, Chris Hafey <chafey at gmail.com> wrote:

> Hi Aashish and vtkusers,
>   Just checking in to see if anyone has been able to reproduce this issue
> or see anything I am doing wrong.  I would love to get this working on Mac
> OS X - thanks for any assistance!
>
> Chris
>
> On Sep 25, 2014, at 8:39 AM, Chris Hafey <chafey at gmail.com> wrote:
>
> The follow code will reproduce the problem - change the line commented out
> near the top to switch between GPU and RayCast rendering to see it working
> and not working.  Let me know if you need a CMakefile and DICOM files (I
> assume you have DICOM files and can plug this code into an existing project
> if needed )
>
> #include <string>
>
> #include <fstream>
>
> #include <vtkSmartPointer.h>
>
> #include <vtkImageSlabReslice.h>
>
> #include <vtkRenderer.h>
>
> #include <vtkRenderWindow.h>
>
> #include <vtkPiecewiseFunction.h>
>
> #include <vtkColorTransferFunction.h>
>
> #include <vtkImageData.h>
>
> #include <vtkMatrix4x4.h>
>
> #include <vtkWindowToImageFilter.h>
>
> #include <vtkDICOMImageReader.h>
>
> #include <vtkSmartVolumeMapper.h>
>
> #include <vtkJPEGWriter.h>
>
> #include <vtkCamera.h>
>
> #include <vtkVolumeProperty.h>
>
> #include <vtkUnsignedCharArray.h>
>
>
> int main(int argc, char** argv)
>
> {
>
>
>     //int renderMode =vtkSmartVolumeMapper::RayCastRenderMode; // this
> works
>
>     int renderMode =vtkSmartVolumeMapper::GPURenderMode; // this
> generates black image
>
>
>     // Read the DICOM Data
>
>     vtkSmartPointer<vtkDICOMImageReader> reader = vtkSmartPointer<
> vtkDICOMImageReader>::New();
>
>     reader->SetDirectoryName("/Users/chafey/DICOM/Volume3");
>
>     reader->Update();
>
>     vtkSmartPointer<vtkImageData> imageData(reader->GetOutput());
>
>
>     // Translate origin to center of volume
>
>     double xSpacing, ySpacing, zSpacing;
>
>     imageData->GetSpacing(xSpacing, ySpacing, zSpacing);
>
>     int* dims = imageData->GetDimensions();
>
>     double xCenter = dims[0] * xSpacing / 2.0;
>
>     double yCenter = dims[1] * ySpacing / 2.0;
>
>     double zCenter = dims[2] * zSpacing / 2.0;
>
>     imageData->SetOrigin(-xCenter, -yCenter, -zCenter);
>
>
>      // Setup the renderer for offscreen rendering
>
>     vtkSmartPointer<vtkRenderer>  renderer = vtkSmartPointer<vtkRenderer
> >::New();
>
>
>     // Setup the render window
>
>     vtkSmartPointer<vtkRenderWindow> render_window = vtkSmartPointer<
> vtkRenderWindow>::New();
>
>     render_window->SetOffScreenRendering(1);
>
>     render_window->AddRenderer(renderer);
>
>     render_window->SetSize(512, 512);
>
>
>     // Setup the volume mapper
>
>     vtkSmartPointer<vtkSmartVolumeMapper> volume_mapper = vtkSmartPointer<
> vtkSmartVolumeMapper>::New();
>
>     volume_mapper->SetRequestedRenderMode(renderMode);
>
>     volume_mapper->SetInputData(imageData);
>
>
>
>     // Setup the volume
>
>     vtkSmartPointer<vtkVolume> volume = vtkSmartPointer<vtkVolume>::New();
>
>     volume->SetMapper(volume_mapper);
>
>     renderer->AddViewProp(volume);
>
>
>     // Render the image
>
>     render_window->Render();
>
>     vtkSmartPointer<vtkWindowToImageFilter> windowToImageFilter =
> vtkSmartPointer<vtkWindowToImageFilter>::New();
>
>     windowToImageFilter->SetInput(render_window);
>
>     windowToImageFilter->Update();
>
>
>     // Create a JPEG in memory
>
>     vtkSmartPointer<vtkJPEGWriter> writer = vtkSmartPointer<vtkJPEGWriter
> >::New();
>
>     writer->WriteToMemoryOn();
>
>     writer->SetInputConnection(windowToImageFilter->GetOutputPort());
>
>     writer->Write();
>
>     vtkSmartPointer<vtkUnsignedCharArray> dataPtr = writer->GetResult();
>
>     dataPtr->Squeeze();
>
>
>     // write the jpeg to disk
>
>     ofstream myFile ("image.jpg", ios::out | ios::binary);
>
>     myFile.write ((const char*)dataPtr->GetPointer(0), dataPtr->GetSize
> ());
>
>
>     return 0;
>
> }
>
> On Thu, Sep 25, 2014 at 7:42 AM, Aashish Chaudhary <
> aashish.chaudhary at kitware.com> wrote:
>
>> On Thu, Sep 25, 2014 at 8:38 AM, Chris Hafey <chafey at gmail.com> wrote:
>>
>>> No errors on the console.  I will work on a standalone example.  Can you
>>> please clarify whether or not I should be using mesa / osmesa for GPU
>>> rendering on Mac OS X?
>>>
>>
>> In theory your regular driver should work with the offscreen rendering
>> setting. As per my understanding, that will just not open the window but
>> will create a context in which the rendering is performed.  But if the
>> image is black and if it is not if you don't set that flag then it means
>> the context was not created properly. VTK should have given you a error but
>> may be it is fooled by the system itself.
>>
>> You can try osmesa, make sure that VTK detects it, and see if that works.
>>
>> - Aashish
>>
>>>
>>> Chris
>>>
>>> On Thu, Sep 25, 2014 at 7:37 AM, Aashish Chaudhary <
>>> aashish.chaudhary at kitware.com> wrote:
>>>
>>>> This is good to know. Do you get any errors on the console? A
>>>> standalone example  will be nice.
>>>>
>>>> - Aashish
>>>>
>>>> On Thu, Sep 25, 2014 at 8:32 AM, Chris Hafey <chafey at gmail.com> wrote:
>>>>
>>>>> I am enabling off screen rendering by calling SetOffScreenRendering(1)
>>>>> on the vtkRenderWindow.  Should I be using osmesa?  I can create a
>>>>> standalone example to reproduce if needed.
>>>>>
>>>>> Chris
>>>>>
>>>>> On Thu, Sep 25, 2014 at 7:21 AM, Aashish Chaudhary <
>>>>> aashish.chaudhary at kitware.com> wrote:
>>>>>
>>>>>> No problem. How did you enable the offscreen?  Can you post your code
>>>>>> somewhere?
>>>>>>
>>>>>> Thanks,
>>>>>> Aashish
>>>>>>
>>>>>> On Thu, Sep 25, 2014 at 8:05 AM, Chris Hafey <chafey at gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Hi Aashish,
>>>>>>>   Forgive my ignorance but I don't know much about osmesa or whether
>>>>>>> I am using it.  I am using VTK as built by homebrew and don't see any
>>>>>>> options related to osmesa.  I have not installed osmesa on the machine.  No
>>>>>>> errors or warnings are issued on the console.
>>>>>>>
>>>>>>> Chris
>>>>>>>
>>>>>>> On Thu, Sep 25, 2014 at 6:46 AM, Aashish Chaudhary <
>>>>>>> aashish.chaudhary at kitware.com> wrote:
>>>>>>>
>>>>>>>> Hi Chris,
>>>>>>>>
>>>>>>>> Are you using osmesa for the offscreen rendering? Are you getting
>>>>>>>> any error on the console?
>>>>>>>>
>>>>>>>> Thanks
>>>>>>>>
>>>>>>>>
>>>>>>>> On Thu, Sep 25, 2014 at 7:32 AM, Chris Hafey <chafey at gmail.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>> VTK 6.1.0
>>>>>>>>> Mac OS X Mavericks 10.9.5
>>>>>>>>> Macbook Pro 2012 Retina with nVidia GeForce GT 650M 1024 MB
>>>>>>>>>
>>>>>>>>> My program uses VTK to do off screen volume rendering of medical
>>>>>>>>> images.  I suspect this is a bug in VTK and not my software because:
>>>>>>>>> 1) GPURenderMode works fine on Windows (both in a VM running on
>>>>>>>>> same Mac and on two other Windows 7 boxes with an nVidia GPUs)
>>>>>>>>> 2) RayCastRenderMode works fine on Mac OS X
>>>>>>>>> 3) TextureRenderMode works fine on Mac OS X
>>>>>>>>>
>>>>>>>>> I tried searching the mailing list and google and couldn't find
>>>>>>>>> anything.  The rendering code is about as basic as it can be - it simply
>>>>>>>>> sets the color, opacity, clip planes and matrix.  Any ideas on what I might
>>>>>>>>> be doing wrong or how I can debug?
>>>>>>>>>
>>>>>>>>> Thanks
>>>>>>>>>
>>>>>>>>> Chris Hafey
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> 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://public.kitware.com/mailman/listinfo/vtkusers
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> *| Aashish Chaudhary | Technical Leader         | Kitware Inc.
>>>>>>>>       *
>>>>>>>> *| http://www.kitware.com/company/team/chaudhary.html
>>>>>>>> <http://www.kitware.com/company/team/chaudhary.html>*
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>>
>>>>>>
>>>>>>
>>>>>> *| Aashish Chaudhary | Technical Leader         | Kitware Inc.
>>>>>>     *
>>>>>> *| http://www.kitware.com/company/team/chaudhary.html
>>>>>> <http://www.kitware.com/company/team/chaudhary.html>*
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>>
>>>>
>>>>
>>>> *| Aashish Chaudhary | Technical Leader         | Kitware Inc.
>>>>   *
>>>> *| http://www.kitware.com/company/team/chaudhary.html
>>>> <http://www.kitware.com/company/team/chaudhary.html>*
>>>>
>>>
>>>
>>
>>
>> --
>>
>>
>>
>> *| Aashish Chaudhary | Technical Leader         | Kitware Inc.
>> *
>> *| http://www.kitware.com/company/team/chaudhary.html
>> <http://www.kitware.com/company/team/chaudhary.html>*
>>
>
>
>


-- 



*| Aashish Chaudhary | Technical Leader         | Kitware Inc.            *
*| http://www.kitware.com/company/team/chaudhary.html
<http://www.kitware.com/company/team/chaudhary.html>*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20141001/4eb966af/attachment.html>


More information about the vtkusers mailing list