[vtkusers] QVTKWidget2 memory leak?

Jonathan Morra jonmorra at gmail.com
Fri Feb 24 17:25:13 EST 2012


OK, here is a small example that shows the problem.  I'm monitoring the
memory using task manager.  When the render line is commented out the
memory stays constant as you mouse over the image.  However, if that line
is uncommented then then memory climbs rapidly.  The program crashes when
you exit, but that doesn't concern me right now, I'm focused on the memory
leak.

Thanks

#include <QtGui/QApplication>

#include <QMainWindow>

 #include <QVTKWidget2.h>

#include <vtkImageViewer2.h>

#include <vtkImageData.h>

#include <vtkPointData.h>

#include <vtkGenericOpenGLRenderWindow.h>

 class MyQVTKWidget2 : public QVTKWidget2 {

public:

    MyQVTKWidget2 (vtkImageViewer2 *imageViewer, QWidget *parent = 0)
: QVTKWidget2(parent) {

        this->imageViewer = imageViewer;

    }

     virtual ~MyQVTKWidget2() {

        imageViewer->Delete();

    }

     void mouseMoveEvent(QMouseEvent *) {

        // Comment out this line to see the memory stay constant

        imageViewer->Render();

    }

 private:

    vtkImageViewer2 *imageViewer;

};

 int main(int argc, char *argv[]) {

    QApplication a(argc, argv);

     vtkImageData *imageData = vtkImageData::New();

    imageData->SetExtent(0, 100, 0, 100, 0, 100);

    imageData->SetOrigin(0, 0, 0);

    imageData->SetSpacing(1, 1, 1);

    imageData->AllocateScalars();

    imageData->GetPointData()->GetScalars()->FillComponent(0, 0);

     vtkImageViewer2 *imageViewer = vtkImageViewer2::New();

    imageViewer->SetInput(imageData);

     MyQVTKWidget2 widget(imageViewer);

    imageViewer->SetRenderWindow(widget.GetRenderWindow());

     QMainWindow mainWindow;

    mainWindow.setGeometry(200, 200, 300, 300);

    mainWindow.setCentralWidget(&widget);

    mainWindow.show();

     imageData->Delete();

    return a.exec();

}


On Fri, Feb 24, 2012 at 1:36 PM, Jonathan Morra <jonmorra at gmail.com> wrote:

> I will spend some time and try and put together a small self contained
> test.
>
>
> On Fri, Feb 24, 2012 at 1:29 PM, Clinton Stimpson <clinton at elemtech.com>wrote:
>
>> On Friday, February 24, 2012 02:19:59 pm Jonathan Morra wrote:
>> > I have recently converted my app from using QVTKWidget to QVTKWidget2 so
>> > that I could paint on the QVTKWidget2 (which I was able to successfully
>> > do).  After this conversion my app started to leak memory terribly.  I
>> > followed the memory leak around, and found the culprit is the following
>> > line
>> >
>> > glTexImage2D(GL_TEXTURE_2D, 0, internalFormat,
>> >
>> >                    xsize, ysize, 0, format,
>> >
>> >                    GL_UNSIGNED_BYTE, static_cast<const GLvoid *>(data));
>> >
>> >
>> > Which is in the following function
>> >
>> >
>> > void vtkOpenGLImageSliceMapper::RenderTexturedPolygon(
>> >
>> >   vtkRenderer *ren, vtkImageProperty *property,
>> >
>> >   vtkImageData *input, int extent[6], bool recursive)
>> >
>> >
>> > I am using a build that I got from git on January 10th.  I have a 64
>> > bit Windows 7 machine, but have built VTK with Microsoft Visual
>> > Studios 2008 32 bit.
>> >
>> >
>> > This bug is manifested everytime I call render on a QVTKWidget2 that I
>> > have placed a vtkImageViewer2 in.  This is a very critical bug for us
>> > as now our program runs out of memory very quickly because there are
>> > situations where render is called on every mouse move which means the
>> > program will die extremely fast.  Any help would be appreciated.
>> >
>>
>> Ok, I see the cause of the problem.
>>
>> QVTKWidget2::Start() calls OpenGLInit(), which resets the context creation
>> time and the vtkOpenGLImageSliceMapper reloads them thinking its a new
>> context.
>>
>> It would helpful if you can provide a minimal test case to demonstrate
>> this.
>>
>> --
>> Clinton Stimpson
>> Elemental Technologies, Inc
>> Computational Simulation Software, LLC
>> www.csimsoft.com
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20120224/6d6cfc51/attachment.htm>


More information about the vtkusers mailing list