Multithreading 为什么删除vtkpolydatamapper会导致VTKClearOpengleErrors中出现无限循环?
我们有一个基于WinForms c++/cli CAD的应用程序,它使用VTK 6.1。该应用程序的一个功能是播放一个脚本,该脚本以交互方式回放用户以前执行的操作。我们在脚本播放时弹出一个模式进度表单,并在后台线程中执行脚本的非ui工作。后台线程的部分工作是创建和删除VTKPolyDataMapper。当后台线程运行并且进度表单显示时,我们需要通过调用vtkWin32RenderWindowInteractor::Render更新主线程中的显示 我们有一个计时器设置,所以在UserControl::OnPaint事件处理程序中,渲染最多每隔几百毫秒调用一次。这允许在脚本播放时更新视图,并向用户提供反馈 这曾经在VTK 5中起作用。但是现在,在后台线程中删除vtkPolyDataMapper时会发生无限循环。无限循环位于VTKClearOpengleErrors中:Multithreading 为什么删除vtkpolydatamapper会导致VTKClearOpengleErrors中出现无限循环?,multithreading,opengl,c++-cli,vtk,Multithreading,Opengl,C++ Cli,Vtk,我们有一个基于WinForms c++/cli CAD的应用程序,它使用VTK 6.1。该应用程序的一个功能是播放一个脚本,该脚本以交互方式回放用户以前执行的操作。我们在脚本播放时弹出一个模式进度表单,并在后台线程中执行脚本的非ui工作。后台线程的部分工作是创建和删除VTKPolyDataMapper。当后台线程运行并且进度表单显示时,我们需要通过调用vtkWin32RenderWindowInteractor::Render更新主线程中的显示 我们有一个计时器设置,所以在UserControl
void vtkClearOpenGLErrors()
{
while (glGetError()!=GL_NO_ERROR){;}
}
vtkpolydatamapper内有一个vtkOpenGLDisplayListPainter。当它被vtkGarbageCollectorImpl::CollectInternal删除时,我们会陷入vtkClearOpenGLErrors
有没有人有过VTK和线程方面的经验?你知道这件事吗?这只是VTK 6.1中的一个明显问题。后台线程在vtkPolyDataMapper上执行删除操作时,让主UI线程在VTKwin32RenderWindowActor上调用Render是否非法?这不是时间问题。我认为这可能是一个OpenGL上下文问题,但不确定如何修复它。如果我们在后台线程运行时避免在显示器上调用Render,那么问题就会消失,但我们希望在脚本播放时向用户提供反馈。我们通过使用重新编译VTK修复了问题 VTK_报告_OPENGL_错误
关闭。我不知道VTK,但您只能对具有当前OpenGL上下文的线程进行OpenGL调用。这包括glGetError。调用该线程时,该线程显然没有当前上下文。您对如何@Reto Koradi修复它有什么建议吗?