着色器 VAO 和EGL_BAD_DISPLAY中的 VTK 错误设置'vertexMC'

VTK Error setting 'vertexMC' in shader VAO and EGL_BAD_DISPLAY

本文关键字:VTK 错误 设置 中的 vertexMC DISPLAY VAO BAD EGL      更新时间:2023-10-16

我正在尝试为android编写我自己的InteractorStyle。到目前为止,我成功地改变了我想要改变的内容并创建了它。现在我想添加一个函数,可以处理作为参数给定的旋转/平移。功能如下:

void myfunction(double* rotation, double* translation){
    vtkProp3D* prop3D = actor ; // Actor is a variable of the class
    vtkTransform* t = vtkTransform::New();
    t->Identity();
    t->RotateX(rotation[0]);
    t->RotateY(rotation[1]);
    t->RotateZ(rotation[2]);
    prop3D->SetUserMatrix(t->GetMatrix());
    vtkRenderWindowInteractor *rwi = this->Interactor;
    rwi->Render();
}

我以前的代码运行得很好,但现在当我调用这个函数时,我得到了以下错误:

E/VTK     ( 6271): ERROR: In /Users/....../Rendering/OpenGL2/vtkOpenGLPolyDataMapper.cxx, line 1413
E/VTK     ( 6271): vtkOpenGLPolyDataMapper (0x4b8e6e90): Error setting 'vertexMC' in shader VAO.
E/VTK     ( 6271): ERROR: In /Users/....../Rendering/OpenGL2/vtkOpenGLPolyDataMapper.cxx, line 1421
E/VTK     ( 6271): vtkOpenGLPolyDataMapper (0x4b8e6e90): Error setting 'normalMC' in shader VAO.
E/VTK     ( 6271): ERROR: In /Users/....../Rendering/OpenGL2/vtkOpenGLPolyDataMapper.cxx, line 1413
E/VTK     ( 6271): vtkOpenGLPolyDataMapper (0x4b8e6e90): Error setting 'vertexMC' in shader VAO.
E/VTK     ( 6271): ERROR: In /Users/....../Rendering/OpenGL2/vtkOpenGLPolyDataMapper.cxx, line 1421
E/VTK     ( 6271): vtkOpenGLPolyDataMapper (0x4b8e6e90): Error setting 'normalMC' in shader VAO.
E/libEGL  ( 6271): validate_display:254 error 3008 (EGL_BAD_DISPLAY)
E/VTK     ( 6271): ERROR: In /Users/....../Rendering/OpenGL2/vtkOpenGLPolyDataMapper.cxx, line 1413
E/VTK     ( 6271): vtkOpenGLPolyDataMapper (0x4b8e6e90): Error setting 'vertexMC' in shader VAO.
E/VTK     ( 6271): ERROR: In /Users/....../Rendering/OpenGL2/vtkOpenGLPolyDataMapper.cxx, line 142

请注意,应用程序不会崩溃,我的参与者会被旋转(即使我更改了值,也会进行固定的旋转),如果我再次开始与参与者的正常交互,应用程序也会正常工作。值得注意的是,我传递给不同函数的值对我来说很好,比如:

Rotation[0] = 0.586671, Rotation[1] = 0.021346, Rotation[2] = -0.028796

因此,我想知道我在这里做错了什么。

提前感谢

在VTK中设置OpenGL属性时出错,可能是因为着色器程序未使用该属性,或者我认为试图在没有数据的情况下设置该属性。也许还有其他原因。第一步是在错误发生时查看着色器代码。可以在ReplaceShaderValues中取消注释vtkOpenGL2PolyDataMapper.cxx以打印着色器。此外,作为参考,您当前正在泄漏vtkTransform,您应该能够直接在actor上调用SetUserMatrix(假设它是vtkActor),因为它是vtkProp3D的子类。