簡體   English   中英

OSX 10.11上的VTK 7和Qt5.6 OpenGL渲染沖突

[英]VTK 7 & Qt5.6 OpenGL Rendering conflict on OSX 10.11

將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只是渲染一個黑色圖像(見帖子的結尾)。 我已經踩過這個關於讓QVTKWidget繼承QOpenGLWidget的線程 ,但由於QOpenGLWidget和合成 ,我做不起

我試圖將QVTKWidget及其一些方法(PaintEvent&co。)子類化為使用vtkGenericOpenGLRenderWindow之類的東西手動管理其渲染,但要么我面臨着我仍在努力解決的奇怪問題,要么我不是熟練掌握這些。

特別是,在處理QOpenGLContext和QSurfaceFormat時,我似乎無法使用OpenGL 3.2(這是VTK 7 OpenGL2后端所需)。 他們似乎陷入2.1版本。

我應該提一下,我在Windows上沒有這個問題。

如果你有一些線索或幫助提供,我很樂意接受。

最后評論:在我的應用程序中使用的QWebEngine替換QWebKit后出現此問題,但從未與VTK視圖同時顯示。 然而,只要我顯示QWebEngineView,我的應用程序的所有VTK視圖就會停止工作。

謝謝你的時間 :)

VTK渲染問題

QOpenGLWidget的手冊頁說......

“注意:在請求OpenGL核心配置文件上下文時,在構建QApplication實例之前調用QSurfaceFormat :: setDefaultFormat()在某些平台(例如,macOS)上是必需的。這是為了確保上下文之間的資源共享保持功能,因為所有內部上下文是使用正確的版本和配置文件創建的。“

這可能是你問題的根源嗎?

我意識到QGLWidget和QOpenGLWidget之間的區別在於QGL~在小部件中使用本機窗口,而QOpenGLWidget則不然。 QOpenGLWidget始終使用屏幕外渲染。 我相信它會增強渲染性能。 VTK方面的一個缺點是,如果你在初始化之前嘗試在QOpenGLWidget(我的意思是QVTKWidget?繼承QOpenGLWidget)上畫一些東西(任何vtk小部件),程序就會崩潰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM