On Sun, 15 Jan 2012 20:24:35 ext Andrea Bernabei wrote:
> hi guys :)
> 
> I’m writing a 3d model viewer, so basically I want to pass my glview
> to QML to use it as an element and add the rest of the UI with QML…
> 
> My current problem is that only the element which represents my glview
> (a custom QDeclarativeItem with reimplemented paint() with OpenGLES
> 2.0 calls) is shown, the rest (2 toolbars and some more) is all black.
> 
> But when I hit the buttons on the (black) toolbar (or scroll a
> listview) those elements are shown, flickering with black, as if they
> were trying to get the top view but the black layer was trying to
> cover them again.
> 
> I have tried changing the setViewportUpdateMode, and that doesn’t help
> (I have tried all values)…unless I set it to FullViewportUpdate, in
> which case the UI is always repainted and FPS goes from 36 (with the
> 3D model viewer and all the rest under the black layer) to 22!!
> 
> So what I’d like to accomplish is: get what is inside my custom QML
> element (QDeclarativeItem) repainted (i.e. the 3D Model), without
> repainting the rest of the elements of the UI (toolbars, etc) because
> that is useless and eats a lot of FPS…but without painting black over
> all the UI elements (as it currently does)!
> 
> can you guys help me out? :)
> 
> Here’s the setup of my app
> 
>     QApplication::setGraphicsSystem("opengl");
>     Q_INIT_RESOURCE(common);
>     qmlRegisterType<modelviewer>("Test", 1, 0, "Viewer");
>     QScopedPointer<QApplication> app(createApplication(argc, argv));
>    
> QScopedPointer<QmlApplicationViewer> viewer(QmlApplicationViewer::create()
> );
> 
>     viewer->setResizeMode(QDeclarativeView::SizeRootObjectToView);
> 
>     QGLWidget* renderer = new QGLWidget();
> 
>     //if setAutoFillBackground is true I get the 3D model painted, and
> the rest is all WHITE, if it is false, the 3D Model is painted, and
> the rest is all BLACK
>     renderer->setAutoFillBackground(false);
>     viewer->setViewport(renderer);
> 
>     viewer->setAttribute(Qt::WA_OpaquePaintEvent);
>     viewer->setAttribute(Qt::WA_NoSystemBackground);
>     viewer->viewport()->setAttribute(Qt::WA_OpaquePaintEvent);
>     viewer->viewport()->setAttribute(Qt::WA_NoSystemBackground);
> 
>     viewer->setMainQmlFile(QLatin1String("qml/main2.qml"));
> 
> 
> Thanks in advance to anyone who will try to help me :)

I don't know much about mixing opengl rendering with graphics view rendering, 
but I do know it has already been done by one project.

QtQuick3D provides QML elements that can render your 3D model without even 
having to use C++! See http://doc.qt.nokia.com/qt-quick3d-snapshot/qml-
mesh.html

If QtQuick3D still doesn't do what you want, its docs will probably help you 
anyway. Implementing a custom QtQuick3D Item that paints in OpenGL should be a 
lot better documented than doing the same with a 2D QtQuick Item. They've 
probably even considered the repainting aspects, since they also have a scene 
tree like GraphicsView does.

Source (For Qt4.x, For Qt5.x see codereview.qt-project.org):
http://qt.gitorious.org/qt-labs/qt3d
The Qt3D mailing list:
http://lists.trolltech.com/mailman/listinfo/qt-3d

-- 
Alan Alpert
Senior Engineer
Nokia, Qt Development Frameworks
_______________________________________________
Qt-qml mailing list
Qt-qml@qt.nokia.com
http://lists.qt.nokia.com/mailman/listinfo/qt-qml

Reply via email to