gpt4 book ai didi

c++ - OSX 10.11 上的 VTK 7 和 Qt5.6 OpenGL 渲染冲突

转载 作者:太空狗 更新时间:2023-10-29 23:13:45 39 4
gpt4 key购买 nike

将我的 Qt 5.3.2 依赖项升级到 Qt 5.6 后,VTK 渲染不再工作。

这是 5.3.2 代码:

#include <QtWidgets>
#include <QGLWidget>
#include <vtkActor.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderer.h>
#include <vtkSphereSource.h>
#include <QVTKWidget.h>
#include <vtkRenderWindow.h>

int main( int argc, char** argv ){

// create QApplication
QApplication l_app( argc, argv );

// Create widget and layout
QWidget* l_main_widget = new QWidget;
QHBoxLayout* l_main_layout = new QHBoxLayout;
l_main_widget->setLayout( l_main_layout );

// create a QVtkWidget with a simple sphere inside
QVTKWidget* l_view = new QVTKWidget;
l_view->setFixedSize( 300, 300 );
vtkSmartPointer<vtkSphereSource> l_sphere_source = vtkSmartPointer<vtkSphereSource>::New();
vtkSmartPointer<vtkPolyDataMapper> l_sphere_mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
l_sphere_mapper->SetInputConnection( l_sphere_source->GetOutputPort() );
vtkSmartPointer<vtkActor> l_sphere_actor = vtkSmartPointer<vtkActor>::New();
l_sphere_actor->SetMapper( l_sphere_mapper );
vtkSmartPointer<vtkRenderer> l_renderer = vtkSmartPointer<vtkRenderer>::New();
l_renderer->AddActor( l_sphere_actor );
l_view->GetRenderWindow()->AddRenderer( l_renderer );
l_main_layout->addWidget( l_view );

// create a QWebEngineView
QGLWidget* l_gl_widget = new QGLWidget;
l_main_layout->addWidget(l_gl_widget);
l_main_widget->show();

return l_app.exec();
}

我只是将 QGLWidget 更新为 Qt 5.6 的 QOpenGLWidget :

QOpenGLWidget* l_gl_widget = new QOpenGLWidget;

现在,我的 QVTKWidget 只是渲染一个黑色图像(见文章结尾)。我已经踩到this thread about making QVTKWidget inherits QOpenGLWidget , 但我负担不起,因为 QOpenGLWidget & compositing

我尝试子类化 QVTKWidget 及其一些方法(PaintEvent 等)以使用诸如 vtkGenericOpenGLRenderWindow 之类的东西手动管理其渲染,但要么我面临我仍在尝试解决的奇怪问题,要么我我对这些还不够熟练。

特别是,在处理 QOpenGLContext 和 QSurfaceFormat 时,我似乎无法让它们与 OpenGL 3.2 一起工作(这是 VTK 7 OpenGL2 后端所要求的)。他们似乎坚持使用 2.1 版本。

我应该提一下,我在 Windows 上没有这个问题。

如果你能提供一些线索或帮助,我很乐意接受。

最后的评论:这个问题是在我的应用程序中使用 QWebEngine 替换 QWebKit 后出现的,但从未与 VTK View 同时显示。然而,一旦我显示 QWebEngineView,我应用的所有 VTK View 都会停止工作。

感谢您的宝贵时间:)

VTK Rendering problem

最佳答案

QOpenGLWidget 的手册页说...

“注意:在请求 OpenGL 核心配置文件上下文时,在某些平台(例如 macOS)上,在构造 QApplication 实例之前调用 QSurfaceFormat::setDefaultFormat() 是强制性的。这是为了确保上下文之间的资源共享保持功能,因为所有内部上下文都是使用正确的版本和配置文件创建的。”

这会是您问题的根源吗?

我意识到 QGLWidget 和 QOpenGLWidget 之间的一个区别是 QGL~ 在小部件中使用 native 窗口,而 QOpenGLWidget 不是。 QOpenGLWidget 总是使用离屏渲染。我相信它会增强渲染性能。 VTK 方面的一个缺点是,如果您在初始化之前尝试在 QOpenGLWidget(我的意思是 QVTKWidget?继承 QOpenGLWidget)上绘制某些东西(任何 vtk 小部件),程序将会崩溃。

关于c++ - OSX 10.11 上的 VTK 7 和 Qt5.6 OpenGL 渲染冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37329922/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com