I encountered an error when using QT and VTK

ERROR: In D:\VTK-8.2.0\Rendering\OpenGL2\vtkTextureObject.cxx, line 1991
vtkTextureObject (000001F475680680): failed at glCopyTexImage2D 33191 1 OpenGL errors detected
  0 : (1282) Invalid operation

Please share steps to reproduce

m_vtkWidget = new QVTKOpenGLNativeWidget(ui->renderWidget);

vtkSmartPointer<vtkRenderWindowInteractor>iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
iren->SetStillUpdateRate(0.016);

vtkSmartPointer<vtkGenericOpenGLRenderWindow> renderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
//renderWindow->SetWindowName("RenderWindow");
renderWindow->SetDesiredUpdateRate(0.016);
renderWindow->SetInteractor(iren);

m_vtkWidget->SetRenderWindow(renderWindow);

QString DirName = QFileDialog::getExistingDirectory(this,tr("select file"),"D:",0);

vtkSmartPointer<vtkDICOMImageReader>dicomImagereader = vtkSmartPointer<vtkDICOMImageReader>::New();
dicomImagereader->SetDirectoryName(DirName.toStdString().c_str());
//dicomImagereader->SetDirectoryName("pig");
dicomImagereader->Update();

vtkSmartPointer<vtkGPUVolumeRayCastMapper>volumeMapper = vtkSmartPointer<vtkGPUVolumeRayCastMapper>::New();
volumeMapper->SetBlendMode(vtkVolumeMapper::COMPOSITE_BLEND);
volumeMapper->SetInputConnection(dicomImagereader->GetOutputPort());
volumeMapper->SetSampleDistance(volumeMapper->GetSampleDistance() * 0.9); //光线步长
volumeMapper->SetAutoAdjustSampleDistances(0);
//volumeMapper->SetCropping(1);//开启Cropping功能
//volumeMapper->SetCroppingRegionPlanes(origin[0] + dims[0] * spacing[0] / 3, origin[0] + dims[0] * spacing[0] / 3 * 2, origin[1] + dims[1] * spacing[1] / 3, origin[1] + dims[1] * spacing[1] / 3 * 2, origin[2] + dims[2] * spacing[2] / 3, origin[2] + dims[2] * spacing[2] / 3 * 2);
//volumeMapper->SetCroppingRegionFlagsToCross();

volume = vtkVolume::New();
volume->SetMapper(volumeMapper);
volume->SetProperty(VpParser("CTAAA2.vp"));

vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
renderer->AddVolume(volume);
renderer->SetBackground(0.5,0.5,0.5);

m_vtkWidget->GetRenderWindow()->AddRenderer(renderer);
m_vtkWidget->show();

I changed from ->render to show(), error disappeared, but window does nothing

Here is an example usage:
https://kitware.github.io/vtk-examples/site/Cxx/Qt/EventQtSlotConnect/

1 Like

m_vtkWidget->GetRenderWindow()->Render(); * this code will still report the error

  • I think his situation is the same as mine