Hi everyone,
Not sure if this is the correct venue, so please forgive my inexperience.
I have an application that uses VTK with QT, on Ubuntu 20.04 LTS. It compiles just fine and most of the application works. However, when I try to create a vtkRenderWindow, it crashes with a segfault. Specifically, whenever my application tries to access or interact with the vtkRenderWindow object’s Interactor variable (declared in vtkRenderWindow.h:754).
vtkRenderWindowInteractor* Interactor;
Thus far, I’ve had it crashing with (1) vtkRenderWindow::GetInteractor()
, (2) vtkRenderWindow::SetInteractor()
, and (3) vtkRenderWindow::MakeRenderWindowInteractor()
.
(1) To be more precise, the program crashes the moment it attempts to call vtkRenderWindow::GetInteractor()
. The code in question:
vtkRenderer* m_Ren1;
vtkRenderWindow* renwin;
QVTKOpenGLStereoWidget* qVTK1;
m_Ren1 = vtkRenderer::New();
renwin = vtkRenderWindow::New();
renwin->AddRenderer(m_Ren1);
ui->qVTK1->setRenderWindow(renwin);
ui->qVTK1->renderWindow()->GetInteractor();
(2) When calling vtkRenderWindow::SetInteractor()
, it crashes at vtkRenderWindow.cxx:155
, at the line
if (this->Interactor != rwi)
. I show the code I use below:
vtkRenderer* m_Ren1;
vtkRenderWindow* renwin;
QVTKOpenGLStereoWidget* qVTK1;
m_Ren1 = vtkRenderer::New();
renwin = vtkRenderWindow::New();
renwin->AddRenderer(m_Ren1);
ui->qVTK1->setRenderWindow(renwin);
vtkRenderWindowInteractor* t1 = vtkRenderWindowInteractor::New();
ui->qVTK1->renderWindow()->SetInteractor(t1);
(3) When calling vtkRenderWindow::MakeRenderWindowInteractor()
, it crashes at vtkObjectFactory.cxx:438
, specifically when it calls the strcmp
function.
if (this->OverrideArray[i].EnabledFlag &&
strcmp(this->OverrideClassNames[i], vtkclassname) == 0)
Again, I show the code I use to test this below:
vtkRenderer* m_Ren1;
vtkRenderWindow* renwin;
QVTKOpenGLStereoWidget* qVTK1;
m_Ren1 = vtkRenderer::New();
renwin = vtkRenderWindow::New();
renwin->AddRenderer(m_Ren1);
ui->qVTK1->setRenderWindow(renwin);
ui->qVTK1->renderWindow()->MakeRenderWindowInteractor();
Curiously, the program does not crash if I create a new RenderWindow as below, despite both test
and qVTK1->renderWindow()
being of type vtkXOpenGLRenderWindow
. It does crash regardless of if I set qVTK1->renderWindow()
's interactor to t1
or t2
:
vtkRenderWindow* test = vtkRenderWindow::New();
vtkRenderWindowInteractor* t2 = test->GetInteractor();
vtkRenderWindowInteractor* t1 = vtkRenderWindowInteractor::New();
test->SetInteractor(t1);
ui->qVTK1->renderWindow()->SetInteractor(t1);
ui->qVTK1->renderWindow()->SetInteractor(t2);
Again, please forgive my inexperience. If anyone has any idea why this occurs or how to deal with it, I would very much appreciate it.
Thanks!