Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 为什么删除vtkpolydatamapper会导致VTKClearOpengleErrors中出现无限循环?_Multithreading_Opengl_C++ Cli_Vtk - Fatal编程技术网

Multithreading 为什么删除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

我们有一个基于WinForms c++/cli CAD的应用程序,它使用VTK 6.1。该应用程序的一个功能是播放一个脚本,该脚本以交互方式回放用户以前执行的操作。我们在脚本播放时弹出一个模式进度表单,并在后台线程中执行脚本的非ui工作。后台线程的部分工作是创建和删除VTKPolyDataMapper。当后台线程运行并且进度表单显示时,我们需要通过调用vtkWin32RenderWindowInteractor::Render更新主线程中的显示

我们有一个计时器设置,所以在UserControl::OnPaint事件处理程序中,渲染最多每隔几百毫秒调用一次。这允许在脚本播放时更新视图,并向用户提供反馈

这曾经在VTK 5中起作用。但是现在,在后台线程中删除vtkPolyDataMapper时会发生无限循环。无限循环位于VTKClearOpengleErrors中:

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修复它有什么建议吗?